выберите значение параметра из базы данных на выбранном


У меня небольшая проблема. У меня есть 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:&nbsp <input type='text' name='product' value = '{$rows['ProductName']}'>"; 

Перед циклом while я сохраняю детали в переменных как таковые:

$hiddenid = $_POST['ID'];   
$productName = $_POST['product'];

И это работает. когда я загружаю форму php, она показывает название продукта (в текстовом поле), полученное из базы данных. Однако проблема в том, что я хочу сохранить название продукта в виде раскрывающегося списка, который уже был выбран пользователем, а затем выбрать тот.

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

Надеюсь, это имеет смысл? Почему мои значения параметров вообще не отображаются, а во-вторых, они также не отображают ВЫБРАННЫЙ параметр (извлеченный из базы данных).

Какая-нибудь помощь, пожалуйста?

Author: Jsmith, 2013-03-13

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){
 3
Author: UnholyRanger, 2013-03-13 19:25:45

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

Прежде всего, проверьте свои входные данные. Вы никогда не должны доверять никаким переменным от пользователя $_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;
?>
 1
Author: AbsoluteƵERØ, 2013-03-13 17:29:32