2012-11-15 68 views
0

在一個mysql表中,我有3個字段。 user_to,user_from和id。變量都是正確的,應該插入正確的數據。沒有插入我期望的地方

當點擊一個名爲'poke'的按鈕時,它應該插入存儲誰做的會話的cookie和被戳穿的人。它似乎並沒有被插入,我堅持:(

    $cookie = $_SESSION['user_login']; 
//Poke code 
if (@$_POST['poke']) { 
$check_if_poked = mysql_query("SELECT * FROM pokes WHERE user_to='$username' && user_from='$added_by'"); 
$num_poke_found = mysql_num_rows($check_if_poked); 

if ($num_poke_found == 1) { 
echo "Come on! Give the guy a chance!"; 
} 
else 
if ($username == $cookie) { 
echo "You cannot Jab yourself."; 
} 
else 
{ $poke_user = mysql_query("INSERT INTO `pokes` ('user_from', 'user_to') VALUES ('$cookie', '$username')") or trigger_error(mysql_error()); 
    echo "$username has been jabbed."; 
} 
} 
+2

請不要使用'mysql_ *'函數來編寫新代碼。他們不再維護,社區已經開始[棄用程序](http://goo.gl/KJveJ)。請參閱* [紅盒子](http://goo.gl/GPmFd)*?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定哪些,[這篇文章](http://goo.gl/3gqF9)會幫助你。如果你選擇PDO,[這裏是很好的教程](http://goo.gl/vFWnC)。 –

+1

你有什麼錯誤?另外,您可能希望在操作順序中首先檢查是否存在「$ username == $ cookie」的情況。如果這種情況是真的,甚至沒有理由甚至打電話給數據庫。 –

+0

如何在數據庫if後引用'$ username'和'else'? –

回答

1

你用錯了引號,在MySQL查詢的字段。

//your wrong variant 
"INSERT INTO `pokes` ('user_from', 'user_to') VALUES ('$cookie', '$username')" 

//right variant 
"INSERT INTO `pokes` (`user_from`, `user_to`) VALUES ('$cookie', '$username')" 

行情像'平均值和報價像'平均場中SQL語法

0
<?php 
if ($_POST['poke']) { 
#ref to the current user 
$from = $_SESSION['user_login']; 
#ref to the (poked user) 
$to = $_POST['poked_user_id']; 

if($from == $to){ 
    echo "you cant poke yourself!"; 
} 
else{ 
    #ADVICE: USE PDO OR MYSQLI INSTEAD OF MYSQL 

    $check_if_poked = mysql_query("SELECT * FROM pokes WHERE user_to='$to' AND user_from='$from'"); 
    if(mysql_num_rows($check_if_poked)){ 
     echo "Come on! Give the guy a chance!"; 
    } 
    else{ 
     if(mysql_query("INSERT INTO `pokes` (`user_from`, `user_to`) VALUES ('$from', '$to')")){ 
      echo "$to has been jabbed."; 
     } 
     else{ 
     trigger_error(mysql_error()); 
     } 
    } 
} 
} 
?> 
0

這開始了作爲一個評論 - 但它變得太長

爲SE。 ssion與用戶名不同 - 你的帖子非常混亂。

撇開錯誤報價(這就是爲什麼你的代碼是不是在做你所期望的)....

在一個MySQL表,我有3個領域。 user_to,user_from和id

...在這種情況下,您不需要檢查該行是否已存在 - 而不會創建重複項。然後建立一個唯一的索引...

if (@$_POST['poke'] && ($_SESSION['user_login']!===$username)) { 
    $qry = "INSERT INTO `pokes` (`user_from`, `user_to`) 
      VALUES (".mysql_real_escape_string($_SESSION['user_login']) 
      .", '" . mysql_real_escape_string($username) . "')" 
    if (mysql_query($qry)){ 
     echo "$username has been jabbed."; 
    } else if (stristr(mysql_error(), 'duplicate')) { 
     echo "Come on! Give the guy a chance!"; 
    } else { 
     echo "It's all gone Pete Tong!"; 
    } 
} else if ($_SESSION['user_login']!===$username) { 
    echo "You cannot Jab yourself."; 
} 

雖然它與PHP處理大致相同,但數據庫工作量明顯較少。此代碼還可以防止一些SQL注入攻擊,並具有錯誤處理。我認爲$ username已經在別處創建,並且你沒有啓用register_globals。