2016-05-14 130 views
0

我有一个页面,我正在使用下拉菜单。我在选择标记的名称字段中传递了一个变量,其值来自数组。

$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; 

第一个代码片段工作正常,但我无法获取第二个片段中的值。

+1

您的第一行代码中有SQL注入,$ query2也包含一个。通过回显$ name也可以得到XSS。 – Maantje

+0

这里的两个SQL查询都有SQL注入漏洞。 – David

+2

**危险**:您正在使用已[已删除](http://php.net/)的[已过时的**数据库API](http://stackoverflow.com/q/12859942/19068)手册/ 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

当您提交表格时,<select>名称将被评估为<select name="Raj">, <select name="Kiran">, ..........<select name="Sameer">等,具体取决于您在“学生”表上查询的值$name=$row1['name'];。此外,您应该考虑到您的查询$query2="Select * from student where SSAP='$ssap'";可能会返回多个行的事实,您似乎假定只有一行将被返回。

还要注意$_POST是一个关联数组接受参数作为从提交的HTML 双。在$_POST关键是在输入表格值 元素的名称是输入形式元素的值

所以当$name是在你的动作脚本不确定的,你不能使用一个变量作为KEYSUPER GLOBAL $POST这样$_POST[$name]; 。我建议你在你的多个<Select>中使用一个命名数组。在你的动作脚本上做一个var_dump($_POST)。这可能会为你揭示大部分内容。