在php中获取未发布输入的值

时间:2014-05-02 16:28:44

标签: php arrays post checkbox isset

我们通常用数据获取post输入类型的值。但现在我想知道如果检查或取消选中checbox。 这是我的代码:

while (!$listof_artist->EOF) {
    $id = $listof_artist->fields['id'];
    $arr_id[] = $id;

    echo "<tr><td><input type='checkbox' value='".$id."' name='chkid[]' id='chkid[]' /></td>";
}

if(isset($_POST['submit'])){
    foreach($_POST['chkid'] as $checkbox){
        //code for add
    }

这是我的算法: 如果提交是发布的话

for each checbox is check
    //add

foreach checbox not check
        //code for not check

请帮忙。谢谢

4 个答案:

答案 0 :(得分:1)

获取未发布到您网址的值就像询问尚未发现的所有行星的名称一样。

您正在做的事情有一个简单的解决方法,假设您有10个复选框。您知道名称,并且您知道这些值,因为您创建了它们。转到您处理表单提交的页面,并告诉您代码的所有名称。然后代码检查哪一个具有$_POST中的值,哪一个没有。这会给你答案。

使用简单的HTML不会将未选中复选框的值发送到您的表单处理网址。

答案 1 :(得分:1)

每当提交表单时,只能通过$_POST[var]获取已检查的复选框。 所以在你的问题中检查它的简单:

foreach($_POST['chkid'] as $checkbox){
  //code for add
}

但是对于未经检查的那些,你必须运行一个循环来匹配数据库,如果它被检查了。

或者这是一个更好的出路。

而不是

<input type='checkbox' value='".$id."' name='chkid[]' id='chkid[]' />

使用

<input type='checkbox' value='$id' name='$id' id='$id' />

现在您可以通过名称

轻松检查它们
if(isset($_POST[$id])){
//this is checked
}
else{
//its not checked
}

注意: 如果$id包含空格或者太大,则将某些计数变量更改为名称。

这是一个运行它的小测试代码,它会让你更好地理解。

<?php
if(!empty($_POST['c']))
    print_r($_POST['c']);
?>
<form action="" method="post">
    <input type="checkbox" name="c[]" value="1" />
    <input type="checkbox" name="c[]" value="2" />
    <input type="checkbox" name="c[]" value="3" />
    <input type="checkbox" name="c[]" value="4" />
    <input type="checkbox" name="c[]" value="5" />
    <input type="submit">
</form>

答案 2 :(得分:1)

正如其他人所说,你无法获得尚未发送的表单元素的名称/值,但是在提交表单之前,只需要一些JavaScript,就可以找到哪些复选框没有选中,收集他们的名字/值并手动将其附加到表单数据并将其发送到服务器。

正如提示一样,此代码会收集表单中的unchecked复选框,然后您可以将其(例如,通过Ajax请求中的hidden输入字段或参数发送到服务器)

$("input:checkbox:not(:checked)")

答案 3 :(得分:1)

与其他答案已经指出的类似,这是一种方法:

while (!$listof_artist->EOF) {
    $id = $listof_artist->fields['id'];
    $arr_id[] = $id;

    echo "<tr><td><input type='checkbox' value='$id' name='$id' id='$id' /></td>";
}

if(isset($_POST['submit'])){
    foreach($arr_id as $checkbox){
        if (isset($_POST[$checkbox])) {
            // Checkbox is checked
            echo 'Artist id ' . $checkbox . ' is checked <br/>';
        }
        else {
            // Checkbox is NOT checked
            echo 'Artist id ' . $checkbox . ' is NOT checked <br/>';
        }
}