2013-10-08 61 views
0

基本上我試圖讓它檢查用戶是否在數據庫中有他們的ID,如果他們確實在那裏它更新它把$頁作爲'lastpage'在數據庫中。它還檢查以確保它現在在那裏設置的值小於$ page,如果它不是,則它不做任何事情。更新數據庫,如果變量小於變量

如果用戶在那裏沒有ID,那麼它應該添加任何$ page設置爲。

問題是它根本沒有在數據庫中更新。

這是我到目前爲止的代碼,任何人都有想法?

session_start(); 
if(!isset($_SESSION['id'])) { 
header("Location: ../../index.php"); 
} else { 

} 
    include '../../connect.php'; 
    include '../../users_func.php'; 
    $id = $_SESSION['id']; 
    $page = 3; 

    $sql_chk = " select * from html where id = '$id' and lastpage = '$page' "; 
    $rs_chk = mysql_query($sql_chk); 
    $num_chk = mysql_num_rows($rs_chk); 

    if ($num_chk == 0) { 
     mysql_query("INSERT INTO `html` (`id`, `lastpage`) VALUES ('$id', '$page') "); 
    } else { 
     $sql = "UPDATE html SET lastpage='$page' WHERE id='$id' and lastpage < $page"; 
     mysql_query($sql) or die("MYSQL Query Failed : " . mysql_error()); 
    } 
+1

你的代碼容易受到一些非常討厭的SQL注入的攻擊。您也不應該在PHP中使用mysql擴展,因爲它已被棄用。研究PDO或MySQLi以及參數化查詢來保護自己免受攻擊。 – jdp

+0

我知道如何將它轉換成Mysqli,是我應該怎麼做才能讓它變得脆弱?這也解決了我遇到的問題嗎? –

+1

不會回答你的問題,但它仍然非常重要。下面是如何使用PDO或MySQLi防止SQL注入的一個很好的解釋:http://stackoverflow.com/a/60496/324307 – jdp

回答

1

您的代碼過於冗長,而那些3個查詢和單個

INSERT INTO html (id, lastpage) VALUES ($id, $page) 
ON DUPLICATE KEY UPDATE lastpage = IF(lastpage < VALUES(lastpage), VALUES(lastpage), lastpage) 
+0

所以我應該用這段代碼替換我的查詢? mysqli_query($ link,「INSERT INTO html(id,lastpage)VALUES($ id,$ page) ON DUPLICATE KEY UPDATE lastpage = IF(lastpage

+0

因爲根本不工作,如果有一個數據庫連接錯誤,它會在頁面上說。大部分都有錯誤。 (lastpage

1

我知道你要更改代碼的mysqli或PDO和所有,但現有的代碼替換應該檢查錯誤

$result = mysql_query($sql); 
if (!$result) { 
    die('Invalid query: ' . mysql_error()); 
} 

在你的代碼,它很可能mysql_num_rows($ rs_chk)是無效的資源$ rs_chk檢查。

+0

它檢查connect.php中的內容,是的,那可能是它:) –