2014-04-16 105 views
1

我正在为班级制作一款游戏,并且我决定添加一个评论系统,以便报告评论。我创建了一个名为comments的表格和名为report_active的表格中的一列。当用户报告评论时,该列中的值变为1.然后在adminCP中列出在active_report列中具有1的所有评论。如何检查ID是否不存在..?

有一个名为comments.php的文件,其中列出了所有注释并允许用户添加新注释。在每条评论旁边,我添加了一个链接到名为report_comment.php的文件的报告按钮。我用这个文件来运行更新查询。

这个文件看起来是这样的:

<?php 
session_start(); 
require_once('db_connect.php'); 
require_once('security.php'); 

if (isset($_GET['id'])) { 
    $report_active = 1; 
    $id = $_GET['id']; 

    $update = $db->prepare("UPDATE comments set report_active = ? WHERE id = ?"); 
    $update->bind_param('ii', $report_active, $id); 

    if ($update->execute()) { 
     $_SESSION['reported'] = 'reported'; 
     header('Location: comments.php'); 
     die(); 
    } 
} else { 
    header('Location: comments.php'); 
} 
?> 

会话变量$_SESSION['reported']是我用来determin是否显示警报它说评论报道,那么我取消设置会话的用户。

我所问的是我怎么能检查是否一个ID发来的$_GET要求确实存在,如果它不然后运行通常$_SESSION['reported'],如果没有再设置一个新的会话$_SESSION['errorReport']然后显示与错误警报?

我曾尝试:

if ($update->execute() && $update->num_rows) {然而这没有奏效。

有没有另外一种方法可以做到这一点?

+0

我很抱歉没有在高级中回答你的问题,但你真的应该重新考虑你的数据库的架构。使用标志来表示关系是一种不好的做法。您应该使用连接来连接两个表,并检查是否有任何匹配的行可以指示报表是否处于活动状态。请查找连接,外键和SQL关系。 – PressingOnAlways

+0

我刚刚访问过:http://www.w3schools.com/sql/sql_foreignkey.asp。我同意这是一个更好的方法。我这样做的原因是因为它只是一个小小的任务,我不觉得有必要创建多个表,而不会被大量使用。尽管我会将它作为一个更大的公共应用程序的选项来写。 – user3481788

回答

2

,你现在要做的,您可以执行查询,并检查是否有任何行使用 rowCount() affected_rows修改:

if ($update->execute()) { 
    if ($update->affected_rows > 0) 
    { 
    $_SESSION['reported'] = 'reported'; 
    header('Location: comments.php'); 
    die(); 
    } 
    else 
    { 
    // no row was modified/the ID does not exist. 
    } 
} 

编辑:原来的答案适用于PDO,为的mysqli你需要$update->affected_rows代替。

+1

似乎OP是使用'mysqli_ *'---'bind_param' –

+2

@ Fred-ii- Ooooops,增加了'mysqli'版本... – jeroen