【问题标题】:cant compare data from db无法比较来自 db 的数据
【发布时间】:2018-01-22 04:20:51
【问题描述】:

我正在创建自己的个人网站来销售音乐并帮助当地艺术家推广他们的音乐。但是,我遇到了问题。

我创建了一个注册页面,新用户可以在其中注册到系统上。我首先尝试从数据库中搜索电子邮件是否存在,以便表格上没有重复的电子邮件。我为此创建了一个if 语句,因此当该语句为真时(意味着找到重复的电子邮件),它会打印出“电子邮件存在”,但是当它没有从数据库中找到任何信息时,屏幕保持空白,而 else声明的一部分应启动并打印“未找到电子邮件”。

谁能帮我看看我哪里出错了?这是我的代码:

 if ($_POST['submit2']){ 
$fname = $_POST['Fname'];
$sname = $_POST['Sname'];
$email = $_POST['Emailaddress'];
$pass = $_POST['newpassword'];

$sql= "select * from cust_information where email = '$email'";
$results = mysqli_query($conn, $sql) or die(mysqli_error($conn));
$row = mysqli_fetch_array($results) or die(mysqli_error($conn));
    if($row > 0){
        echo "email exists";
    }elseif ($row <0){
        echo "email doesnt exist";
    }else{
        echo "nothing was done";
    }
}

【问题讨论】:

  • 使用prepared statements,确保所有字段都被实际传递,确保启用PHP的error reporting并使用mysqli_error。我建议您不要使用当前代码标准自己创建销售方面,因为它很可能存在风险。如果您还没有这样做,请hash您的密码。
  • 两件事(顺便说一句,你很容易受到 SQL 注入的攻击 -> 使用准备好的语句):使用 SELECT COUNT(*),这样如果不存在邮件,你将得到 0,如果不存在,你将得到 >0。无论如何,您的代码将返回

标签: php html sql


【解决方案1】:

删除 elseif 条件

 if($row > 0){
    echo "email exists";
}else{
    echo "email doesnt exist";
}

【讨论】:

    【解决方案2】:

    响应将始终为 1 或 0,永远不会是其他任何值。如果数组为空,那么这是一个不同的问题,但你不应该把它作为一个 else if。

    if($row > 0){
        echo "email exists";
    }
    else{
        echo "email does not.";
    }
    

    我还建议使用 PDO http://php.net/manual/en/book.pdo.php。您当前的代码让您对 SQL 注入敞开大门。

    【讨论】:

    • mysqli_* 已经准备好了语句,为什么还要使用 PDO?这会适得其反。
    • 语法在命名和书写方式上都更好。 PDO 是一个对象,我认为采用 OO 方法比调用函数要好得多。在一天结束时,他们做同样的工作
    • 然后包括您为什么要让他们切换答案的原因! 归根结底,他们做同样的工作 - 矛盾的陈述。
    • PDO 也是通用的数据库抽象层,因此它支持 mySQL 数据库之外的东西。阅读this
    【解决方案3】:

    首先你的代码容易受到SQL injection的攻击,你需要to prevent it

    其次,您的行$row = mysqli_fetch_array 将返回一个数组,因此比较$array &gt; 0$array &lt; 0 是无效的。更好地比较 count($row) &gt; 0count($row) === 0 将比较返回的行数

    【讨论】:

      【解决方案4】:

      这就是你所需要的:

      if(count($row) > 0)
      {
          echo "email exists";
      }
      else
          echo "email doesnt exist";
      } 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 2021-08-24
        相关资源
        最近更新 更多