2013-03-20 76 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