0

在 mysql 表中,我有 3 个字段。user_to、user_from 和 id。变量都是正确的,应该插入正确的数据。

当单击一个名为“poke”的按钮时,它应该插入一个 cookie,该 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
<?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 回答
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 处理的工作量大致相同,但数据库工作量要少得多。此代码还可以防止一些 SQL 注入攻击,并具有错误处理功能。我假设 $username 已在其他地方创建,并且您没有启用 register_globals。

于 2012-11-16T00:03:29.283 回答