我正在尝试使用带有php的表单。
我从数据库填充表单信息。
表单输入分为几行。
表单提供了一个复选框,只传递该行数据,应该发生的是当我解析表单解析文档中的数据时,我只得到已检查的行。
然而,正在发生的事情是,checkbox数组的$ _POST方法只返回已检查的内容,但所有其他输入数组仍然包含所有行,甚至是未检查的行。
<?php
while($row = mysql_fetch_assoc($query)){
$id = $row["id"];
$email = $row["user_email"];
$androidId = $row["user_androidid"];
$amount = $row["amount"];
echo "<tr>
<td><input id='data_id' name='data_id[]' size='25' value='".$id."'/></td>
<td><input id='mail' name='mail[]'size='25' value='".$email."'/></td>
<td><input id='androidId' name='androidId[]' size='25' value='".$androidId."'/></td>
<td><input id='amount' name='amount[]' size='25' value='".$amount."'/></td>
<td>coming soon...</td>
<td><input id='currency' name='currencyCode[]' size='25' value='USD'/></td>
<td><input type='checkbox' name='chosen[]' value='".$id."'<td>
</tr>";
}
?>
我正在测试它:
for($i=0; $i<count($_POST["chosen"]); $i++){
echo $_POST["chosen"][$i];
}
for($i=0; $i<count($_POST["mail"]); $i++){
echo $_POST["mail"][$i];
}
对于一个特定的例子,我现在有三行,我“检查”第一行和最后一行。
当我解析表单数据时,checkbox数组只返回第一个和最后一个的值,但如果我尝试解析mail [],则它包含第1,2和3行的所有值。
有关如何正确配置此功能的任何想法?我确定结构有问题,只是寻找确认。
答案 0 :(得分:3)
尝试通过为输入数组提供相同的键来链接输入数组,在本例中为$id
-
while($row = mysql_fetch_assoc($query)){
$id = $row["id"];
$email = $row["user_email"];
$androidId = $row["user_androidid"];
$amount = $row["amount"];
echo "<tr>
<td><input id='data_id' name='data_id[".$id."]' size='25' value='".$id."'/></td>
<td><input id='mail' name='mail[".$id."]'size='25' value='".$email."'/></td>
<td><input id='androidId' name='androidId[".$id."]' size='25' value='".$androidId."'/></td>
<td><input id='amount' name='amount[".$id."]' size='25' value='".$amount."'/></td>
<td>coming soon...</td>
<td><input id='currency' name='currencyCode[".$id."]' size='25' value='USD'/></td>
<td><input type='checkbox' name='chosen[".$id."]' value='".$id."'/><td>
</tr>";
}
然后在帖子上你只能得到被检查的数组 -
foreach($_POST["chosen"] as $key=>$value){
echo $_POST["data_id"][$key];
echo $_POST["mail"][$key];
echo $_POST["androidId"][$key];
echo $_POST["amount"][$key];
echo $_POST["currencyCode"][$key];
echo $_POST["chosen"][$key];
}
答案 1 :(得分:1)
也许这是一个更好的结构,这样你将拥有一个id为键的值数组,以及一个包含所选键的选定值数组。检查您有<td><input type='checkbox' name='chosen[]' value='".$id."'<td>
echo "<tr>
<td><input id='data_id' name='".$id."[data_id]' size='25' value='".$id."'/></td>
<td><input id='mail' name='".$id."[mail]' size='25' value='".$email."'/></td>
<td><input id='androidId' name='".$id."[androidId]' size='25' value='".$androidId."'/></td>
<td><input id='amount' name='".$id."[amount]' size='25' value='".$amount."'/></td>
<td>coming soon...</td>
<td><input id='currency' name='".$id."[currency]' size='25' value='USD'/></td>
<td><input type='checkbox' name='chosen[]' value='".$id."'/></td>
</tr>";
现在用于测试的PHP:
if ( !empty($_POST['chosen']) ) {
foreach ( $_POST['chosen'] as $value ) {
print_r( $_POST[$value] );
}
}
答案 2 :(得分:1)
我建议你做一个 var_dump($ _ POST),然后看一下你发送的内容,因为它让我感到惊讶(除非我误解了)你得到的信息(只有那个)选中复选框的行的信息)。对于初学者,如果您未在输入类型中指定“类型”,则默认类型将为“文本”。这意味着您可以编辑该文本框中的任何内容,这样当您点击提交按钮时(无论您是否选中了其中一个复选框或),每个文本框中的所有值都将转到被发送。
有多种方法可以满足您的需求(仅使用选中的复选框处理属于该行的信息)。
Javascript帮助:
这样做的优点是,只会发送与已选中复选框相关的信息,您不必担心在服务器中进行过滤。
Cosn,如果你不习惯javascript这显然没有帮助。
PHP服务器端:
我刚看到肖恩的答案,这是一个很好的答案,如果你想在服务器上进行验证,你可以这样做。只是让我警告你,虽然用户可以编辑你的文本框数据,例如,将其留空或添加他喜欢的内容,当他发送它并你尝试通过$ _POST [input_name] [$ key]访问它时不会得到你从服务器建立的东西。