PHP登录刚刚刷新


PHP Login just refreshes

尝试创建登录页面。我没有收到任何错误或任何回声,当我点击登录按钮时,它会再次刷新页面。

连接

<?php
class Connection{    
   public function dbConnect(){
      $db_host = "";
      $db_username = "";
      $db_password = "";
      $db_name = "";
      try{
         $db = new PDO('mysql:host='.$db_host.';dbname='.$db_name , $db_username , $db_password);
         $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
         //This is just to test if connection was succesfull.      
         echo "Success!";
      }
      catch(PDOException $e){
         echo "Server Error: ".$e->getMessage()."". "Unable to connect to server.";
      }
      return $db;
   }
}
?>

用户

<?php 
include_once("connection.php");
class Users{
       private $db; 
   public function __construct(){
      $this->db = new Connection();
      $this->db = $this->db->dbConnect();   
   }
   public function Login($username, $password){
      if(!empty($username) && !empty($password)){
          $stmt = $this->db->prepare("SELECT * FROM users WHERE username= ? AND password= ?");
          $stmt->bindParam(1,$username);
          $stmt->bindParam(2,$password);
          $stmt->execute();
          if($stmt->rowCount() == 1){
             echo "Successfully logged in!";
          }else{
             echo "Incorrect username or password please try again.";
          }         
      }else{
          echo"Must type a username and password to login.";
      }
   }
}
?>

这就是登录页面的实际形式。我在整个html的顶部有一个简短的php代码。

<?php
include_once("login.php");
if(isset($_POST["submit"])){ 
   $username = $_POST["username"];
   $password = $_POST["password"];
   $user = new User();
   $user->Login($username, $password);
}
?>

这是实际的表单部分:

<form method ="post" action="index.php">
<input class="classname2" type="text" placeholder="Username" name="username"><br><br>
<input class="classname2" type="password" placeholder="Password" name="password"><br><br>
<input class="classname" type="submit" value="Login" ><br><br>
<input class="classname" type="submit" value="SignUp" formaction="signup.php">
</form>

好的,在将名称添加到登录按钮后,现在它可以正常工作了。现在查询或出现问题。我更改了如果rowCount()==1会发生的情况,因为标头("Location:…")给了我一个:警告:无法修改标头信息-标头已经由第25行的/home/content/49/11554349/html/gb/dev/connection.php中的/home-content/49/11554349/html/gb/dev/login.php发送(输出开始于/home/contint/49/11554649/html/gb/dev/loginphp)。我还将其更改为echo成功登录,因为即使我为该用户名输入了错误的密码,它仍在运行该部分代码。

您似乎没有任何名为"submit"的数据可供引用。我通常检查$_POST数组的大小(因为isset不起作用,因为它通常是一个空数组)。

if (sizeof($_POST) != 0) {
    // ....
}

由于没有$_POST["submit"],现在似乎没有处理您的登录代码。

您应该给提交输入一个名称。例如:name="submit"

<input class="classname" name="submit" type="submit" value="SignUp" formaction="signup.php">

当您使用if(isset($_POST['submit']))时,您可以在_POST数组中按名称进行检查。

尝试使用,在<input/>标签中添加了name="submit"属性

<input class="classname" name="submit" type="submit" value="Login" ><br><br>

而不是

<input class="classname" type="submit" value="Login" ><br><br>