Autor | Zpráva | ||
---|---|---|---|
Rodgers23 Profil |
#1 · Zasláno: 5. 7. 2015, 23:41:36
Ahoj, lámu si hlavu nad tím, co dělám špatně...potřebuju mazat položky z databáze pomocí checkboxů. V html mám tento výstup:
<!-- START mycomments --> <p>Vložil jste komentář <b>{comment}</b></p> <form action="profile/deletecomments-all" method="post" enctype="multipart/form-data"> <input type="checkbox" name="check[]" value="{ID}" />Vyber<br /> <!-- END mycomments --> <input type="submit" id="delete" name="delete" value="Smazat" /> </form> V controlleru se mi následně volá funkce: "profile/deletecomments-all" kde by se měl tento příkaz vykonat: private function deleteCommentsAll( $user) { if(isset($_POST['delete'])) { foreach ($_POST["check"] as $id); $sql = "DELETE FROM mycomments WHERE ID = $id"; } } Nevíte, kde je problém? |
||
Alphard Profil |
#2 · Zasláno: 5. 7. 2015, 23:55:58
Středník za foreach tvoří prázdný příkaz, tudíž se nic neprovede (resp. mohla by se smazat poslední položka).
A hned na dalším řádku se pouze sestavuje SQL dotaz, který však zůstává jen uložený v proměnné, nevolá se žádná funkce, která by ho mohla vykonat. |
||
Rodgers23 Profil |
#3 · Zasláno: 6. 7. 2015, 10:43:31
Tak trochu jinak, upravil jsem funkci v controller, který navazuje na model, kde by se měl tento příkaz vykonat, ale nevím přesně jak to upravit:
private function deleteCommentsAll( $user) { if(isset($_POST['delete'])) { foreach ($_POST["check"] as $id) { require_once( FRAMEWORK_PATH . 'models/mycomments.php' ); $mycomments = new MyComments( $this->registry, $mycomments ); if( $mycomments->deleteall() ) { $this->registry->errorPage( 'Je nám líto...', 'Při pokusu o smazání komentáře došlo k chybě'); } else { $url = $this->registry->getObject('url')->buildURL( array('profile'), '', false ); $this->registry->redirectUser( $url, 'Konec sledování komentáře', 'Váš komentář byl úspěšně smazán'); } } } } V modelu se následně volá funkce deleteall: public function __construct( Registry $registry, $id=0 ) { $this->registry = $registry; if( $id > 0 ) { $this->id = $id; $sql = "SELECT a.*, p.name as creator_name FROM mycomments a, profile p WHERE p.user_id=a.creator AND a.ID=" . $this->id; $this->registry->getObject('db')->executeQuery( $sql ); } else { $this->id = 0; } public function deleteall($id) { $sql = "DELETE FROM mycomments WHERE ID = $id"; $this->registry->getObject('db')->executeQuery( $sql ); } Mazání jednotlivých komentářů mi přes model funguje, ale když tam chci mít právě mazání pomocí checkboxu pomocí funkce "deleteall", tak si nevím rady |
||
Taps Profil |
#4 · Zasláno: 7. 7. 2015, 07:15:01
Rodgers23:
zkus <? private function deleteCommentsAll( $user) { if(isset($_POST['delete'])) { foreach ($_POST["check"] as $id) { require_once( FRAMEWORK_PATH . 'models/mycomments.php' ); $mycomments = new MyComments( $this->registry, $mycomments ); if( $mycomments->deleteall($id) ) { $this->registry->errorPage( 'Je nám líto...', 'Při pokusu o smazání komentáře došlo k chybě'); } else { $url = $this->registry->getObject('url')->buildURL( array('profile'), '', false ); $this->registry->redirectUser( $url, 'Konec sledování komentáře', 'Váš komentář byl úspěšně smazán'); } } } } ?> |
||
Rodgers23 Profil |
#5 · Zasláno: 7. 7. 2015, 14:50:50
nee, ani to mi nepomůže, nic to nedělá: if( $mycomments->deleteall($id) )
|
||
Taps Profil |
Rodgers23:
zkus ten výstup vypsat na obrazovku z funkce vypsat na obrazovku |
||
Rodgers23 Profil |
#7 · Zasláno: 8. 7. 2015, 07:39:13
Jak to myslíš přesně? po odeslání se mi stránka vrátí zpět na stránku profile. Mě to připadá že to vůbec nereaguje na ten příkaz.
|
||
Taps Profil |
#8 · Zasláno: 8. 7. 2015, 08:56:25
Rodgers23:
tím pádem musíš více prozkoumat <? $mycomments->deleteall($id) ?> |
||
Rodgers23 Profil |
#9 · Zasláno: 9. 7. 2015, 11:11:47
Tak už jsem to vyřešil. Místo
foreach ($_POST["check"] as $id) { if(isset ($_POST["check"])) { $id=implode(',',$_POST['check']); ... $sql = "DELETE FROM mycomments WHERE id IN ($id)"; $this->registry->getObject('db')->executeQuery( $sql ); |
||
Časová prodleva: 10 let
|
0