2016-05-14 12 views
0

私はドロップダウンメニューを使用しているページがあります。私は値が配列から来るselectタグのnameフィールドに変数を渡しました。

$query1="Select SSAP from project where projname='$project'"; 

$result=mysql_query($query1); 
while($row=mysql_fetch_assoc($result)) 
    { 
$ssap = $row['SSAP']; 
$query2="Select * from student where SSAP='$ssap'"; 
$res=mysql_query($query2); 
$row1=mysql_fetch_assoc($res); 
$name=$row1['name']; 
echo $name; ?> <select name="<?php echo $name;?>"> 
       <option value="A"> Exceptional </option> 
       <option value="B"> Highly Effective </option> 
       <option value="C"> Effective </option> 
       <option value="D"> Good </option> 
       <option value="E"> Not Satisfactory </option> 
       </select> <br> <?php 

    } 

と私は、アクションページの別の変数で作成された各選択タグの値を取得する必要があります。

$grade=$_POST[$name]; 

echo $grade; 

最初のコードスニペットは正常に機能しますが、2番目のスニペットで値をフェッチできません。

+1

コードの最初の行にSQLインジェクションがあり、$ query2にも1つも含まれています。また、XSSは$名前をエコーし​​ます。 – Maantje

+0

ここでは、両方のSQLクエリにSQLインジェクションの脆弱性があります。 – David

+2

**危険**:[削除済み](http://php.net/ [廃止**データベースAPI](http://stackoverflow.com/q/12859942/19068))を使用しています。 manual/en/mysql.php)をPHPから入手してください。 [現代的な代替品](http://php.net/manual/en/mysqlinfo.api.choosing.php)を選択する必要があります。あなたはおそらく** [SQLインジェクション攻撃](http://bobby-tables.com/)**に対して脆弱です**現代のAPIは、[防御]を容易にします(http://stackoverflow.com/questions/60174/best-way-to-prevent-sql-injection-in-php)をご利用ください。 – Quentin

答えて

0

ダイナミック名で<select>を含むフォームがサブミットされるとき、それは異なる要求ので、$nameが設定されていません。

0

フォームが送信されると、の名前は、のように評価されます。これは、「student」テーブルのクエリの$name=$row1['name'];の値に応じて異なります。また、クエリ$query2="Select * from student where SSAP='$ssap'";が複数の行を返す可能性があることを考慮する必要があります.1つの行だけが返されると仮定しているようです。

$_POSTは、HTMLの提出から KEY=>VALUEペアなどのパラメータを受け入れる連想配列であることに注意します。 $_POSTでは、キーは、入力フォームの値で 要素の名前です$nameがあなたのアクションスクリプトに定義されていないとき、あなたはこの$_POST[$name];ようなあなたのSUPER GLOBAL $POSTKEYとして変数を使用することはできません入力フォーム

にその要素の値であり、 。私はあなたの複数の<Select>で名前付き配列を使用することをお勧めします。アクションスクリプトでvar_dump($_POST)を実行します。それはあなたのためのほとんどのものを明らかにするかもしれません。

関連する問題