我尝试根据数据库中表的行数动态创建表单。我尝试了这个,它也没有工作:
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表单。我怎么能这样做?
答案 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))