2014-10-24 4 views
1

Привет, я пытаюсь сделать код для ОБНОВЛЕНИЯ или ИЗМЕНИТЬ ответы и комментарии опроса за ответ, но когда я выполняю функцию, подающую форму, она не сохранила никакого значения в базе данных. Что я могу сделать, чтобы исправить это?PDO UPDATE массив с использованием php mysql

Я новичок в PDO.

Заранее спасибо.

Структура базы данных

"Questions" (idquestion, question) 

"Surveys" (idsurvey, idquestion, answers, comments_per_question, survey_number) 

функция Update

public function ModifySurveyMulti($answer = array()) 
{       
    if(!empty($answer)) { 
     foreach($answer as $questi => $value ) { 
      $this->MyDB->Write("UPDATE survey SET(
         `idquestion` = '".$questi."',        
         `answers` = '".$value[0]."', 
         `comments_per_answer`= '".$_POST["comment"][$questi]."')"); 
     } 
    } 
} 

modify_surveyform.php

<th><?php echo $row["questions"];?></th> 
<td> 
    <input type = "text" 
     name = "answer[<?php echo $row['idquestion'];?>][]" 
     value = "<?php echo $row["answers"];?>"> 
    </input> 
</td> 
<td> 
    <Textarea type = "text" 
      name = "comment[<?php echo $row['idquestion'];?>]" 
      cols = "50" rows = "3"/> <?php echo $row["comment"];? 
    </textarea> 
</td> 
</tr><?php } ?> 

Mydbconnect.php

<?php 
// I'm adding my PDO database because yours is deprecated 
class DBConnect 
{ 
    public $con; 
    // Create a default database element 
    public function __construct($host = '',$db = '',$user = '',$pass = '') 
    { 
     try { 
      $this->con = new PDO("mysql:host=$host; 
            dbname=$db",$user, 
            $pass, array(
              PDO::ATTR_ERRMODE 
               => PDO::ERRMODE_WARNING 
             ) 
           ); 
     } 
     catch (Exception $e) { 
      return 0; 
     } 
    } 

    // Simple fetch and return method 
    public function Fetch($_sql) 
    { 
     $query = $this->con->prepare($_sql); 
     $query->execute(); 
      if($query->rowCount() > 0) { 
       while($array = $query->fetch(PDO::FETCH_ASSOC)) { 
        $rows[] = $array; 
       } 
      } 
     return (isset($rows) && $rows !== 0 && !empty($rows))? $rows: 0; 
     } 

     // Simple write to db method 
     public function Write($_sql) 
     { 
      $query = $this->con->prepare($_sql); 
      $query->execute(); 
     } 
}?> 
+3

Одна из основных причин использования PDO является поддержка параметризованных запросов, и все же вы до сих пор просто конкатенации значения непосредственно из формы. Вы изучали документацию в любой момент? http://php.net/manual/en/book.pdo.php –

+0

Пока вы не показываете нам код '$ this-> MyDB-> Write()', мы не сможем вам помочь. – CodeZombie

+0

Я уже добавил mydbconnect.php, есть все функции pdo, которые я использую на мгновении. – dcft

ответ

2

Мало что вам нужно сделать:

  • Прежде всего угробить этот код, это бесполезно и подвергать вас Sql инъекцию
  • Использование PDO непосредственно с подготовленным заявлением
  • Необходимый запрос:

UPDATE survey SET(`answers`= ?,`comments_per_answer`= ?) WHERE idquestion = ? 

Вам нужно будет настроить свой класс только создать соединение

class DBConnect 
{ 
    public $con; 

    public function __construct($host = '',$db = '',$user = '',$pass = '') 
    { 
     try { 
       $this->con = new PDO(
           "mysql:host=$host;dbname=$db", 
           $user,$pass, 
           array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING) 
       ); 
     } 
     catch (Exception $e) { 
      die($e); 
     } 
    } 

    public function get_connection(){ 
     return $this->con; 
    } 

} 

Так что вы можете создать его так:

$db = new DBConnect(/*pass arguments here*/); 
$this->MyDB = $db->get_connection(); 

Изменить и использовать его в функции:

public function ModifySurveyMulti($answer = array(), $comments) 
{ 
    $sql = 'UPDATE survey SET(`answers`= ?,`comments_per_answer`= ?) 
      WHERE idquestion = ?'; 
    $stmt->prepare($sql); 
    foreach($answer as $questi => $value) { 
     $stmt->execute(array($value, $comments[$questi],$questi)); 
     $count = $stmt->rowCount(); 
     echo $count > 0 ? $questi.' updated' : $questi.' did not update'; 
    } 
} 

Вызов функции:

if(isset($_POST['answer'], $_POST['comments'])){ 
    $answers = $_POST['answer']; 
    $comments = $_POST['comments']; 
    ModifySurveyMulti($answers, $comments); 
} 
+0

Извините @meda Мне пришлось опубликовать сообщение снова, потому что я не понял вашего ответа, я добавил ваш класс связи, но он отправляет мне ошибку с некоторыми переменными, я не знаю почему? – dcft

+0

, когда это произойдет, вы должны вернуться и дать мне ошибку, чтобы я мог настроить свой ответ – meda

Смежные вопросы