0

私はしばらくこの問題に取り組んできましたが、数日間立ち往生しています。私が持っているのは基本的なブログ システムです。現在、リストから投稿を削除/非表示にしようとしています。

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」ボタンを押すと、次のようになります。

配列 ( [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";
}

これにより、以前と同じ結果が得られます。

配列 ( [0] => 10 [1] => 8 [1] => 4 )

データベースに変更はありません。

データベース テーブルは次のとおりです。hide_post のデフォルトは 0 です。

投稿
post_id user_id タイトル本文 hide_post

編集

私の問題は、1 つの接続でのデータベース クエリが多すぎることが原因だったようです。

これは、私のページの上部に含めたものです。

<?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);
?>

私が得たエラーについて読んだことから、orCommands out of sync; you can't run this command nowを使用する必要があると思いますが、phpとmysqlを使用するのはこれが初めてで、どうすればよいかわかりません。mutli_query$stmt->store_result()

編集2

わかりました、別の修正方法を見つけました。投稿を非表示にするクエリをwhile()、投稿情報の実際の取得を実行するクエリの下に移動するだけでした。これに早く気づけばよかった(笑)。

4

2 に答える 2

0

私の問題はクエリ自体が原因ではなく、どこに配置したかが原因であることがわかりました。

エラーを回避するために私がしなければならなかったCommands out of sync; you can't run this command nowのは、ユーザーが選択した投稿を非表示/削除する2番目のクエリを取得し、各投稿while()を行うループの後にクエリを配置することだけでした。fetch()

基本的に、最初のクエリが終了する前に2番目のクエリを作成しようとしていました。

于 2013-03-20T20:29:09.743 に答える
-2

このコードの使用

$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同じクエリが ant エラーを返すかどうかを確認します。

于 2013-03-20T01:11:02.533 に答える