2016-07-01 14 views
1

Ich versuche, eine Art einfache Blogging-Plattform zu machen, und es ist ziemlich gut bis jetzt gegangen, hat meine Seite eine Liste von Artikeln in einer Tabelle es bekommt diese Liste von Meine SQL-Datenbank und es gibt auch eine Spalte, die angibt, ob der Artikel öffentlich ist oder nicht. Das Problem ist, dass ich das Schreiben aller dieser Checkboxen nicht als Boolean zum Arbeiten bekomme (wenn Eingabe 1 else 0). Der Teil Ich denke, es schief geht istPHP mehrere Werte der Datenbank durch Kontrollkästchen ändern boolean

<?php 
if (isset($_POST['submit'])) { 
    try { 
     $stmt = $db->prepare('SELECT postID FROM blog_posts') ; 
     $idArray = $stmt->fetch(); 

     for($i = $idArray; $i > 0; $i--){ 
      if(document.getElementById($i).checked){ 
       $public = 1; 
      } else { 
       $public = 0; 
      } 

      try { 
       $stmt = $db->prepare('UPDATE blog_posts SET public = :public WHERE postID = '$i) ; 
       $stmt->execute(array(
        ':public' => $public 
        )); 
      } 
     } 
    } 
?>The entire code can be found here on [Hastebin][1] Thanks in advance 
+1

'document.getElementById ($ i)' was soll das bedeuten? Das ist JavaScript-Code, nicht PHP !! – FirstOne

+0

Sie sollten wahrscheinlich ein JavaScript-Skript ausführen, das einen wahren oder falschen Wert in einer ausgeblendeten Eingabe hinzufügt, wenn Sie ein Formular verwenden. – Jojo01

+0

Sie bereiten eine Anweisung vor und versuchen dann, sie abzurufen, ohne sie ausgeführt zu haben. Ihre for-Schleife versucht zu '--' was wäre ein Array, wenn Sie Ihre vorbereitete Anweisung erfolgreich ausgeführt hätten. Sie haben JavaScript-Code in einer PHP-If-Bedingung. Sie haben Testblöcke verschachtelt, jede ohne einen Haken. Das sind die Hauptprobleme, die ich sehe. –

Antwort

0

Name Geben Sie Ihr public Kontrollkästchen ein Array-Format, so dass jeder die ID in seinem Namen wie diese hat:

<input type="checkbox" name="public[<?php echo $postID ?>]"> 

Dann können Sie diese PHP

if (isset($_POST['submit'])) { 

    // You can use query here instead of prepare if you want all the blog posts 
    $stmt = $db->query('SELECT postID FROM blog_posts'); 

    // fetch the postID from each row in the query result 
    while ($id = $stmt->fetchColumn()) { 

     // set public based on the submitted value from your form 
     $public = empty($_POST['public'][$id]) ? 0 : 1; 

     // do the update 
     $stmt = $db->prepare('UPDATE blog_posts SET public = ? WHERE postID = ?') ; 
     $stmt->execute(array($public, $id); 
    } 
} 

Beachten Sie, dass Sie SELECT ing jeden Blog-Eintrag, also, wenn Ihr Formular nicht der Fall ist: Code Ihre Updates zu tun Fügen Sie jeden Blogpost hinzu. Mit diesem Code wird jeder, der sich nicht in Ihrem Formular befindet, auf public=0 festgelegt. Wenn Sie nicht jeden Blogpost auf Ihrem Formular anzeigen, müssen Sie eine WHERE-Klausel zu Ihrer SELECT-Anweisung hinzufügen, sodass sie nur die Zeilen enthält, die in Ihrem Formular enthalten sind.

+0

Vielen Dank für Ihre Hilfe, jetzt habe ich es funktioniert (so) das verbleibende Problem ist, dass die While-Schleife Ich denke nicht durch jedes Kontrollkästchen Schleife, da ich nur das Kontrollkästchen mit Array-Index 1 und keiner der anderen bearbeiten kann: http: //hastebin.com/xidefeowe.xml voller Seitencode und voll geladene Seite http://hastebin.com/obobituhot.dos auch ja alle meine Checkboxen und Artikel sind in der Form, ich hoffe, Sie können mir helfen, den letzten Teil herauszufinden –