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.";
 }
 }
4

3 に答える 3

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 構文のフィールドを意味します

于 2012-11-15T23:27:38.183 に答える
0

これはコメントとして始まりましたが、長くなりすぎて収まりません。

セッションはユーザー名と同じではありません - あなたの投稿は非常に混乱しています.

間違った引用符を脇に置きます(これが、コードが期待どおりに機能しない理由です)...

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 処理の労力はほぼ同じですが、DB のワークロードは大幅に少なくなります。このコードは、一部の SQL インジェクション攻撃も防止し、エラー処理を備えています。$username は別の場所で作成されており、register_globals が有効になっていないと思います。

于 2012-11-16T00:03:29.283 に答える
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());
        }
    }
 }
}
?>
于 2012-11-15T23:38:24.373 に答える