2013-03-13 3 views
2

У меня есть небольшая проблема. У меня есть страница 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']}'>"; 

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

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

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

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

Я надеюсь, что это имеет смысл? Почему мои значения параметров не отображаются вообще, а во-вторых, они не показывают параметр SELECTED (извлеченный из БД).

Любая помощь пожалуйста?

+0

Вы не закончить цикл Еогеасп – ioums

+0

@ioums К сожалению о том, что я закончил его. Просто забыл последний отредактировал его сейчас :) – Jsmith

+0

Может быть, просто еще одна опечатка, но она должна быть закрыта до – ioums

ответ

3

Сфокусируйтесь на этой области, вы должны получить ошибку 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){ 
+0

Хорошо, я получил его работу ... Я решил сделать все в PHP-тегах. Вот что я имею в виду: закрыл> неверно после эха 'echo '

"; echo ""; // \t \t echo "Продукт: "; \t \t echo "Продукт: "; echo ""; ' Хорошо, так что по крайней мере сейчас отображаются варианты. Тем не менее, другая проблема: «( В основном на странице показан первый вариант при выпадающем, то есть« cholcate », а не конкретно то, что пользователь сохранил в БД. Почему это может быть. Любые идеи? – Jsmith

+0

была последней строкой ? мой ответ ваша проблема – UnholyRanger

1

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

Прежде всего, проверьте входы. Вы не должны доверять никаким переменным от пользователя $ _GET, $ _POST и т. Д. Слабость исходного кода просто ищет атаку SQL-инъекций.

<?php 

Эта вещь выглядит как он ожидал какой-то прошло ID, который затем спустить 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, так что это не шанс иметь дубликат ID принимая поверх существующей записи.

 if ($id == $key){ 
     $page .= ' selected="selected"'; 
     } 
    $page .= ">$value</option>\n"; 

//close the foreach 
} 

$page .= "</select>\n"; 

print $page; 
?> 
+0

Большое спасибо за ваш ответ и помощь. Я исправил это сейчас, и это было из-за того, как я закрывал один маленький «>» внутри эха !!! Нехорошее право? Проблема в том, что SELECTED не отображается в зависимости от того, какой исходный выбор был у пользователей: '( – Jsmith

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