Мне нужно обновить строку в базе данных по идентификатору с помощью Ajax.
Моя форма:
<form id="update_ajax">
<input type="text" name="name" class="test_hide">
<input type="hidden" name="id" value="<?php echo $row['id']; ?>">
<input type="submit" value="<?php echo $row['id']; ?>" class="pure-button">
</form>
Моя функция Ajax:
$("#update_ajax").on("submit", function () {
var id = $(this).attr('id');
var name = $(this).attr('name');
var dataall={'id' : id, 'name' : name};
$.ajax({
type: "post",
url: "update.php",
data: dataall,
success: function (data) {
alert(data);
}
});
});
И мой файл php:
if ((isset($_GET['id'])) && (isset($_GET['name']))) {
$id = $_GET['id'];
$name = $_GET['name'];
}else{
die("Not set");
}
$pdo = new PDO("mysql:host=localhost;dbname=test", "root", "8169x5it");
$query = $pdo->prepare("UPDATE test SET name=:name WHERE id=:id");
$query->bindParam(':name', $name);
$query->bindParam(':id', $id);
$query->execute();
И у меня есть ошибка, что мой name
значение не установлено в $_GET['name']
, И я не могу понять, почему это не установлено. Потому что я отправляю это в данных.
Это не верно:
var id = $(this).attr('id');
var name = $(this).attr('name');
$(this)
это форма, так $(this).attr('id')
является "update_ajax"
, а не значение скрытого ввода. А также $(this).attr('name')
не определено, потому что форма не имеет name=something
приписывать. То, что вы действительно хотите, это:
var id = $(this).find("input[name=id]").val();
var name = $(this).find("input[name=name]").val();
Но вы можете упростить все это до:
var dataall = $(this).serialize();
serialize()
найдет все входные данные в форме и вернет URL-кодированную строку, содержащую все их значения.
Наконец, вы должны либо изменить jQuery, чтобы использовать type: 'GET'
или измените PHP для использования $_POST
вместо $_GET
,
Что у тебя есть, http://api.jquery.com/attr/
Что вы хотели http://api.jquery.com/val/
Давайте посмотрим, это должно работать, не похоже на другие ошибки в вашем источнике. Если нет, дайте нам знать.
РЕДАКТИРОВАТЬ:
Также вы меняете:
$(this).attr('id');
$(this).attr('name');
к
$("input[name=id]").val();
$("input[name=name]").val();
Или же
$(this).serialize();
Увидеть https://api.jquery.com/serialize/ на потом