2013-12-17 5 views
0

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

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

$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.

+0

Вам нужно окунуться в Javascript, если вы хотите, чтобы меню SELECT было заполнено вживую без перезагрузки страницы. – TheCarver

+0

Вы используете jQuery где-нибудь еще? – TheCarver

+0

Не на этой части сайта, но нет ничего, что помешает мне использовать его на самом деле. – ElendilTheTall

ответ

1

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

Ваш PHP:

Добавить атрибут ID 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!"); 
     } 
    }); 
}); 

На заселить-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 элемент.

+0

Ничего себе, спасибо за такой тщательный ответ! Я попробую. – ElendilTheTall

+0

Работал отлично в первый раз, спасибо большое. В некоторых случаях у меня есть события в разных местах, но в тот же день, я полагаю, я мог бы сделать то же самое во втором выпадающем списке, чтобы схватить их? – ElendilTheTall

0

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

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

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

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

+0

Зачем это делать с ajax? Почему бы просто не заполнить все данные на странице в JSON, а затем заполнить SELECT этим? Намного быстрее. – Styphon

+2

@Styphon, но и не очень масштабируемый. Если данные экземпляра вырастут до тысяч, вы будете выводить огромное количество информации. Это то, для чего был разработан AJAX. –

+0

@Styphon, так захватывает 10 000 000 строк данных быстрее? Неа. – TheCarver

0

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

-2

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

Смежные вопросы