PHP sql选择查询问题

时间:2016-02-04 09:53:37

标签: php sql

我想在php中创建一个帐户激活页面。我试过这些代码,但每次显示

  

您的验证链接无效或已过期

每当电子邮件ID和密钥在我的sql数据库中时,我的代码出了什么问题?请帮忙

<?php 
    $hash = $_GET['hash'];
    $e = base64_decode($_GET['e']);
?>
<?php require_once("Connections.php");?>
<?php 
    mysql_select_db($database, $connection);
    $sql=mysql_query("SELECT FROM temp  WHERE email='$e' AND hashkey='$hash'");

    if(mysql_num_rows($sql)!=1) {
        echo "Your verification link is invalid or expired";
    }
    else {
        if ($sql=mysql_query("DELETE FROM temp  WHERE email='".$e."' AND hashkey='".$hash."'")) {
            echo '<script type="text/javascript">
                  register_2($e);
                  function register_2(){
                      alert("Hi your email"+m);
                  }
                  </script>
                 ';
        }
    }    
?>

3 个答案:

答案 0 :(得分:0)

<?php 
$hash = $_GET['hash'];

$e = base64_decode($_GET['e']);

?>


<?php require_once("Connections.php");?>
<?php 
mysql_select_db($database, $connection);
$sql=mysql_query("SELECT FROM temp  WHERE email='$e' AND hashkey='$hash'");
 if(mysql_num_rows($sql)<= 0)
   {
    echo "Your verification link is invalid or expired";
   }
else{
if ($sql=mysql_query("DELETE FROM temp  WHERE email='".$e."' AND hashkey='".$hash."'")){
        echo '<script type="text/javascript">
                    register_2($e);
                    function register_2(){
                        alert("Hi your email"+m);
                        }
              </script>
              ';
        }
    }

?>

只需将!= 1更改为&lt; = 0
我做到了

答案 1 :(得分:0)

首先不要使用mysql_ *函数将它们删除并在php 7中删除,使用mysqli_ *或pdo代替

所以改变

if(mysql_num_rows($sql)!=1)

$rowsCount = mysql_num_rows($sql);

if ($rowsCount === 0 || $rowsCount === false) {
    die "Your verification link is invalid or expired";
}

你的代码也容易受到 SQL INJECTION 的攻击,你应该转义哈希以及 XSS register_2($e);这里我可以通过URL传递base64中编码的任何东西。

$hash = mysql_real_escape_string($_GET['hash']);

也是这段代码

mysql_query("DELETE FROM temp  WHERE email='".$e."' AND hashkey='".$hash."'")

可以更改为

mysql_query("DELETE FROM temp  WHERE email='$e' AND hashkey='$hash'")

它是一样的,但在最好的情况下,你应该使用准备好的陈述。

其他建议:

  1. 将echo改为die;
  2. 执行1时删除其他条件。
  3. 您的其他情况不会检查查询是否真的删除了行,只检查是否执行了查询,您应该使用mysql_affected_rows()检查行是否已删除,或者删除此条件。

答案 2 :(得分:-1)

你应该使用这样的条件。

if(mysql_num_rows($sql) != NULL) { echo "Your verification link is invalid or expired"; }