【发布时间】:2015-05-10 15:19:33
【问题描述】:
我目前遇到了一个问题,我有一个由复选框组成的表单。我从数据库中获取复选框的用户首选项值。一切都很好,并且做了应该做的事情,但是在我更改并选中一些框然后点击提交按钮之后,它仍然会再次向表单显示旧值。如果我再次在页面中单击,它将显示新值。
下面用 cmets 显示代码。
<form action="myprofile.php" method="post">
<?php $usr_cats=array();
$qry_usrcat="SELECT category_id_fk
FROM user_categories
WHERE user_id_fk='".$_SESSION['user_id']."';";
$result = mysqli_query($conn,$qry_usrcat);
while($row = mysqli_fetch_array($result)){
$usr_cats[] = $row[0]; // getting user categories from db stored in array
}
$query_allcats="SELECT category_id,category_name, portal_name
FROM categories
INNER JOIN portals on categories.portal_id=portals.portal_id
ORDER BY category_id;"; // select all category queries
$result = mysqli_query($conn,$query_allcats);
while($row = mysqli_fetch_array($result)){
echo $row['portal_name'] . "<input "; //print categories
if(in_array($row['category_id'], $usr_cats)){ // if in array from db, check the checkbox
echo "checked ";
}
echo "type='checkbox' name='categories[]' value='";
echo $row['category_id']."'> ". $row['category_name']."</br>\n\t\t\t\t\t\t";
}
?>
<input type="submit" name="submit" value="Submit"/>
<?php
$qry_del_usrcats="DELETE FROM user_categories
WHERE user_id_fk='".$_SESSION['user_id']."';"; //delete all query
if(isset($_POST['submit'])){
if(!empty($_POST['categories'])){
$cats= $_POST['categories'];
$result = mysqli_query($conn,$qry_del_usrcats); //delete all
for ($x = 0; $x < count($cats); $x++) {
$qry_add_usrcats="INSERT INTO `user_categories` (`user_id_fk`, `category_id_fk`)
VALUES ('".$_SESSION['user_id']."', '".$cats[$x]."');";
$result = mysqli_query($conn,$qry_add_usrcats);
}
echo "success";
}
elseif(empty($_POST['categories'])){ //if nothing is selected delete all
$result = mysqli_query($conn,$qry_del_usrcats);
}
unset($usr_cats);
unset($cats);
}
?>
我不确定是什么原因造成的。某些原因导致提交后不更新表单。但是,正如我所说,在我提交值后,一切都具有重要意义,这些值被存储并保存在数据库中,但未在表单上显示/更新。如果您需要任何说明,请告诉我。
谢谢
【问题讨论】:
-
您在
SELECT查询之后执行您的DELETE/INSERT查询。将这些查询移到SELECTs 之前。请注意,您需要将DELETE查询移动到if(isset($_POST['submit'])){中,这样您就不会在提交表单之前删除。 -
其实这不是问题,我必须在提交时插入标题。
-
@comsci_dude 你的程序逻辑还是搞砸了。
-
您的
header()只是在修复您的反向逻辑。本质上,它与将DELETE/INSERT移动到SELECT之前的作用相同。现在您正在执行SELECT,然后是DELETE/INSERT,然后是header()重定向,然后是SELECT。因此,您正在做同样的事情,但可以通过将您的步骤按正确顺序轻松解决。 -
@Sean 我现在正在处理您的建议!!谢谢你,会告诉你:)