在php中显示未经检查的数据

时间:2015-05-15 15:52:17

标签: php

我想显示面颊数据..此程序仅显示所选数据 所以请帮我解决这个问题。

   <form method="post" action="" id="frm_id">
    <input type="checkbox" name="chkid[]" value="10,Anu" />Anu
    <input type="checkbox" name="chkid[]" value="11,Raj" />Raj
    <input type="checkbox" name="chkid[]" value="12,Ram" />Ram
    <input type="checkbox" name="chkid[]" value="13,xxx" />xxx
    <input type="checkbox" name="chkid[]" value="14,yyy" />yyyy
    <input type="checkbox" name="chkid[]" value="15,zzz" />zzz
    <input type="checkbox" name="chkid[]" value="16,qqqq" />qqqq
    <input type="submit" value="Insert"  name="sub"/>
    </form>
    <?php
    if(isset($_POST['sub']))
    {
    $id=$_POST['chkid'];
    for($i=0;$i<count($id);$i++)
    {
    $exp=explode(',',$id[$i]);//Explode id and name
    echo 'id='.$exp[0].',Name='.$exp[1];echo "<br>";
    echo $query="INSERT INTO tbl_student (id,name) values ('$exp[0]','$exp[1]')";echo "<br><br>";
    }
    }
    ?>

如果选择zzz和qqqq 结果显示

id=15,Name=zzz
INSERT INTO tbl_student (id,name) values ('15','zzz')

id=16,Name=qqqq
INSERT INTO tbl_student (id,name) values ('16','qqqq')

但我希望当我选择zzz和qqqq结果显示我:

id=10,Name=Anu
INSERT INTO tbl_student (id,name) values ('10','Anu')

id=11,Name=Raj
INSERT INTO tbl_student (id,name) values ('11','Raj')

id=12,Name=Ram
INSERT INTO tbl_student (id,name) values ('12','Ram')

id=13,Name=xxx
INSERT INTO tbl_student (id,name) values ('13','xxx')

id=14,Name=yyy
INSERT INTO tbl_student (id,name) values ('14','yyy')

2 个答案:

答案 0 :(得分:2)

由于未发布未经检查的项目,您可以设计一种方法来获取这些项目。一种方法是首先创建这些输入复选框的映射。从那里,您需要获取输入并将它们与地图进行比较。

使用数组映射更容易:

$map = array(
    10 => 'Anu',
    11 => "Raj" ,
    12 => "Ram" ,
    13 => "xxx" ,
    14 => "yyy" ,
    15 => "zzz" ,
    16 => "qqqq",
);

从那里处理相应的输入并使用array_diff_key。所以反过来你会得到未经检查的那些:

<?php

$map = array(
    10 => 'Anu',
    11 => "Raj" ,
    12 => "Ram" ,
    13 => "xxx" ,
    14 => "yyy" ,
    15 => "zzz" ,
    16 => "qqqq",
);

?>

<form method="post" action="" id="frm_id">
    <?php foreach($map as $id => $val): ?>
    <input type="checkbox" name="chkid[]" value="<?php echo "$id,$val"; ?>" /><?php echo $val; ?>
    <?php endforeach; ?>
    <input type="submit" value="Insert"  name="sub"/>
</form>
<?php



if(isset($_POST['sub'])) {
    $ids = $_POST['chkid'];
    $input = array();
    foreach($ids as $value) {
        list($id, $val) = explode(',', $value);
        $input[$id] = $val;
    }

    $exps = array_diff_key($map, $input);

    foreach($exps as $id => $exp) {
        echo $query="INSERT INTO tbl_student (id,name) values ('$id','$exp')";echo "<br><br>";
    }

}

Sample Output

虽然代码是不安全的并且对SQL注入开放,因为您直接将用户输入引入查询语句,但您可以使用预准备语句来进行更安全的查询。这是通过PDO:

$db = new PDO('mysql:host=localhost;dbname=DATABASE NAME', 'username', 'password');
$query = 'INSERT INTO tbl_student (id, name) VALUES (?, ?)';
$stmt = $db->prepare($query);
foreach($exps as $id => $exp) {
    $stmt->execute(array($id, $exp));
}

答案 1 :(得分:1)

您永远不会将未选中的复选框发送到服务器。在这种情况下,请尝试使用预填充数组。

$listOfStudents = array( 10 => "anu", 11 => "Raj" .... );

更改表单输入:

<input type="checkbox" name="chkid[10]" value="Anu" />Anu

然后在表单提交后你可以比较:

$result=array_diff_key($listOfStudents, $chkid);
print_r($result);

这应该对你有所帮助。结果将为您提供未在表格中提交的学生....