PHP + HTML:动态创建表单

时间:2013-07-18 14:38:43

标签: php html forms post

我尝试根据数据库中表的行数动态创建表单。我尝试了这个,它也没有工作:

require_once('mysqli_connect.php');

//I select the colum w_spanish from the table selected by the user
$q="SELECT w_spanish FROM ".$_GET['name'];

$r=@mysqli_query($dbc, $q);

echo '<FORM METHOD="POST" ACTION="Correction.php">';
echo '<TABLE BORDER="1">';

//Here is where I generate dinamically a table that can be filled by user
while ($row=mysqli_fetch_array($r, MYSQLI_ASSOC)){

$aux=$row['w_spanish'];
echo '<TR><TD>'.$aux.'</TD><TD><INPUT TYPE="TEXT" NAME="Sol_'.$aux.'" SIZE="20"></TD></TR>';

}

echo '</TABLE>';
echo '<P><INPUT TYPE="SUBMIT" VALUE="Submit" ></P></FORM>'; 


mysqli_close($dbc);

因此,当我按提交时,信息不会发送到&#34; Correction.php&#34;,我认为这是因为我在PHP代码中创建了HTML表单。我怎么能这样做?

3 个答案:

答案 0 :(得分:2)

首先关闭 - 从@mysqli语句中删除@,因为它掩盖了可能发生的任何错误。

其次,将生成的代码粘贴到http://validator.w3.org/#validate_by_input中,查看是否存在任何HTML错误,并在必要时进行调整。

第三,由于用户可以选择要读取的表,因此您的数据需要进行超级清理,因为您当然不希望在此处进行SQL注入攻击。

答案 1 :(得分:1)

问题可能是您正在运行的查询。在不知道更多信息的情况下,我的猜测是你的查询没有得到任何东西。尝试在每次迭代中转储行并查看吐出的内容。你可能正在寻找类似的东西:

$q="SELECT w_spanish FROM tableName WHERE name = " . $_GET['name'];

如果不是这样,也可能是因为您只从数据库中抓取一列,因此您无需使用$aux=$row['w_spanish'];访问该信息。你可以使用:

$aux=$row;

虽然我不是百分之百。尝试使用var_dump()转储每一行并查看弹出的内容。

答案 2 :(得分:-2)

首先声明$row,然后使用do-while循环。

$row = mysqli_fetch_array($r, MYSQLI_ASSOC) do{  
    $aux=$row['w_spanish']; 
    echo '<TR><TD>'.$aux.'</TD><TD><INPUT> TYPE="TEXT"NAME="Sol_'.$aux.'" SIZE="20"></TD></TR>';
 }while ($row=mysqli_fetch_array($r, MYSQLI_ASSOC))