У меня небольшая проблема. У меня есть страница 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-форму, он показывает имя продукта (в текстовом поле), извлеченное из БД. Однако проблема заключается в том, что я хочу сохранить имя продукта в виде раскрывающегося списка, которое уже было выбрано пользователем, а затем выберите его.
Итак, в основном, что я хочу сделать, вместо того, чтобы отображать извлеченные DB параметры в текстовом поле, я хочу, чтобы выбранная пользователем опция отображалась в раскрывающемся списке.
Надеюсь, это изменит ситуацию? Почему мои значения параметров не отображаются вообще, а во-вторых, они не показывают параметр SELECTED (извлеченный из БД).
Любая помощь, пожалуйста?
Сосредоточив внимание на этой области, вы должны получить ошибку 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 ?>
в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
Эта вещь выглядит так, как будто она ожидает какой-то идентификатор, который затем вытащил productName из базы данных … это действительно неясно. Поэтому мы предполагаем, что переменные уже определены. Необходимо использовать такой код:
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\">";
Проверьте, работает ли этот идентификатор. Regex было бы лучше, но одно за раз здесь.
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; ?>