Я пытаюсь обновить базу данных, используя раскрывающийся список, не используя кнопку отправки.
Здесь мое раскрывающееся меню:
<td>
<label for=""></label>
<select style="font-family: Questrial;" name="status" required>
<option disabled selected hidden>Select Status</option>
<option value="In Progress">In Progress</option>
<option value="Closed: Cancelled">Closed: Cancelled</option>
<option value="Closed: Solved">Closed: Solved</option>
</select>
</td>
Здесь сценарий:
<script>
$(document).ready(function() {
$('option[name="status"]').click(function() {
var status = $(this).val();
$.ajax({
url: "update2.php",
method: "POST",
data: {
status: status
},
success: function(data) {
$('#result').html(data);
}
});
});
});
</script>
И здесь update2.php:
<?php
//Insert Data
$hostname = "localhost";
$username = "root";
$password = "";
$databasename = "companydb";
try
{
$conn = new PDO("mysql:host=$hostname;dbname=$databasename",$username, $password);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
if(isset($_POST["status"]))
{
$query = "INSERT INTO tickets(status) VALUES (:status)";
$statement = $conn->prepare($query);
$statement->execute(
array('status' => $_POST["status"])
);
$count = $statement->rowCount();
if($count > 0)
{
echo "Data Inserted Successfully..!";
}
else
{
echo "Data Insertion Failed";
}
}
}
catch(PDOException $error)
{
echo $error->getMessage();
}
?>
В основном я хочу, чтобы обновить значения таблиц, когда я делаю выбор из выпадающего списка.
В настоящее время ничего не происходит, когда я делаю выбор. (Нет перезагрузки страницы, Нет сообщения об ошибке, просто ничего)
Я здесь что-то не так?
Также здесь моя схема таблицы:
1) изменить $('option[name="status"]').click(
to $('select[name="status"]').change(
имя "статус" является атрибутом select, а не опциями.
2) убедитесь, что у вас есть элемент с идентификатором "результат", иначе обработчик успеха ajax не будет вставлять полученные данные/строку в любом месте.
Эти изменения должны заставить ваш код работать.
Я рекомендую добавить обработчик ошибок для каждого выполняемого вами ajax-вызова. Также попробуйте запретить вашим php файлам, вызываемым методами ajax, иметь случаи, когда ничего не возвращается/эхо.
if(isset($_POST["status"]))
{
$query = "INSERT INTO tickets(status) VALUES (:status)";
$statement = $conn->prepare($query);
$statement->execute(array('status' => $_POST["status"]));
$count = $statement->rowCount();
if($count > 0)
{
echo "Data Inserted Successfully..!";
}
else
{
echo "Data Insertion Failed";
}
}
// ! add else statement
else
{
echo "unknown index: 'status'";
}
Также интересно ознакомиться с обработкой ошибок ajax: настройка кода ответа в PHP
Вы нацеливаете не тот элемент $('option[name="status"]')
должен быть $('select[name="status"] option'
Я предлагаю вам использовать id, есть более четкие и быстрые.
Кроме того, вас также будет интересовать событие изменения
$('select[name="status"]')
на $('select[name="status"] option')
. (Но когда используется событие изменения, слушайте выбор, а не опцию.)
Селектор должен быть select
и событие должно быть change()
. Попробуй это:
$('select[name="status"]').change(function() {
вместо:
$('option[name="status"]').click(function() {
option[name="status"]
на параметрselect[name="status"] option
change
вместо события click, чтобы избежать запуска ненужного кода и выполнения ненужных запросов.