Отправка формы и обновление базы данных выполняются по желанию в автономном режиме. Когда используется ajax, он сообщает, что переданы правильные переменные POST, но я получаю исключение PDO, я не понимаю, как это исправить, потому что он работает правильно, когда не создает сообщение ajax. Новое для PDO и Ajax.
<form id="privacy" action="privacy.php" method="post">
<input type="hidden" name="id" class="id" value="<?php echo $user->id; ?>">
<label>
<input type="radio" name="name" class="name" value="private" />
<img src="img/lock.png">
</label>
<label>
<input type="radio" name="name" class="name" value="friends"/>
<img src="img/friends.png">
</label>
<label>
<input type="radio" name="name" class="name" value="fof"/>
<img src="img/friends-of-friends.png">
</label>
</form>
<script>
$(function() {
$("#privacy").change(function() {
var name = $(".name:checked").val();
var id = $(".id").val();
$.ajax({
type: "POST",
url: "privacy.php",
data: {"name":name, "id":id},
success: function() {
alert("form submitted: "+ id +" name:" + name);
}
});
});
});
</script>
Функция обновления
public function Privacy($id,$name)
{
// Building INSERT QUERY
$sql = "UPDATE user_privacy";
// keep only wanted fields (change this) to 'field' => value
$data = array_filter($_POST);
$id = $_POST['id'];
$cols = array('id' => 'id','name' => 'name');
$count = 0;
$i = 0;
foreach ($data as $key => $value) {
if(array_key_exists($key, $cols) && $cols[$key] != 'id'){
$sql .= ' SET ' . $cols[$key] . ' = :'. $cols[$key] . ' WHERE parent_id = :id';
unset($data[$key]);
$count = count($data);
} else {
if($count !== 0){
$i++;
$sql .= " $key = '$value' ";
$sql .= $i == $count ? " " : " AND ";
}
}
}
$query = $this->db->prepare($sql);
$query->bindParam("id", $id, PDO::PARAM_STR);
$query->bindParam(':'.$key, $value, PDO::PARAM_STR);
$query->execute();
}
and the exception
Неустранимая ошибка : необработанное исключение PDO: SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MariaDB, на предмет правильного синтаксиса для использования рядом с 'id =' 1 '' в строке 1 в C: \ xampp2 \ htdocs \ platform \ library \ library.php: 151
Трассировки стека:
0 C: \ xampp2 \ htdocs \ platform \ library \ library.php (151): PDO-> prepare ('ОБНОВЛЕНИЕ user_pri ...')
1 C: \ xampp2 \ htdocs \ platform \ privacy.php (24): DemoLib-> Конфиденциальность ('1', 'private', NULL)
2 {главная}
добавляется в C: \ xampp2 \ htdocs \ platform \ library \ library.php в строке 151
Так, как я могу иметь ошибку там, если она обновляется должным образом, прежде чем я добавляю пост отправки ajax. Я вижу, что ajax передает данные поста ('1', 'private', NULll). Так растерялся!