2014-04-16 107 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