Заполнение с помощью MySQL записей

У меня есть база данных MySQL, которая содержит, среди прочего, 2 таблицы. Первая – это таблица events , содержащая имена событий и другие данные. Другая – таблица instance . Эта таблица связывает таблицу events таблицей venue и добавляет дату, поэтому каждая строка является экземпляром связанного события.

Я делаю форму для бронирования событий для внутреннего использования для этих событий. Я хочу разрешить выбор события, которое будет забронировано, в раскрывающемся списке. Итак, я заполнил один раскрывающийся список именами событий:

 $qEvent = "SELECT event_name, event_id FROM events"; $rEvent = mysqli_query($dbc,$qEvent); echo '<select>'; while ($row = mysqli_fetch_assoc($rEvent)) { echo '<option value="'.$row['event_id'].'">'.$row['event_name'].'</option>'; } echo '</select>'; 

Теперь я хочу сделать это для выбранного события, захватить все экземпляры, связанные с этим событием, и заполнить другое раскрывающееся меню датами.

Могу ли я сделать это с помощью PHP, или мне нужно окунуться в Javascript? Я думаю, мне просто нужно каким-то образом захватить значение event_id выпадающего списка, а затем запросить его на основе этого, но я не знаю, как без Javascript.

Вы должны смотреть Javascript или jQuery для достижения своей цели. Раньше я использовал jQuery, основанный на моем вопросе. Это также проще и меньше кода.

Ваш PHP:

Добавьте атрибут идентификатора event_menu в свое меню выбора

 echo '<select id="event_menu">'; while ($row = mysqli_fetch_assoc($rEvent)) { echo '<option value="'.$row['event_id'].'">'.$row['event_name'].'</option>'; } echo '</select>'; <div id="container_for_new_menu"></div> 

Использование jQuery:

 $('#event_menu').on('change', function() { // get selected value and build data string for AJAX var event_selected = "event_selected="+$(this).val(); // send the selected data to a PHP page to build the populated menu $.ajax({ url : 'populate-menu.php', type: 'POST', data : event_selected, dataType : 'html', success : function(data) { $('#container_for_new_menu').html(data); }, error : function() { alert("Something went wrong!"); } }); }); 

На populate-menu.php есть что-то вроде:

 $event_selected = isset($_POST['event_selected']) ? $_POST['event_selected'] : null; // do SQL query here based on user's selection // making sure you validate the data in the POST request for malicious BS // or use parameterized queries // then build a new menu to send back echo '<select>'; // loop through results and build options echo '</select>'; 

Это новое меню будет отправлено на исходную страницу в элемент container_for_new_menu .

По внешнему виду вы хотите заполнить раскрывающийся список «экземпляры» на основе выбора, который пользователь делает в раскрывающемся списке «событие». Вы не можете сделать это без Javascript.

Мой предложенный способ сделать это – использовать AJAX, чтобы вытащить данные экземпляра и заполнить раскрывающийся список «экземпляры» при изменении раскрывающегося списка «event». Полезные ресурсы ниже для простого AJAX получить с jQuery:

http://api.jquery.com/jQuery.get/

http://remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery-ajax/

Для этого вам нужен какой-то Javascript. Либо: Basic – отправьте форму на select и позвольте php заполнить раскрывающийся список экземпляров. Более элегантный – используйте Javascript, чтобы сделать Ajax-вызов на select, который будет динамически заменять div в раскрывающемся списке экземпляра.

Для заполнения второго раскрывающегося окна вам понадобится JavaScript. Я предлагаю вам загрузить все значения в JSON на странице, а затем вы можете просто использовать jQuery в событии изменения, чтобы заполнить второе поле выбора.