2015-07-10 103 views
-1

这是我的表单,类别来自while循环的数据库。 我想将选中的输入只插入到数据库中。我如何发布复选框与PHP?

如何检测选中哪个复选框?

<form action="account.php" method="POST"> 
    <ul class="account-info"> 
     <li>Category1 : <input type="checkbox" value="val1" name="cat1"></li> 
     <li>Category2 : <input type="checkbox" value="val2" name="cat1"></li> 
     <li>Category3 : <input type="checkbox" value="val3" name="cat1"></li> 
     <!-- while continues --> 
     <li>Category100 : <input type="checkbox" value="val100" name="cat1"></li> 
    </ul> 
    <input type="submit" value="submit" /> 
</form> 
+0

只有选择复选框在传递POST数组。 –

+0

你可能会想到一个单选按钮。 (因为你问哪一个被选中,并将它们全部命名为cat1)。你的代码中有复选框,每一个都需要一个唯一的名字,然后你可以在表单发布时在php中检查每一个。 – RightClick

+0

@RightClick他们不需要唯一命名,请检查我的答案。 – Styphon

回答

2

account.php只有复选框将被张贴。因为您已经将它们命名为相同,但只会发布1个最后一个复选框。如果你希望他们有相同的名称和作为一个数组来通过您需要的名称后添加[],是这样的:在那里它们被提交,你可以做到这一点

<input type="checkbox" value="val100" name="cat1[]"> 

然后在您的account.php

foreach($_POST['cat1'] as $val) 
{ 
    echo "$val<br>"; 
} 

这将回显所有检查框的值。

+0

它的okey,但cat2?或cat75我不知道会添加多少类别。 –

+0

@sonerkaya使用'[]'会生成只有复选框的数组。所以如果他们检查cat2和cat75,那么只有这2个会被添加到数组中。所以使用foreach循环它会循环两次,只允许你使用这两个值。 –

0

你可以检查一下这样的: 该代码将检查哪些类别被激活 假设你的数据库从0您account.php返回类别X

$i = 0; 
    while(true){ 
    if ($_POST["cat".$i."]) { 
     //category activated 
    } 
    else { 
     //no category found -> loop ends 
     break; 
    } 
    $i++; 
    } 
+0

它的okey,但cat2?或cat75我不知道会添加多少类别。我不能手动编写代码,因为类别来自数据库 –

0

变化name="cat1"name="cat[1][]"

foreach($_POST['cat'] as $category){ 
    foreach($category as $value){ 
     echo $value; 
    } 
} 
+0

它的okey,但cat2?或cat75我不知道会添加多少类别。我不能手动编写代码,因为类别来自数据库 –

+0

那么你想这样做'猫[1] []'为名称 – cmorrissey

+0

我已经更新了我的答案 – cmorrissey

0

首先,你有y我们的选项设置好像它们都是单选按钮,并且所有名称都具有相同的名称,在3种可能的情况下变成1个值。如果你想让他们成为传统的复选框,你必须给他们分开的名字。

在你的PHP

你会检查array_key_exists有问题的复选框的名字,这是怎么了,我通常的形式翻译的复选框领域更容易使用:

<?php 
    $checked = array(
     'cat1' => array_key_exists('cat1', $_POST), 
     'cat2' => array_key_exists('cat2', $_POST), 
     'cat3' => array_key_exists('cat3', $_POST) 
    ); 
    print_r($checked); 
    exit; 
?>