ОБНОВЛЕНИЕ массива PDO с использованием php mysql

Здравствуйте! Я пытаюсь создать код для ОБНОВЛЕНИЯ или РЕДАКТИРОВАНИЯ ответов на опрос и комментариев для каждого ответа, но когда я выполняю функцию отправки формы, она не сохраняет никакого значения в базе данных. Что я могу сделать, чтобы это исправить?

Я новичок в PDO.

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

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

"Questions" (idquestion, question)

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

Функция обновления

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();
}
}?>

1

Решение

Несколько вещей, которые вам нужно сделать:

  • Прежде всего угробите этот код, он бесполезен и подвергает вас воздействию 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);
}
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]