Autor Zpráva
Rodgers23
Profil
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
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
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
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
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
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
Rodgers23:
tím pádem musíš více prozkoumat
<?
$mycomments->deleteall($id)
?>
Třeba přes echo si nechat vypsat POST data nebo přímo SQL dotaz, tím by jsi mohl zjistit kde by mohl být problém.
Rodgers23
Profil
Tak už jsem to vyřešil. Místo
 foreach ($_POST["check"] as $id)                
            {
jsem dal
   if(isset ($_POST["check"]))                
            {        
                $id=implode(',',$_POST['check']);
                ...
a v model jsem upravil
   $sql = "DELETE FROM mycomments WHERE id IN ($id)";
   $this->registry->getObject('db')->executeQuery( $sql ); 

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: