2012-03-03 71 views
0

我有一个表单使用php提交多个值。代码如下:使用foreach循环将数据以数组的形式保存到mysql数据库

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>';?> 

正如你可以看到它的一个循环,它从数据库中获取值并回显一个表单。我尽可能简化它有更多的输入框,但我删除了它们并删除了样式以使其更易于阅读。当我点击提交时,我希望能够通过循环将所有这些值更新到数据库。 我尝试过foreach并挣扎。任何建议

回答

2

首先,您的代码有一个安全性错误,因为您直接将变量放入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']; 

您可以为每个您发布的变量做到这一点,然后就循环轮部件IDS做的每一个例如更新查询

$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也有点混乱和不正确。对于表单,我会为每个标签使用标签元素,并且不要使用br的换行。你也有一个没有开头的div,然后是一个没有结局的div。

+0

感谢您的帮助,这不是我实际的代码,我删除了一堆东西,使它更简单对不起,我离开闭幕div标签没有开幕one.the价值被张贴我echo'd他们的作品。它是$高度[$ i]还是$高度[++ $ i]? – cppit 2012-03-03 13:25:28

+1

只是$高度[$我]。您只需要每行增加$ i一次 - 所以我只是在第一次读取时预先增加。 – christophmccann 2012-03-03 13:31:39