2016-07-01 1 views
1

Я пытаюсь создать какую-то простую платформу для ведения блогов, и до сих пор она прошла довольно хорошо, моя страница содержит список статей на ней в таблице, которая получает этот список из моя база данных sql, и есть также столбец, в котором указано, является ли статья общедоступной или нет. Проблема в том, что я не могу написать все эти флажки как логические для работы (если отмечен вход 1 else 0). Часть я думаю, что это идет не так, этоPHP меняет несколько значений базы данных с помощью флажков 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)' что это должно означать? Это код javascript, а не php! – FirstOne

+0

Возможно, вы должны выполнить скрипт javascript, который добавляет истинное или ложное значение в скрытый ввод, если вы используете форму. – Jojo01

+0

Вы готовите заявление, а затем пытаетесь извлечь его из него, не выполнив его. Ваш цикл for пытается «-», что будет массивом, если вы успешно выполнили подготовленное заявление. У вас есть код JavaScript в условии PHP if. У вас есть вложенные блоки try, каждый без улова. Это основные проблемы, которые я вижу. –

ответ

0

Имя ваши public флажков, используя формат массива, так что каждый из них имеет идентификатор в своем имени, как это:

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

Затем вы можете использовать этот 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); 
    } 
} 

Обратите внимание, что вы SELECT ING каждый пост в блоге, так что если ваша форма не включая каждый пост в блоге, этот код будет устанавливать каждый, который не находится в вашей форме, до public=0. Если вы не показываете каждое сообщение в блоге в своей форме, вам нужно добавить пункт WHERE в ваш оператор SELECT, так что он включает только строки, которые являются, включенные в вашу форму.

+0

Благодарим вас за помощь, теперь у меня есть работа (вроде), остальная проблема в том, что цикл while, который, как мне кажется, не проходит через каждый флажок, поскольку я могу редактировать этот флажок только с помощью индекса массива 1 и ни одного из других: http: //hastebin.com/xideferowe.xml полный код страницы и полностью загруженная страница http://hastebin.com/obobituhot.dos также да все мои флажки и статьи в форме, я надеюсь, что вы можете помочь мне понять последнюю часть –