Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Prosím o kontrolu scriptu

Aktivity
Avatar
Martin Suchodol:6.1.2014 23:33

ahoj dneska jsem se pustil do přepsání procedurální ho scriptu pro mazání dat z db do OOP je mi jasné že to možná tále není podle oop košér ale stále to upravuji ale bez ohledu na toto by to mělo fungovat ale nejede to

<?php

class DelPost {

    private function selectSender()
    {
        $result = Database::query('SELECT `sender` FROM `post` WHERE `sender` = ?', array($_SESSION['login']));
        return $result->fetch();
    }

    private function countPost($id)
    {
        $result = Database::query('SELECT `post` FROM `post` WHERE `post_id` = ?', array($id));
        return $result->rowCount();
    }

    private function deletePost($id)
    {
        Database::query('DELETE FROM `post` WHERE `post_id` = ? AND `sender` = ?', array($id, $_SESSION['login']));
    }

    private function  clearId($clear_id)
    {
        $id = stripslashes(htmlspecialchars(trim($clear_id)));
        return $id;
    }

    private function deleteId()
    {
        if(isset($_GET['id']) AND $_GET['id'] == '') {
            $this->clearId($_GET['id']);
            $count = $this->countPost($id);
            if($count != 0 ) {
                $nick = $this->selectSender();
                if($nick == $_SESSION['login']) {
                    $delPost = $this->deletePost($id);
                    if(!$delPost) {
                        echo ("Zpráva nebyla smazána!");
                    } else {
                        echo "<script>alert('Zpráva byla smazána.')</script>";
                        header("Refresh: 0; url=index.php");
                    }
                } else {
                    exit("Pokoušíte se smazat cizí zprávu");
                }
            } else {
                exit("Zpráva kterou se pokoušíte smazat neexistuje!");
            }
        }
    }

    public function write()
    {
        $this->deleteId();
    }
}

?>

na script odkazuji takto

echo ("<a href='del_post.php?id=" . $post['post_id'] . "'>Smazat</a>");
Editováno 6.1.2014 23:36
 
Odpovědět
6.1.2014 23:33
Avatar
mkub
Tvůrce
Avatar
Odpovídá na Martin Suchodol
mkub:7.1.2014 5:17

nikde nevidim vytvorenie instancie triedy, ako ani nevidim volanie metod triedy... bez tychto dvoch veci ti to nebude fungovat...

pozri si tunajsie tutorialy o OOP

 
Nahoru Odpovědět
7.1.2014 5:17
Avatar
Martin Suchodol:7.1.2014 8:05

instanci vytvářím v souboru del_post.php pravda měl jsem to napsat

třídu načítám autoladerem

<?php
$delete = new DelPost();
$delete->write;
?>

Edit: jinak je script v pohodě tedy???

Editováno 7.1.2014 8:06
 
Nahoru Odpovědět
7.1.2014 8:05
Avatar
michalkasparec
Tvůrce
Avatar
michalkasparec:7.1.2014 8:49

Podle mě si už odporuje první podmínka v metodě deleteId()

if(isset($_GET['id']) AND $_GET['id'] == '')

nemělo by tam být

if(isset($_GET['id']) AND $_GET['id'] != '')
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
7.1.2014 8:49
Avatar
Petr Nymsa
Tvůrce
Avatar
Odpovídá na Martin Suchodol
Petr Nymsa:7.1.2014 9:15

Poslední metoda (deleteID).

  1. Dej metodě parametr, vždyť ne vždy může ID přijít z pole GET
  2. Chyby nevypisuj díky echo přímo v metodě, metoda má smazat ID ne ještě informovat uživatele, tj vyvoláš výjimku, tu zachytíš a něco uděláš - vypíšeš chybu, přesměruješ...

3)Proč tam je funkce write, která stejně jenom zavolá vnitřně deleteID ?

Nahoru Odpovědět
7.1.2014 9:15
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Martin Suchodol:7.1.2014 13:58

Díky bylo to tou podínkou jště mi magoří ověření uživatele ale s tí už se nějak poperu ta funkce write má svoje místo plánuju pomocí modálního okna po uživately chtít zadat i heslo pro ověření smazání nebo jen nějaké potvrzní kliknutím na tlacitko

edit: to overeni uz je ok zapoměl jsem ze musim promenou nick zapsat takto

$nick['sender']
Editováno 7.1.2014 14:02
 
Nahoru Odpovědět
7.1.2014 13:58
Avatar
Uživatel sítě :7.1.2014 17:15

Místo funkce clearId bych použil do podmínky preg_match, jelikož je id 'vždy' číslo tak by stačilo toto třeba:

if(isset($_GET['id']) AND $_GET['id'] == '')
nahradit
if(isset($_GET['id']) AND preg_match('/^[[:digit:]]+$/', $_GET['id']) == 1)

Potom pokud to pustí už nemusíš proměnou ošetřovat byť je i z proměnné $_GET.

Nahoru Odpovědět
7.1.2014 17:15
Chybami se člověk učí, běžte se učit jinam!
Avatar
Tomáš123
Člen
Avatar
Odpovídá na michalkasparec
Tomáš123:30.8.2015 17:16

Podle mě si už odporuje první podmínka v metodě deleteId()

Neodporuje. Premenná je isset ak premenná="". Zápis nie je chybný ale duplicitný.

Uživatel sítě

bych použil do podmínky preg_match

Regulárne výrazy sú zložité a pomalé funkcie. V tak jednoduchom prípade sa oplatí využiť skôr (pretypovanie a) testovanie funkciou is_numeric (http://be2.php.net/…-numeric.php).

Nahoru Odpovědět
30.8.2015 17:16
Keby nebolo Internetu Exploreru, nebolo by dnešného internetu.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.