每个php的多个帖子值

时间:2014-01-09 15:22:55

标签: php mysql checkbox

所以我正在使用从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仍然插入空白。

2 个答案:

答案 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]

在你的循环中。