我有一部分网页是使用MySQL查询动态生成的:
<table id="livePlayers" cellpadding="4" align="center">
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Phone number</th>
<th>Email Address</th>
<th>Rating</th>
</tr>
<?php
while ($currLine = @mysql_fetch_array($resultSet))
{
$phoneCount= "phone".$count;
$ratingCount= "rate".$count;
?>
<tr>
<td><?php echo $currLine[1]?></td>
<td><?php echo $currLine[2]?></td>
<td><input type="text" name="<?php echo $phoneCount ?>"></td>
<td><?php echo $currLine[0]?></td>
<td><input type="text" name="<?php echo $ratingCount ?>"></td>
</tr>
<?php
$count++;
}
?>
</table>
如您所见,有2个字段为input type="text"
。一旦用户在这些字段中输入了条目,我需要在单击Submit时使用这些值更新数据库表。
然而,我不明白如何做到这一点,因为字段name
是动态生成的。是否有任何方法可以用输入的值更新相应的行?
不应动态生成输入的name
。而是使用常量。该输入的动态值应设置在输入的value
属性中。
您的一个输入示例:
<input type="text" name="phone" value="<?php echo $phoneCount ?>" />
您可以使用$_GET或$_POST数组来检索值。假设您的表单使用POST方法,您可以执行以下操作:
$phone = $_POST['phone']; // the entered text for the phone field
现在您可以编写UPDATEmysql查询了。
更新
要同时更新多行,请使用数组作为POST参数:
<input type="text" name="phone[]" value="<?php echo $phoneCount ?>" />
检索$_POST['phone']
将为您提供一个所有行的数组。
更新2
要识别每一行,您可以使用隐藏字段,如:
<input type="hidden" name="id[]" value="<?php echo $id ?>" />
或者使用id作为所有其他输入字段的关联数组键:
<input type="text" name="phone[<?php echo $id ?>]" value="<?php echo $phoneCount ?>" />
您必须为页面创建一个表单,将用户更改提交回PHP,并使您的PHP页面接受表单输入(POST),然后解析该输入,并使用该数据更新数据库。
@darkie
由于您必须从表中检索所有记录并需要更新它们,因此您可能必须对每个记录使用循环才能使用PHP进行更新。
如何获取值?
- 使用计数器,并为输入字段命名,如"phone1"one_answers"rating1"等等
- 将<输入>带有表单标记
- 使用OnSubmit()操作,检索所有值并通过JS或JQuery创建匹配的字符串。例如:phone1:123 rank1:1phone2:456 rank2:2,制作一个类似于:123::1|456::2等的字符串
- 将字符串发送到PHP后端-拆分字符串并开始循环
- 使用主键,使用UPDATE更新它们
p.S:-我认为你应该在"value"属性中呼应phoneCount和ratingCoung。
注意:name
应该是静态的,你应该把值存储在value
属性中,否则你是如何得到输入字段的值的??
否则还有其他选择使用使用extract($_POST)
,这样您将获得具有name
字段的键和value
字段的值的关联数组
使用动态名称不是一个好的做法。话虽如此;这是可以做到的。
我会在名字前面加上"Phone_"
<input type="text" name="Phone_<?php echo $phoneCount ?>">
现在,您可以循环所有Post变量,并挑选出以"Phone_"开头的所有变量
你这样循环:
foreach($_POST as $name => $value) {
print "$name : $value<br>";
}