0

我正在尝试根据数据库中表的行数动态创建表单。我试过这个,它也不起作用:

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

所以当我按下提交时,信息不会发送到“Correction.php”,我认为这是因为我在 php 代码中创建了 HTML 表单。我怎么能做对?

4

3 回答 3

2

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

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

第三,由于用户可以选择读取哪个表,那么您的数据需要进行超级清理,因为您当然不希望在这里进行 sql 注入攻击。

于 2013-07-18T14:46:46.333 回答
1

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

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

如果不是这样,也可能是因为您只从数据库中获取一列,因此您不需要使用$aux=$row['w_spanish'];. 您可以使用:

$aux=$row;

我不是100%的。尝试倾倒每一行,var_dump()看看会弹出什么。

于 2013-07-18T14:51:53.250 回答
-2

首先 declare $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))
于 2013-07-18T14:41:28.077 回答