在PHP OOP登录中使用AJAX失败

时间:2018-10-31 05:54:01

标签: php jquery ajax oop pdo

我正在尝试使用ajax进行OOP登录,但是当我运行它时,我无法启动会话或将其重定向到“ Directivo.php”页面,我没有任何输出,我应该从哪里开始寻找吗?

bdcon.php这是我的数据库连接代码

<?php
class Conexion extends mysqli{
private $DB_HOST = 'localhost';
private $DB_USER = 'root';
private $DB_PASS = '';
private $DB_NAME = 'bdhtav2';  
public function __construct(){
   parent:: __construct($this->DB_HOST, $this->DB_USER, $this->DB_PASS, $this->DB_NAME);
   $this->set_charset('utf-8');
   $this->connect_errno ? die('Error en la conexion'. mysqli_connect_errno()) :
   $M = 'Conectado Correctamente';
   echo $M;
}
}
?>

classuser.php在这里,我执行定义登录操作的类

<?php
require "bdcon.php";
session_start();
class Users
{
   public $user;
   public $pass;

   public function __construct($usuario, $contraseña)
   {
       $this->user=$usuario;
       $this->pass=$contraseña;
   }
   public function login()
   {
        $db = new Conexion();

    $sql = "SELECT * from user where username = ".$this->user." and password = ".$this->pass;                       $query = $db->prepare($sql);
    $stmt = $db->prepare($sql);
    $stmt->execute();
    $count = $stmt->rowCount();
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if($count == 1 && !empty($row)){
        $_SESSION["USERNAME"] = $row["username"];
        header('location: directivo.php');
    }else{
        echo"Error";
    }
  }
}
?>

acceso.php此处输入被填充,并通过AJAX发送到“ logeo.php”

<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title> Log-In </title>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
   <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
   <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>

</head>
<body>
<!--Insentar navbar -->
   <div class="container" style="margin-top:15%;">
   <div class="row">
       <div class="col">
           </div>

           <div class="col-md-7">
               <H1 align="center">Inicio de Sesión</H1>
               <h4 align="center">Directivos</h4>
               <div class="input-group mb-3">
                   <div class="input-group-prepend">
                       <span class="input-group-text" id="inputGroup-sizing-default">Nombre de Usuario</span>
                   </div>
                   <input type="text" id="user1" class="form-control" aria-label="Default" aria-describedby="inputGroup-sizing-default">
           </div>
               <div class="input-group mb-3">
                   <div class="input-group-prepend">
                       <span class="input-group-text" id="inputGroup-sizing-default">Contraseña</span>
                   </div>
                   <input type="text" id="pass1" class="form-control" aria-label="Default" aria-describedby="inputGroup-sizing-default">
           </div>
           </div>
           <button type="button" id="enviar" class="btn btn-primary btn-lg">Iniciar Sesión</button>
           <span id="Mensaje"></span>

       <div class="col"></div>
       </div>
   </div>

   <script>




$(document).ready(function(){

function getErrorMessage(jqXHR, exception) {
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        $('#Mensaje').html(msg);
}

   $('#enviar').click(function(){
    var user1 = $('#user1').val();
    var pass1 = $('#pass1').val();

     $.ajax({
       type:"POST",
       url:"logeo.php",
       data:{user:user1,pass:pass1},
       dataType:"html",
       success: function(response){
           $("#Mensaje").val(response.responseText);
           alert("Ya puedes dormir");
       },
       error: function(jqXHR, exception){
           getErrorMessage(jqXHR, exception);
       }
       });
   });
});


 </script>

 </body>
 </html>

logeo.php在这里,我调用login()类并使用AJAX数据

<?php
require 'classuser.php';

$usuario = $_POST["user"];
$contraseña = $_POST["pass"];
echo $usuario;
$logeo=new Users($usuario, $contraseña);
$logeo->login();

?>

1 个答案:

答案 0 :(得分:1)

几件事。看来您在开始会话之前回显了mysqli错误。必须先设置会话,然后才能将任何内容输出到浏览器。

这是我为您解决问题的建议。

  1. “用户”类的文件中不应包含任何类。即。不需要或session_starts()。
  2. 在您的情况下,Users类应该扩展Conexion类。
  3. 您的session_start()应该始终是初始PHP脚本的第一行。您的情况是logeo.php脚本。

logeo.php

<?php
session_start();  //Always first line.  Has to be set before anything is sent out to the browser.

require 'bdcon.php';
require 'classuser.php';

$usuario = $_POST["user"];
$contraseña = $_POST["pass"];
echo $usuario;
$logeo=new Users($usuario, $contraseña);
$logeo->login();

?>

classuser.php

class Users extends Conexion
{
   public $user;
   public $pass;

   public function __construct($usuario, $contraseña)
   {
       $this->user=$usuario;
       $this->pass=$contraseña;
   }
   public function login()
   {
        $db = new Conexion(); //By extending the class you would not need to make a new instance of the Conexion class.

    $sql = "SELECT * from user where username = ".$this->user." and password = ".$this->pass;                       

    $stmt = $db->prepare($sql); ////By extending your class this could be something like "$this->db->prepare($sql);"
    $stmt->execute();
    $count = $stmt->rowCount();
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    if($count == 1 && !empty($row)){
        $_SESSION["USERNAME"] = $row["username"];
        header('location: directivo.php');
    }else{
        echo"Error";
    }
  }
}
?>

这应该使您朝正确的方向前进。您可能需要修改Conexion类,才能使其正常工作。