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.
Sie sind anfällig für [sql Injektion Angriffe] (http://bobby-tables.com) –
http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection -in-php – Scott
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