Обновление значений таблицы с использованием раскрывающегося списка без использования кнопки отправки

0

Я пытаюсь обновить базу данных, используя раскрывающийся список, не используя кнопку отправки.

Здесь мое раскрывающееся меню:

<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"] на параметр select[name="status"] option
  • 0
    Вам, вероятно, следует также прослушивать событие change вместо события click, чтобы избежать запуска ненужного кода и выполнения ненужных запросов.
Показать ещё 12 комментариев
Теги:
database
phpmyadmin

3 ответа

0
Лучший ответ

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

  • 0
    Спасибо вам большое!
2

Вы нацеливаете не тот элемент $('option[name="status"]') должен быть $('select[name="status"] option'

Я предлагаю вам использовать id, есть более четкие и быстрые.

Кроме того, вас также будет интересовать событие изменения

https://api.jquery.com/change/

  • 1
    с вашим кодом он слушает клики по самому выбору. Могу ли я предложить изменить $('select[name="status"]') на $('select[name="status"] option') . (Но когда используется событие изменения, слушайте выбор, а не опцию.)
  • 0
    Спасибо за совет.
Показать ещё 7 комментариев
1

Селектор должен быть select и событие должно быть change(). Попробуй это:

$('select[name="status"]').change(function() {

вместо:

$('option[name="status"]').click(function() {
  • 0
    Хм, я попробовал это, но я все еще получаю тот же результат, спасибо, что указали на это.
  • 0
    @JohnZ Что происходит в сетевой панели вашей консоли? Любой след, любая ошибка?
Показать ещё 5 комментариев

Ещё вопросы

Сообщество Overcoder
Наверх
Меню