Avatar
tribal.cz
Redaktor
Avatar
tribal.cz:

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
Redaktor
Avatar
Odpovídá na tribal.cz
mkub:

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  +1 7.1.2014 5:17
Avatar
tribal.cz
Redaktor
Avatar
tribal.cz:

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
kashpi
Redaktor
Avatar
kashpi:

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í
+1 bodů
Řešení problému
 
Nahoru Odpovědět 7.1.2014 8:49
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na tribal.cz
Petr Nymsa:

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
tribal.cz
Redaktor
Avatar
tribal.cz:

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
Marek Z.
Redaktor
Avatar
Marek Z.:

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 kashpi
Tomáš123:

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

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

Marek Z.

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.