我想显示面颊数据..此程序仅显示所选数据 所以请帮我解决这个问题。
<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')
答案 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>";
}
}
虽然代码是不安全的并且对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);
这应该对你有所帮助。结果将为您提供未在表格中提交的学生....