2016-04-27 4 views
-1

У меня есть музыкальная база данных с интерфейсом PHP, где вы можете добавлять/редактировать/удалять исполнителей, альбомы, треки с помощью веб-клиента. Последняя реальная проблема, с которой я столкнулся, - это выбрать поле выбора для автоматического выбора опции, которую я передаю на страницу.PHP/MySQL Автоматический выбор на основе предыдущей страницы

Пример:

На странице под названием «createCD.php» У меня есть этот код:

echo "<td><a href=\"editCD.php?cdTitle=".rawurlencode($row['cdTitle'])."&cdID=$row[cdID]&artID=$row[artID]&cdGenre=".rawurlencode($row['cdGenre'])."&cdPrice=$row[cdPrice]\" </a>Edit</td>";` 

Это используется в качестве ссылки на следующей странице, и собирает всю информацию о альбом в базе данных и отправляется на страницу под названием «editCD.php».

Теперь на этой странице, вся информация используется для заполнения веб-страницы, как показано здесь (там больше, но для целей этого поста, только первые MATTERS выбора коробки):

Artist Name: 
<!-- dropdown with artist name --> 
<?php 
echo '<select name= "artID" id="artID">'; 
while ($row = mysqli_fetch_assoc($result)){ 
    echo '<option value="'.$row['artID'].'">'.$row['artName'].'</option>'; 
} 
echo '</select>'; 
?> 
<p> 
Album Title: 
<input id="cdTitle" type="text" name="cdTitle" value ="<?php echo htmlspecialchars($cdTitle); ?>" /> 
</p> 

Что Я бы хотел, чтобы параметр «selected» для «artID» был значением, которое передается на страницу. Используя ассоциативный массив, я смог отобразить «artName», связанный с «artID». В настоящее время вся информация об альбоме отображается правильно, кроме «artName», и по умолчанию она соответствует первому значению. Это проблема, как если бы пользователь просто нажимал кнопку «Обновить», он обновляет имя до имени по умолчанию, поэтому случайно меняет запись базы данных.

Я знаю, что нужно использовать

<option selected ...> 

, но я не уверен на синтаксис для использования.

ответ

1
<?php 
$artID = $_GET['artID']; // get the artID from the URL, you should do data validation 

echo '<select name= "artID" id="artID">'; 
while ($row = mysqli_fetch_assoc($result)){ 
    echo '<option value="'.$row['artID'].'"'; 
    if ($artID == $row['artID']) echo ' selected'; // pre-select if $artID is the current artID 
    echo '>'.$row['artName'].'</option>'; 
} 
echo '</select>'; 
?> 
+0

Спасибо, это отлично работает. Также у меня есть валидация данных в начале каждого файла, но я не думал, что стоит упомянуть об этом сообщении. – Dan

0
$artId = $_GET['artID']; 
while ($row = mysqli_fetch_assoc($result)) { 
    $selected = $artId == $row['artID'] ? 'selected' : ''; 
    echo '<option value="'.$row['artID'].'" '.$selected.'>'.$row['artName'].'</option>';  
} 

Сначала вы получите идентификатор через $ _GET [ 'artID']. (В реальном сценарии используйте intval или что-то, чтобы предотвратить SQL-инъекцию) Затем проверьте цикл, если идентификатор из базы данных совпадает с идентификатором из GET и когда он напечатан «выбрано», иначе ничего нет.

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