我已經在這個問題上工作了一段時間,而且我被困了幾天。 我擁有的是一個基本的博客系統,現在我一直試圖從列表中刪除/隱藏帖子。PHP MYSQL使用數組中的值更新多行
if(isset($_POST['hideBtn']) && isset($_POST['hidePost'])){
$checked = $_POST['hidePost'];
print_r($checked);
} elseif(isset($_POST['hideBtn']) && !isset($_POST['hidePost'])){
echo "Nothing Selected";
}
每個帖子都有一個複選框,顯示在列表中。
<input type="checkbox" name="hidePost[]" value="<?php echo $post_id;?>">
現在,當我運行上面的腳本,並檢查了10後,8個和4個,按「hideBtn」按鈕,我得到:
Array ([0] => 10 [1] => 8 [1] => 4)
這是我卡住。我想利用這個數組的值,並利用它們在MSQL查詢找到POST_ID的,我想隱藏:
if(isset($_POST['hideBtn']) && isset($_POST['hidePost'])){
$checked = $_POST['hidePost'];
print_r($checked);
$hide_post = 'UPDATE post SET hide_post=1
WHERE post_id IN (' . implode(',', array_map('intval', $checked)) . ')';
$db->query($hide_post);
} elseif(isset($_POST['hideBtn']) && !isset($_POST['hidePost'])){
echo "Nothing Selected";
}
這給了我同樣的結果之前:
Array ([0] => 10 [1] => 8 [1] => 4)
並且數據庫沒有變化。
這裏的數據庫表,hide_post默認爲0:
post
post_id user_id title body hide_post
編輯
好吧,看來我的問題是由於過多的數據庫查詢的一個連接。
這是我已經包括在我的頁面的頂部:
<?php
//get record count
$record_count = $db->query("SELECT * FROM post");
//number of posts per page
$per_page = 4;
//number of pages
$pages = ceil($record_count->num_rows/$per_page);
//get page number
if(isset($_GET['p']) && is_numeric($_GET['p'])){
$page = $_GET['p'];
}else{
$page = 1;
}
if($page<=0){
$start = 0;
}else{
$start = $page * $per_page - $per_page;
}
$prev = $page - 1;
$next = $page + 1;
//get post information from database
$query = $db->prepare("SELECT post_id, title, LEFT(body, 100) AS body, posted, category, user_name FROM post
INNER JOIN categories ON categories.category_id=post.category_id
INNER JOIN user ON user.user_id=post.user_id
WHERE hide_post = 0
order by post_id desc limit $start, $per_page");
$query->execute();
$query->bind_result($post_id, $title, $body, $posted, $category, $user_name);
?>
從我讀過關於我得到的錯誤:Commands out of sync; you can't run this command now
我想我需要使用mutli_query
或$stmt->store_result()
但這我第一次使用PHP和MySQL,我不知道如何去做。
EDIT 2
好吧,我找到了另一種方式來解決它,我所做的就是移動,隱藏後到運行的信息後實際取的while()
下面的查詢。我希望我早點認識到這一點。
您可以打印'$ hide_post'來查看implode是否正確完成? – fedorqui 2013-03-20 00:57:21
確保您的錯誤報告是針對SQL查詢(使用'mysql_error()'或'mysqli_error($ link)',表名/順序可能不正確。 – 2013-03-20 01:06:33
implode看起來找我,我檢查後9和7它給了我:'UPDATE post SET hide_post = 1 WHERE post_id IN(9,7)' – 2013-03-20 01:53:22