2016-06-22 5 views
0

Ich schrieb ein Login-Skript für eine Website, die ich mit Ressourcen, die ich online gefunden habe, erstellen. Als ich meinen Code auf einem lokalen Server lief, funktionierte es gut, aber jetzt, wo ich es tatsächlich auf einem echten Server online laufen lasse, funktioniert es nicht. Ich denke, dass ich meinen Fehler eingegrenzt habe, aber da ich neu in PHP bin und keine Erfahrung mit MySql habe, kann ich mein Problem nicht wirklich beheben. Dies ist die Datei für das Anmeldeskript:Login-Skript Problem mit der Datenbank

//login file 
<?php 
class Login{ 
    private $db_connection = null; 

    public function __construct(){ 
     session_start(); 
     $this->dologinWithPostData(); 
    } 

    private function dologinWithPostData(){ 

      $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME); 

      if (!$this->db_connection()->connect_errno) { 

       // escape the POST stuff 
       $email = $_POST['email']; 
       // database query, getting all the info of the selected user (allows login via email address in the 
       // username field) 
       $sql = "SELECT email, password 
         FROM users 
         WHERE email = '" . $email ."'"; 

       $result_of_login_check = $this->db_connection->query($sql);//This is 0 

       // if this user exists 
       if ($result_of_login_check->num_rows == 1) { 
        // get result row (as an object) 
        $result_row = $result_of_login_check->fetch_object(); 
        // using PHP 5.5's password_verify() function to check if the provided password fits 
        // the hash of that user's password 
        if ($_POST['password'] == $result_row->password) { 
         // write user data into PHP SESSION (a file on your server) 
         $_SESSION['email'] = $result_row->email; 
         $_SESSION['user_login_status'] = 1; 
        } else { 
         $this->errors[] = "Wrong password. Try again."; 
         $_SESSION['user_login_status'] = 0; 
        } 
       } else { 
        $this->errors[] = "This user does not exist."; 
       } 
      } else { 
       $this->errors[] = "Database connection problem."; 
      } 
     } 

    print_r($this->errors); 
    } 

    public function isUserLoggedIn() 
    { 
     if (isset($_SESSION['user_login_status']) AND $_SESSION['user_login_status'] == 1) { 
      return true; 
     } 
     // default return 
     return false; 
    } 
} 

?> 

ich es in einer anderen Datei ausführen, die im Wesentlichen das Folgende:

//Run file 
require_once("dbconfig.php"); 
    include_once("login.php"); 
    $login = new Login(); 
    if($login->isUserLoggedIn() == true){ 
    //go to another page } 

Die verwendeten Variablen auf die Datenbank zuzugreifen instanziiert in dbconfig.php und korrekt sind. Mit diesem Code erhalte ich einen Fehler, der besagt, dass die Seite nicht funktioniert und die Anfrage nicht bearbeiten kann. Wenn ich die Zeile

if (!$this->db_connection()->connect_errno) { 

kommentieren und die else-Anweisung folgen, lautet die Ausgabe "Dieser Benutzer existiert nicht". Also ich denke der Fehler hat etwas mit $this->db_connection()->connect_errno) zu tun. Wenn Sie herausfinden können, wo ich falsch gelaufen bin oder einen Ratschlag erhalten habe, wie Sie das Skript umschreiben können, um es besser zu machen, wird es sehr geschätzt.

+0

Sie sind anfällig für [sql Injektion Angriffe] (http://bobby-tables.com) –

+0

http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection -in-php – Scott

+2

Nein nein nein! Sie speichern niemals Benutzerkennwörter in einer Datenbank. Du nicht. Was Sie speichern, ist _ein Hash des Benutzerkennworts_, das von einem _good_hashing-Algorithmus erstellt wird. Zum Zeitpunkt der Anmeldung hashst du dann das bereitgestellte Passwort und vergleichst beide Hashes. Auf diese Weise riskieren Sie nicht, Benutzerkennwörter offen zu legen, wenn Ihr Dienst kompromittiert ist. – arkascha

Antwort

1

Dies ist eine Datenbank zur Gründung Fehler Ihrer Live-Remote-Konfigurationsserver-Datenbank ist different.Please überprüfen Sie dbconfig.php Datei stellen Sie sicher, Datenbankname, Host, Port, Benutzername, Passwort sind mit Ihrer Live-Datenbank

1

Diese definiert ist falsch:

 if (!$this->db_connection()->connect_errno) { 

db_connection ist einfach eine Variable Ihr DB Connection-Objekt enthält. Es ist NICHT eine Methode.

Sie wollen wahrscheinlich

 if (!$this->db_connection->connect_errno) { 
           ^--note lack of() 

statt.

0

Ich denke, Problem mit diesem Following-Check. Ihr Ergebnis erhält mehr als 1 Datensätze. // wenn dieser Benutzer existiert

if ($result_of_login_check->num_rows == 1) { 
...... 
}else{ 
    $this->errors[] = "This user does not exist."; 
} 

sicher, Ihre E-Mail-Adresse in Datentabelle eindeutig zuzuordnen ist, wenn es nicht eindeutig ist, dann wird Ihre obige Aussage fehlschlagen und den Text zeigen „Dieser Benutzer existiert nicht.“ von sonst Teil