3

小さな問題があります。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 フォームをロードすると、DB から取得した製品名が (テキスト フィールドに) 表示されます。ただし、問題は、ユーザーが既に選択したドロップダウン リスト ボックスとして製品名を保存し、それを選択することです。

したがって、基本的に私がやりたいことは、DB で取得したオプションをテキスト ボックスに表示する代わりに、ユーザーが選択したオプションをドロップダウン リスト ボックスに表示することです。

これが理にかなっていると思いますか?オプションの値がまったく表示されないのはなぜですか。次に、SELECTED オプションも表示されません (DB から取得)。

何か助けてください。

4

2 に答える 2

5

この1つの領域に注目すると、コピーエラーでない限り、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 ?>

最初は、PHPセグメントにプレーンなHTMLコードがありました。

また、私はあなたが欲しいと信じています

if ($value == $productName){
于 2013-03-13T19:25:45.290 に答える
1

これはおそらくこれに適した場所ではありませんが、毎日大量の恐ろしいコードを目にするので、私は声を上げようと思いました.

まず、入力内容を確認してください。$_GET、$_POST などのユーザーからの変数は決して信頼しないでください。元のコードの緩さは、SQL インジェクション攻撃を探しているだけです。

<?php

これは、データベースから productName を取得する何らかの渡された ID を期待しているように見えます... 本当に不明です。したがって、変数はすでに定義されていると想定しています。次のようなコードを使用する必要があります。

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\">";

その ID が機能したかどうかを確認します。正規表現が最適ですが、ここでは一度に 1 つのことを説明します。

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\"";

重複する ID が既存のレコードを引き継ぐ可能性がないように、自動インクリメント フィールドと mysql の組み込み ID を使用することをお勧めします。

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

//close the foreach
}

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

print $page;
?>
于 2013-03-13T17:29:32.467 に答える