【问题标题】:getting a checkbox array value from POST从 POST 获取复选框数组值
【发布时间】:2012-05-18 15:20:57
【问题描述】:

我发布了一系列复选框。我不能让它工作。我没有在 foreach 循环中包含正确的语法以保持简单。但它正在工作。我通过尝试对文本字段而不是复选框执行相同的操作来进行测试,并且它与文本字段一起使用。

<form method="post">
<?php 
foreach{
echo'
<input id="'.$userid.'" value="'.$userid.'"  name="invite[]" type="checkbox">
<input type="submit">';
}
?>
</form>

这是不工作的部分。它正在回显“邀请”而不是数组。

<?php
    if(isset($_POST['invite'])){
$invite = $_POST['invite'];
echo $invite;
}

【问题讨论】:

  • $invite 是一个数组。试试print_r($invite); 而不是echo
  • 执行print_r($_POST); 看看实际设置了什么。
  • 当我做 print_r 时它会说“邀请”
  • 尝试添加多个名为“invite[]”的复选框。你会得到一个数组的输出。而且您不应该在循环中使用
  • 我认为你的 PHP 代码仍然是错误的。您的 foreach 不应该在您的 echo 内,而您的 HTML 在您的 &lt;?PHP ?&gt; 标签内。

标签: php html arrays forms post


【解决方案1】:

您的 $_POST 数组包含邀请数组,因此将其读出为

<?php
if(isset($_POST['invite'])){
  $invite = $_POST['invite'];
  echo $invite;
}
?>

因为它是一个数组,所以它不起作用。您必须遍历数组才能获取所有值。

<?php
if(isset($_POST['invite'])){
  if (is_array($_POST['invite'])) {
    foreach($_POST['invite'] as $value){
      echo $value;
    }
  } else {
    $value = $_POST['invite'];
    echo $value;
  }
}
?>

【讨论】:

  • 当我尝试这个时。我收到警告:在第 95 行的 C:\xampp\htdocs\social_learning\site_pages\groups_page.php 中为 foreach() 提供了无效参数
  • 你能复制/粘贴echo '&lt;pre&gt;'; print_r($_POST); echo '&lt;/pre&gt;';的完整结果吗
  • 我编辑了答案以检查邀请值是数组还是字符串。如果您只通过一个选中的邀请复选框,它将是一个字符串值。这可能会解决您收到的错误。
  • 这里是
     结果数组([invite] => Invite [rememberme] => undefine)
  • 我尝试了编辑后的 ​​for 循环。我仍然有一个未定义的变量。注意:未定义的变量:第 99 行 C:\xampp\htdocs\social_learning\site_pages\groups_page.php 中的值我认为问题必须与发布之前的数据有关。但是当我检查元素时。 html中的数据都是正确的。所以问题出在发送 html 之前的某个地方。
【解决方案2】:

我刚刚使用了以下代码:

<form method="post">
    <input id="user1" value="user1"  name="invite[]" type="checkbox">
    <input id="user2" value="user2"  name="invite[]" type="checkbox">
    <input type="submit">
</form>

<?php
    if(isset($_POST['invite'])){
        $invite = $_POST['invite'];
        print_r($invite);
    }
?>

当我选中两个框时,输出是:

Array ( [0] => user1 [1] => user2 )

我知道这并不能直接回答您的问题,但它为您提供了一个可供参考的工作示例,希望能帮助您解决问题。

【讨论】:

  • 谢谢。我的代码必须有一些错误、类型或我没有看到的东西。奇怪的是,我在一个文本字段中尝试了同样的事情,它奏效了。所以这个问题与复选框特别相关。
【解决方案3】:

查看 implode() 函数作为替代方法。这会将数组转换为列表。第一个参数是您希望如何分隔项目。这里我使用了一个逗号,后面有一个空格。

$invite = implode(', ', $_POST['invite']);
echo $invite;

【讨论】:

  • 非常感谢,先生!这只是帮助我节省了大约 1 小时的研究时间。我现在很喜欢内爆。
【解决方案4】:
// if you do the input like this
<input id="'.$userid.'" value="'.$userid.'"  name="invite['.$userid.']" type="checkbox">

// you can access the value directly like this:
$invite = $_POST['invite'][$userid];

【讨论】:

    【解决方案5】:

    因为您的 &lt;form&gt; 元素位于 foreach 循环内,所以您正在生成多个表单。我假设您想要一个表单中的多个复选框。

    试试这个...

    <form method="post">
    foreach{
    <?php echo'
    <input id="'.$userid.'" value="'.$userid.'"  name="invite[]" type="checkbox">
    <input type="submit">';
    ?>
    }
    </form>
    

    【讨论】:

    • 不错的收获。我什至会将提交按钮移到循环之外。
    • 对不起,这是我在问题中输入时犯的错误。代码不是那样的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 1970-01-01
    • 2016-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多