我有这个脚本,我想将表单中的值发布到我的数据库中。我想将多个文本框发布到一个表单中。
问题是,只有最后一个文本框会更新。
<form action='' method='post'>
<?php
for ($i=0; $i<$count; $i++) {
echo "<input type='text' name='".$i."' />
<input type='hidden' name='img_id' value='".$img_id."' />
<input type='hidden' name='loop' value='".$i."' />";
}
?>
<input type='submit' value='Update' name='update' /></form>
<?php
if (isset($_POST['update'])) {
//now i need help
$query = "UPDATE photos SET description = '".$_POST[$_POST['loop']]."' WHERE id = '".$img_id."'";
$res = mysql_query($query) or die(mysql_error);
}
?>
例如,循环变为4次,这意味着我有4个文本框。
在我的脚本中,这里没有完全写入,代码只更新数据库中的最后一个循环。
答案 0 :(得分:1)
首先,您需要在HTML中为name
属性使用PHP数组表示法。否则,您将拥有多个具有相同name
的输入,并且只会发布其中一个
echo "<input type='text' name='".$i."' />
<input type='hidden' name='img_id[]' value='".$img_id."' />
<input type='hidden' name='loop[]' value='".$i."' />";
现在,您可以将PHP中的这些元素作为数组访问。
foreach ($_POST['img_id'] as $key=>$value) {
// img_id's value is in $value
// loop's value is in $_POST['loop'][$key]
}
使用foreach构建查询,并在循环后执行所有查询。
您的查询对SQL注入是开放的。至少使用mysql_real_escape_string
(甚至更好:准备好的语句,这也将是更好的性能,因为你总是只有不同的输入相同的查询)。另请注意,mysql_*
函数为officially deprecated,因此不应在新代码中使用。您可以使用PDO或MySQLi。有关详细信息,请参阅this answer on SO。
答案 1 :(得分:0)
您需要使表单元素的名称唯一,以便它们不会发生冲突。一种方法是将它们作为数组发布:
另外,你不能使用相同的$count
变量来圈出潜在的结果吗?
看起来你发布了名为loop
的hiddens,以便通过你需要去的循环次数。如果没有,你可以通过这样的方式发布循环变量,但是你用它代替$count
更新循环。另外,我认为只需在最后添加一次该元素,而不是使用$count
的值。
E.g。这样的事可能对你有用......
<form action='' method='post'>
<?php
for ($i=0; $i<$count; $i++) {
// How is img_id set here? You have no indication in your example - I'll assume that you've put them into an array...
echo "<input type='hidden' name='img_id[\"".$i.\""]' value='".$img_id[$i]."' />";
echo "<input type='text' name='name[".$i."]' />";
}
?>
<input type='submit' value='Update' name='update' /></form>
<?php
if (isset($_POST['update'])) {
for ($i=0; $i<$count; $i++) {
if ( array_key_exists( 'name', $_POST ) && is_array( $_POST['name'] ) && array_key_exists( $i, $_POST['name' ] ) {
$query = "UPDATE photos SET description = '".$_POST['name'][$i]."' WHERE id = '".$_POST['img_id'][]."'";
$res = mysql_query($query) or die(mysql_error);
}
}
}
?>
或者,如果您无法使用$count
:
<form action='' method='post'>
<?php
echo( "<input type='hidden' name='loop' value='".$count."' />" );
for ($i=0; $i<$count; $i++) {
// How is img_id set here? You have no indication in your example - I'll assume that you've put them into an array...
echo "<input type='hidden' name='img_id[\"".$i.\""]' value='".$img_id[$i]."' />";
echo "<input type='text' name='name[".$i."]' />";
}
?>
<input type='submit' value='Update' name='update' /></form>
<?php
if (isset($_POST['update'])) {
for ($i=0; $i<$_POST['loop']; $i++) {
if ( array_key_exists( 'name', $_POST ) && is_array( $_POST['name'] ) && array_key_exists( $i, $_POST['name'] ) {
$query = "UPDATE photos SET description = '".$_POST['name'][$i]."' WHERE id = '".$_POST['img_id'][$i]."'";
$res = mysql_query($query) or die(mysql_error);
}
}
}
?>
答案 2 :(得分:-1)
你必须使用类似的东西,
if (isset($_POST['update'])) {
for($i=0; $i<=$_POST['loop']; $i++){