您好我想要任何我要检查的复选框,以便在分页后保持检查。
这是代码:
foreach($test as $string){
$queryForArray = "SELECT p_fname,p_id FROM personnel WHERE p_id = " .$string["p_id"]. " ;" ;
$resultForArray = mysql_query($queryForArray, $con);
$rowfForArray = mysql_fetch_array($resultForArray);
?>
<td id="<?php echo $rowfForArray["p_id"]?>" onclick="setStyles(this.id)" ><?php echo $rowfForArray["p_fname"]?></td>
<td><input id="<?php echo $rowfForArray["p_id"]?>" class="remember_cb" type="checkbox" name="how_hear[]" value="<?php echo $rowfForArray["p_fname"]?>"
<?php foreach($_POST['how_hear'] as $_SESSION){echo (( $rowfForArray["p_fname"] == $_SESSION) ? ('checked="checked"') : ('')); } ?>/></td>
</tr>
<tr>
我正在从同一页面中的搜索结果中获取数据,然后我将每个结果都带有一个复选框,以便我可以检查$ _Session使用所需的“人员”。 / p>
我想要的唯一想法是复选框在分页后和提交表单之前保持检查!(如果需要,我可以发布分页代码,但他100%正确)
答案 0 :(得分:0)
在复选框标签中使用三元操作,在他内部没有foreach:
<input [...] value="<?php echo $rowfForArray["p_fname"]?>" <?php $rowfForArray["valueToCompareIfTrue"] ? "checked='checked'" : ''; ?> />
因为输入已经在'for'循环内部,所以每次循环都会创建一个新的复选框,它将验证是否需要进行检查。
我希望我能帮到你。
答案 1 :(得分:0)
解决这个问题的几种方法:
(直接PHP):每个页面都需要是一个单独的表格,然后你的“下一个”按钮/链接需要在每次点击时提交表单。然后,提交数据将被推送到$ _SESSION var。然后,如果数据向后导航,则可以提取数据并用于重新填充表单。只需要巧妙地使用为表单设置适当的$ _GET变量来设置URL。
(HTML5):这将更多地依赖于JavaScript,但基本上你摆脱了分页,然后将整个数据集分解为div块,你可以用JavaScript + CSS隐藏/显示或使用像JQuery这样的库。< / p>
(AJAX):向复选框添加事件侦听器,以便在选中按钮时,将异步调用返回到PHP脚本,并相应地更新$ _SESSION变量。同样,这个取决于你对JavaScript的舒适程度。
请记住,PHP = ServerSide&amp; JavaScript = ClientSide。虽然你可以一起破解一些PHP来处理“客户端”的东西,但它通常是丑陋和令人费解的......
答案 2 :(得分:0)
我没有碰到数据库就做到了......
复选框字段是一个php集合“cbgroup []”。 然后我创建了一个隐藏文本框,其中的所有值都等于镜像复选框的可选项的主键。这样,我可以遍历当前页面上的假复选框,并取消选中仅当前页面上存在的ID复选框。如果用户搜索项目并且表格发生变化,则可选项目仍然存在! (直到他们破坏会议)
我发布了分页而不是GET。
用户选择他们的项目后,页面将被POSTED,我在隐藏文本字段中读取当前页面上存在的所有复选框ID。因为PhP只告诉您从实际复选框中检查了哪些复选框,所以我只从此文本框值中清除POSTED页面上存在的会话数组中的那些复选框。因此,如果用户先前选择了项目ID 2,4,5,但当前页面具有ID 7,19和22,则仅从SESSION数组中清除7,19和22。
然后我用任何先前检查的项目7,19或22(如果选中)重新填充数组,并将其附加到SESSION数组以及2,4和5(如果选中)
在他们翻阅所有项目并做出最终选择之后,我将他们的最终选择发布到数据库。这样,他们可以冒险到其他页面,甚至可能在dB中添加项目,返回项目选择页面,所有选择仍然完好无损!没有在每个页面迭代的某个临时表中写入数据库!
首先,浏览所有复选框并清除这些值的数组 这将仅清除当前页面的复选框,而不清除任何其他页面中以前检查过的任何项目。
if (array_key_exists('currentids', $_POST)) {
$currentids = $_POST['currentids'];
if (isset($_SESSION['materials']) ) {
if ($_SESSION['materials'] != "") {
$text = $_SESSION['materials'];
$delimiter=',';
$itemList = explode($delimiter, $text);
$removeItems = explode($delimiter, $currentids);
foreach ($removeItems as $key => $del_val) {
//echo "<br>del_val: ".$del_val." - key: ".$key."<br>";
// Rip through all possibilities of Item IDs from the current page
if(($key = array_search($del_val, $itemList)) !== false) {
unset($itemList[$key]);
//echo "<br>removed ".$del_val;
}
// If you know you only have one line to remove, you can decomment the next line, to stop looping
//break;
}
// Leaves the previous paged screen's selections intact
$newSessionItems = implode(",", $itemList);
$_SESSION['materials'] = $newSessionItems;
}
}
}
现在我们已经检查了先前屏幕的已检查值,并清除了SESSION数组中的当前复选框,现在让我们写一下用户选择的内容,因为它们可以选择UNselected,或者全部。 检查选中了哪个复选框
if (array_key_exists('cbgroup', $_POST)) {
if(sizeof($_POST['cbgroup'])) {
$materials = $_POST['cbgroup'];
$N = count($materials);
for($i=0; $i < $N; $i++)
{
$sessionval = ",".$materials[$i];
$_SESSION['materials'] = $_SESSION['materials'].$sessionval;
}
} //end size of
} // key exists
现在我们拥有了所有可能被检查的项目,但可能存在重复项,因为用户可能来回分页 这将读取整个ID集合并删除重复项(如果有的话)。
if (isset($_SESSION['materials']) ) {
if ($_SESSION['materials'] != "") {
$text = $_SESSION['materials'];
$delimiter=',';
$itemList = explode($delimiter, $text);
$filtered = array();
foreach ($itemList as $key => $value){
if(in_array($value, $filtered)){
continue;
}
array_push($filtered, $value);
}
$uniqueitemschecked = count($filtered);
$_SESSION['materials'] = null;
for($i=0; $i < $uniqueitemschecked; $i++) {
$_SESSION['materials'] = $_SESSION['materials'].",".$filtered[$i];
}
}
}
$ _ SESSION ['materials']是用户选择的所有复选框的集合(在每个分页屏幕上),并包含数据库表中的primary_key值。现在您需要做的就是翻阅SESSION集合并读取\ write到材料表(或其他)并通过primary_key选择/更新
Typical form...
<form name="materials_form" method="post" action="thispage.php">
需要这个地方:跟踪当前页面,所以当你发布时,它会来回到右边页面
<input id="_page" name="page" value="<?php echo $page ?> ">
if ($page < $counter - 1)
$pagination.= "<a href=\"javascript:document.getElementById('_page').value='$next';materials_form.submit();\"> next »</a>";
else
$pagination.= "<span class=\"disabled\"> next »</span>";
$pagination.= "</div>\n";
从您的数据库中读取并填充您的表格
构建表单时,使用类似这样的东西来应用它的“checked”值等于SESSION数组中的一个
echo "<input type='checkbox' name='cbgroup[]' value='$row[0]'";
if (isset($filtered)) {
$uniqueitemschecked = count($filtered);
for($i=0; $i < $uniqueitemschecked; $i++) {
if ($row[0] == $filtered[$i]) {
echo " checked ";
}
}
}
当你在WHILE循环中构建HTML表时...使用它。它会在循环
之后将所有选择ID附加到逗号分隔的文本值...
$allcheckboxids = "";
while ($row = $result->fetch_row()) {
$allcheckboxids = $allcheckboxids.$row[0].",";
...
}
循环后,写出隐藏文本字段
echo "<input type='hidden' name='currentids' value='$allcheckboxids'>";