2013-03-20 77 views
0

我已經在這個問題上工作了一段時間,而且我被困了幾天。 我擁有的是一個基本的博客系統,現在我一直試圖從列表中刪除/隱藏帖子。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()下面的查詢。我希望我早點認識到這一點。

+2

您可以打印'$ hide_post'來查看implode是否正確完成? – fedorqui 2013-03-20 00:57:21

+0

確保您的錯誤報告是針對SQL查詢(使用'mysql_error()'或'mysqli_error($ link)',表名/順序可能不正確。 – 2013-03-20 01:06:33

+0

implode看起來找我,我檢查後9和7它給了我:'UPDATE post SET hide_post = 1 WHERE post_id IN(9,7)' – 2013-03-20 01:53:22

回答

0

事實證明,我的問題不是由查詢本身引起的,而是我放置它的位置。

我不得不這樣做,以避免錯誤:Commands out of sync; you can't run this command now是把我隱藏/刪除的帖子,由用戶選擇的第二個查詢,並把查詢while()循環,會fetch()每篇文章之後。

基本上我試圖在第一個查詢完成之前進行第二個查詢。

0

使用此代碼

$checked = array (0 => 10, 1 => 8, 2 => 4); 
//print_r($checked); 
$hide_post = 'UPDATE post SET hide_post=1 
WHERE post_id IN (' . implode(',', array_map('intval', $checked)) . ')'; 

echo $hide_post; 

查詢變得

UPDATE post SET hide_post=1 WHERE post_id IN (10,8,4) 

運行相同的查詢中phpmyadmin和檢查相同的查詢是否返回螞蟻錯誤與否。

+0

我跑了UPDATE後設置hide_post = 1 WHERE post_id IN(10,8,4)在phpmyadmin和其他e沒有錯誤 – 2013-03-20 01:48:18

+0

@BrianBaker檢查你的數據庫連接,並檢查你的php文件中包含必要的數據庫文件 – 2013-03-20 02:00:35

+0

db在文件開始處包含爲$ db。這些帖子使用相同的連接從數據庫中提取,所以我想可以更新數據庫。 – 2013-03-20 02:12:09