所以我正在使用从db表填充的一些复选框。看起来像这样。
<form action="" method="post">
<?php
foreach ($chores as $retrieved_search){
?>
<tr>
<td>
<?php echo "<input type='checkbox' id=".$retrieved_search->id." value=".$retrieved_search->image." name='chores[]'>$retrieved_search->name";?>
<?php echo "<input type='text' value='$retrieved_search->name' id='optionName' name='optionName[]' />"?>
</td>
</tr>
<?php
}
?>
</form>
我试图找出一种方法,我可以从我目前正在做的复选框中获取该值,并且工作正常。该复选框的值是图片网址。
我还需要获取与复选框关联的名称,因此我添加了另一个输入字段,该字段填充了我将隐藏的复选框的名称。
所以这是我的php语句,它从复选框中获取post值,但是如何从输入字段中获取相同insert语句的值?
<?php
if(isset($_POST['saveOptions'])) {
global $wpdb;
$table_name = $wpdb->prefix . "chartUsersOptions";
$user_ID = get_current_user_id();
$typeChore = "chore";
$typeBehavior = "behavior";
if(isset($_POST['chores'])){
foreach ($_POST['chores'] as $chores) {
$wpdb->insert( $table_name, array(
'userId' => $user_ID,
'optionImage' => $chores,
'type' => $typeChore,
));
}
}
$msg = "Saved now redirect to 3rd step";
echo $msg;
}
else{
.............
}
?>
编辑:
根据建议,这有效。
<?php
foreach ($chores as $retrieved_search){
echo "<input type='checkbox' value='{$retrieved_search->image}' name='chores[{$retrieved_search->id}]'>{$retrieved_search->name}";
echo "<input type='text' value='{$retrieved_search->name}' name='optionName[{$retrieved_search->id}]'>"
}
?>
这个
if(isset($_POST['chores'])){
foreach ($_POST['chores'] as $chores_key => $chores) {
$text_input_value = $_POST['optionName'][$chores_key];
$wpdb->insert( $table_name, array(
'userId' => $user_ID,
'optionImage' => $chores,
'optionName' => $text_input_value,
'type' => $typeChore,
));
}
}
但是optionName仍然插入空白。
答案 0 :(得分:2)
我不确定究竟是什么问题,但我的猜测是你的复选框与你的输入框不匹配。这是因为未经检查的复选框不会被发送到服务器,因此您最终可能会得到一个小于输入框数组的复选框数组。
您应该更改html,以便checkbox-array-key始终与input-array-key匹配,如下所示:
echo "<input type='checkbox' value='{$retrieved_search->image}' name='chores[{$retrieved_search->id}]'>{$retrieved_search->name}";
echo "<input type='text' value='{$retrieved_search->name}' name='optionName[{$retrieved_search->id}]'>"
另请注意,ID必须是唯一的,因此我删除了它们,但这可能与您的问题无关。
修改:要在完成上述更改后获取文本框的值,您可以执行以下操作:
if (isset($_POST['chores'])) {
foreach ($_POST['chores'] as $chores_key => $chores) {
$text_input_value = $_POST['optionName'][$chores_key];
// and the rest of your code
答案 1 :(得分:0)
而不是
foreach ($_POST['chores'] as $chores) {
你想要
foreach ($_POST['chores'] as $id=>$chores) {
然后你可以访问
optionName[$id]
在你的循环中。