如何通过从SQLite3数据库中检索数据来验证用户的详细信息?

时间:2017-04-18 08:08:37

标签: php sqlite

我是PHP编码的新手。我创建了两种形式。一个用于注册,另一个用于登录。不幸的是,由于查询中的一些问题,两者都无法工作。我也搜索并浏览了这个网站上的类似帖子但没有解决我的问题。我想验证数据库中是否存在具有相同id的用户" Users.db"在注册时,如果任何用户输入相同的ID,则应通知他输入有效的ID。

当我运行我的"登录.php"代码,它在屏幕上显示以下消息,甚至没有等待用户按下提交按钮/注册按钮。"找到的行数:1。此ID不可用。请输入有效的身份证。"即使用户输入之前在数据库中不存在的唯一ID,也会显示此消息。即使按下注册按钮,id也是唯一的,也不会存储在我的数据库中。

其次,在登录时,必须验证用户输入的ID和密码,并与存储在数据库中的ID和密码进行匹配。他应该被引导到" index.html"成功登录后的页面,并且仅在他之前已注册。他还应该能够查看存储在"搜索"中的搜索历史记录。表在同一个数据库中。该表包含两列。一个用于用户ID,另一个用于保存搜索结果。

搜索表如下所示:

Id   | History
nl23   Grand Hayat Hotel
       Pearls Residencia Hotels

我在运行登录表单的代码后出现此错误#34;无法准备语句:1,接近" AND&#34 ;:第54行的D:\ log in.php中的语法错误&# 34。

我的登录表单代码如下:

登录.php

<body>
<!DOCTYPE HTML>  
<html>
<head>
<style>
.error {color: #FF0000;}
label{display:inline-block;width:100px;margin-bottom:10px;}
</style>
</head>
<body>  



<h2>Log in page</h2>

<form method="post" action="">  
  Id: <input type="text" name="Id">
  <br><br>
  Password: <input type="text" name="Password">
  <br><br>

  <input type="submit" name="submit" value="Log In" >  
</form>


<?php
   class MyDB extends SQLite3
   {
      function __construct()
      {
         $this->open('Users Data.db');
      }
   }
   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {

   }

   $id=null;
   $pass=null; 
   $id_exists=null; 
   if (isset($_POST['uid'])) {
    $id = $_POST['uid'];
}

   if (isset($_POST['passid'])) {
    $pass = $_POST['passid'];
    }

    $sql= " SELECT * FROM Users WHERE ID = '" .$id. "' AND PASSWORD = '" .$pass. "';";
    $ret = $db->query($sql);
    $rows = count($sql);
    if ($rows > 0)
       {
         $id_exists = true;
         echo "You entered a valid id and password. ";
         $sql= "SELECT History FROM Search WHERE Id= " .$id. ";";
         $ret = $db->query($sql);
         //header("location:index.html");
       }
    else 
    {
      echo "Please enter a valid id and password. ";
    }
?>
</body>
</html>

我的签到表格如下:

登录.php

<!DOCTYPE HTML>  
<html>
<head>
<style>
.error {color: #FF0000;}
label{display:inline-block;width:100px;margin-bottom:10px;}
</style>
</head>
<body>  



<h2>Sign in page</h2>

<form method="post" action="">  
  Id: <input type="text" name="Id">
  <br><br>
  Password: <input type="text" name="Password">
  <br><br>
  Email: <input type="text" name="Email">
  <input type="submit" name="submit" value="Sign Up" >  
</form>


<?php
   class MyDB extends SQLite3
   {
      function __construct()
      {
         $this->open('Users Data.db');
      }
   }
   $db = new MyDB();
   if(!$db){
      echo $db->lastErrorMsg();
   } else {

   }
   $id=null;
   $password=null;
   $email=null;
   $id_exists=false;
   $sql=null;
   $result=null;
   $rows=null;
   $ret=null;
   if (isset($_POST['Id'])) {
    $id = $_POST['Id'];
   }

   if (isset($_POST['Password'])) {
    $password = $_POST['Password'];
   }

    if (isset($_POST['Email'])) {
      $email = $_POST['Email'];
    }


     $result= "SELECT * FROM Users WHERE ID = " .$id. ";";
     // $ret = $db->query($result);
     //$ret = $db->exec($sql);
     echo "<p> The result query is ".$result ."</p>";
     $rows = count($result);
     echo "<p> Number of rows found: ".$rows ."</p>";

     if ($rows > 0)
       {
         $id_exists = true;
         echo "This id is not available. Please enter a valid id. ";
       }

       else 
     {
         $sql= "INSERT INTO Users (ID,PASSWORD, EMAIL)
          VALUES ('$id','$password','$email');" ;
         $ret = $db->query($sql);
         //$ret = $db->exec($sql);
        // header("location:index.html");
       }

 if(!$ret){
    echo $db->lastErrorMsg();
   } else {

   }
$db->close();
?>
</body>
</html>

请指导我,因为我被困在这两个代码中。

1 个答案:

答案 0 :(得分:0)

您缺少的是检查$_POST是否设置为空。只有这样你才想处理用户输入。还有一件事是你应该将$pass包装在引号中,因为它是一个字符串,如果没有用引号括起来,它将被解释为列名。

此处的代码:

登录.php

<!DOCTYPE HTML>
<html>
<head>
    <style>
        .error {color: #FF0000;}
        label{display:inline-block;width:100px;margin-bottom:10px;}
    </style>
</head>
<body>



<h2>Log in page</h2>

<form method="post" action="">
    Id: <input type="text" name="Id">
    <br><br>
    Password: <input type="text" name="Password">
    <br><br>

    <input type="submit" name="submit" value="Log In" >
</form>


<?php
if(!empty($_POST)) {
    class MyDB extends SQLite3
    {
        function __construct()
        {
            $this->open('Users Data.db');
        }
    }
    $db = new MyDB();
    if(!$db){
        echo $db->lastErrorMsg();
    } else {

    }

    $id=null;
    $pass=null;
    $id_exists=null;
    if (isset($_POST['Id'])) {
        $id = $_POST['Id'];
    }

    if (isset($_POST['Password'])) {
        $pass = $_POST['Password'];
    }

    $sql= " SELECT * FROM Users WHERE ID = '" .$id. "' AND PASSWORD = '" .$pass. "';";
    $ret = $db->query($sql);
    $rows = count($sql);
    if ($rows > 0)
    {
        $id_exists = true;
        echo "You entered a valid id and password. ";
        $sql= "SELECT History FROM Search WHERE Id= " .$id. ";";
        $ret = $db->query($sql);
        //header("location:index.html");
    }
    else
    {
        echo "Please enter a valid id and password. ";
    }
}
?>
</body>
</html>

登录.php:

<!DOCTYPE HTML>
<html>
<head>
    <style>
        .error {color: #FF0000;}
        label{display:inline-block;width:100px;margin-bottom:10px;}
    </style>
</head>
<body>



<h2>Sign in page</h2>

<form method="post" action="">
    Id: <input type="text" name="Id">
    <br><br>
    Password: <input type="text" name="Password">
    <br><br>
    Email: <input type="text" name="Email">
    <input type="submit" name="submit" value="Sign Up" >
</form>


<?php
if(!empty($_POST)) {
    class MyDB extends SQLite3
    {
        function __construct()
        {
            $this->open('Users Data.db');
        }
    }
    $db = new MyDB();
    if(!$db){
        echo $db->lastErrorMsg();
    } else {

    }
    $id=null;
    $password=null;
    $email=null;
    $id_exists=false;
    $sql=null;
    $result=null;
    $rows=null;
    $ret=null;
    if (isset($_POST['Id'])) {
        $id = $_POST['Id'];
    }

    if (isset($_POST['Password'])) {
        $password = $_POST['Password'];
    }

    if (isset($_POST['Email'])) {
        $email = $_POST['Email'];
    }


    $result= "SELECT * FROM Users WHERE ID = " .$id. ";";

    echo "<p> The result query is ".$result ."</p>";
    $rows = count($result);
    echo "<p> Number of rows found: ".$rows ."</p>";

    if ($rows > 0)
    {
        $id_exists = true;
        echo "This id is not available. Please enter a valid id. ";
    }

    else
    {
        $sql= "INSERT INTO Users (ID,PASSWORD, EMAIL)
          VALUES ('$id','$password','$email');" ;
        $ret = $db->query($sql);
        //$ret = $db->exec($sql);
        // header("location:index.html");
    }

    if(!$ret){
        echo $db->lastErrorMsg();
    } else {

    }
    $db->close();
}
?>
</body>
</html>