выберите значение параметра из базы данных на выбранном
У меня небольшая проблема. У меня есть edit.php страница. На этой странице перечислены сведения о продуктах, которые можно редактировать.
Я запускаю запрос
while($rows=mysql_fetch_assoc($query)){
echo"<form method=\"POST\" action=\"edit.php\">";
echo "<input type ='hidden' name='ID' value = '{$rows['ID']}'>";
echo "Product:  <input type='text' name='product' value = '{$rows['ProductName']}'>";
Перед циклом while я сохраняю детали в переменных как таковые:
$hiddenid = $_POST['ID'];
$productName = $_POST['product'];
И это работает. когда я загружаю форму php, она показывает название продукта (в текстовом поле), полученное из базы данных. Однако проблема в том, что я хочу сохранить название продукта в виде раскрывающегося списка, который уже был выбран пользователем, а затем выбрать тот.
Итак, в основном то, что я хочу сделать, это вместо отображения параметров, полученных из базы данных, в текстовом поле, я бы хотел, чтобы выбранный пользователем параметр отображался в раскрывающемся списке.
Надеюсь, это имеет смысл? Почему мои значения параметров вообще не отображаются, а во-вторых, они также не отображают ВЫБРАННЫЙ параметр (извлеченный из базы данных).
Какая-нибудь помощь, пожалуйста?
2 answers
Сосредоточив внимание на этой области, вы должны получить ошибку PHP, если только это не ошибка копирования. Обратите внимание на следующие изменения:
while($rows=mysql_fetch_assoc($query)){
?>
<form method=\"POST\" action=\"edit.php\">
<input type ='hidden' name='ID' value = '<?php echo $rows['ID'];?>'>
<select name ="pnames">
<?php foreach ($arrayproducts as $key => $value) {
?>
<option value = "<?php echo $key; ?>"
<?php
if ($key == $productName){
echo 'selected="selected"';
}
?> >
<?php echo $value; ?>
</option>
<?php } //end foreach ?>
</select>
<?php }//end while ?>
В начале у вас был простой HTML-код в сегменте PHP.
Кроме того, я верю, что вы хотите
if ($value == $productName){
Вероятно, это не самое подходящее место для этого, но так как я ежедневно вижу тонны кода, который ужасен, я решил, что вмешаюсь.
Прежде всего, проверьте свои входные данные. Вы никогда не должны доверять никаким переменным от пользователя $_GET, $_POST и т.д. Слабость исходного кода - это просто поиск атаки с использованием SQL-инъекции.
<?php
Похоже, что эта штука ожидает какого-то переданного идентификатора, который затем извлек бы имя продукта из базы данных... это действительно неясно. Так что мы предполагаем, что переменные уже определены. Нужно использовать такой код:
if(!empty($_GET['id'])&&is_numeric($_GET['id'])){
$id=$_GET['id'];
} else {
$id='';
}
//Declare your array
$arrayproducts = array();
while($rows=mysql_fetch_array($query)){
Вам нужно вызвать что-то здесь для возвращаемого массива... не видя SQL, трудно сказать, чего вы ожидаете, но ваши выноски должны выглядеть так...
//Whatever the name from SQL is for the column
$temp_ID = $rows['id'];
//Whatever the name for the product column is
$temp_Prod = $rows['prod'];
//Load the array
$arrayproducts[$temp_ID]=$temp_Prod;
}
Лучше всего загрузить var для всего, а затем опубликовать его одним кадром, а не в PHP и из него. Код будет намного быстрее, и вы сможете отслеживать код.
$page = "<form method=\"POST\" action=\"edit.php\">";
Проверьте, соответствует ли этот идентификатор работал. Регулярное выражение было бы лучше всего, но здесь по одной вещи за раз.
if(!empty($id)){
$page .= "<input type =\"hidden\" name=\"ID\" value = \"$id\">";
}
$page .= "<select name =\"pnames\">\n";
foreach ($arrayproducts as $key => $value) {
$page .= "<option value = \"$key\"";
Лучше всего использовать поля автоматического увеличения и встроенные идентификаторы для mysql, чтобы не было вероятности, что дубликат идентификатора заменит существующую запись.
if ($id == $key){
$page .= ' selected="selected"';
}
$page .= ">$value</option>\n";
//close the foreach
}
$page .= "</select>\n";
print $page;
?>