Porównaj ceny domen i usług IT, sprzedawców z całego świata

wybierz wartość parametru z bazy danych na wybranym


Mam mały problem. Mam stronę edit.php. Ta strona zawiera listę informacji o produkcie, które możesz edytować.
Prowadzę żądanie
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']}'>";

Przed pętlą while przechowuję szczegóły w zmiennych jako takie:
$hiddenid = $_POST['ID']; 
$productName = $_POST['product'];

i to działa. kiedy ładuję formularz php, pokazuje nazwę produktu (w polu tekstowym), który otrzymał z DB. Problem polega jednak na tym, że chcę zapisać nazwę produktu jako listę rozwijaną, która została już wybrana przez użytkownika, a następnie ją wybrać.
Więc w zasadzie to, co chcę zrobić, to zamiast wyświetlać DB wyodrębnionych parametrów w polu tekstowym, chcę, aby parametr wybrany przez użytkownika pojawił się na liście rozwijanej.
Mam nadzieję, że to ma sens? Dlaczego moje wartości opcji w ogóle się nie wyświetlają, a po drugie nie pokazują również opcji WYBRANE (pobrane z bazy danych).
Proszę o pomoc?
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Skupiając się na tym obszarze, powinieneś otrzymać błąd PHP, chyba że jest to błąd kopiowania. Zwróć uwagę na następujące zmiany:
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 ?>

Na samym początku miałeś prosty kod HTML w segmencie PHP.
Wierzę też, że chcesz
if ($value == $productName){
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Prawdopodobnie nie jest to dobre miejsce do zrobienia tego, ale ponieważ codziennie widzę mnóstwo kodu, to jest okropne, pomyślałem, że wkroczę.
Przede wszystkim sprawdź wprowadzone dane. Nigdy nie należy ufać żadnym zmiennym od użytkownika $ _GET, $ _POST, itp. Luźność kodu źródłowego po prostu szuka ataku typu SQL injection.
<?php

Wygląda na to, że oczekuje jakiegoś rodzaju przekazanego identyfikatora, który następnie wyciągnie productName z bazy danych ... jest naprawdę niejasny. Dlatego zakładamy, że zmienne są już zdefiniowane. Musisz użyć następującego kodu:
if(!empty($_GET['id'])&&is_numeric($_GET['id'])){
$id=$_GET['id'];
} else {
$id='';
}//Declare your array
$arrayproducts = array();
while($rows=mysql_fetch_array($query)){

Musisz wywołać coś tutaj w zwróconej tablicy ... bez wyświetlania kodu SQL trudno powiedzieć, czego się spodziewasz, ale twoje objaśnienia powinny wyglądać tak ...
//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;
}

Najlepiej jest załadować var ​​dla wszystkiego, a następnie umieścić go w jednej ramce, a nie w PHP i poza nim. Kod będzie znacznie szybszy i możesz go śledzić.
$page = "<form method=\"POST\" action=\"edit.php\">";

Sprawdź, czy ten identyfikator zadziałał. Regex byłby najlepszy, ale tutaj pojedynczo.
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\"";

Najlepiej jest używać pól z automatycznym zwiększaniem wartości i wbudowanych identyfikatorów dla mysql, aby nie było szans, że zduplikowany identyfikator przejmie istniejący rekord.
if ($id == $key){
$page .= ' selected="selected"';
}
$page .= ">$value</option>\n";//close the foreach
}$page .= "</select>\n"; print $page;
?>

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się