我有一个使用php提交多个值的表单。代码如下:

    echo "<form action='?ud=".$ud."' method='post'>Name: <input type='text' name='fname' />";
$resultw = mysql_query("SELECT * FROM options where userid='$ud' ORDER BY priority ASC");

while($row = mysql_fetch_array($resultw))
  {
  echo "
 <input type='hidden' name='widgetid[]' value='".$row['widgetid']."' />
  <span id='".$row['widgetid']."' style='color:white;font-size:13px;'>".$row['items'] .    "</span><br></div><div style='' class='portlet_content'>
   Enabled <input title='Enabled/Disabled' type='checkbox' value='enable[]' name='enable[]' ".$checked." id='checkbox".$row['id']."' />
   Height <input title='set height' name='height[]' value='".$row['height']."' type='text' name='textfield' id='textfield".$row['id']."' />
 ";
  }

  echo '<input type="submit" /></form>';?>


如您所见,它是一个从db获取值并回显表单的循环。我使它尽可能地简单,它具有更多的输入框,但我删除了它们并删除了样式以使其更易于阅读。当我点击Submit时,我希望能够通过循环将所有这些值更新到数据库。
我尝试了一下,然后挣扎了。有什么建议么

最佳答案

首先,您的代码存在安全漏洞,因为您直接将变量放入SQL查询中。这样就可以进行SQL注入。相反,应该在插入查询之前将变量$ ud通过mysql_real_escape_string放置,或者,更好的是,使用MySQLi / PDO和预处理语句。

您是否检查过表单是否正确地在页面上回显了?查看源(或使用Firefox和Firebug)仔细检查是否已正确插入源。

然后,您将需要一个在收到POST请求时启动的代码块。该代码将为您的每个变量返回一个数组,例如

 $widget_ids = $_POST['widgetid']; #this will be an array
 $enable = $_POST['enable'];
 $height = $_POST['height'];


您可以为每个POSTed变量执行此操作,然后仅对小部件ID进行循环,对每个变量进行更新查询,例如

$i = -1;
foreach($widget_ids as $widget_id) {
      $row_enable = $enable[++$i];
      $row_height = $height[$i];
      //DO THIS FOR THE REST AND THEN YOUR UPDATE QUERY
}


只是出于学问的考虑,您的HTML还是有点凌乱和不正确。对于表单,我将对每个标签使用label元素,而不对新行使用br。您还有一个没有开头的div,然后是一个没有结尾的div。

07-28 02:48
查看更多