Hallo Community,
ich habe den Tipp von uha angenommen und interpretiert und versucht die mysqli-Verbindung in den Funktionen zu übergeben, dies schlägt jedoch massiv fehl. Angeblich ist die Variable $connect nicht definiert, obwohl diese im Main-File per connect.php inkludiert wurde.
Fehlermeldung
auth.php
Hinweis: bei Zeile 16 handelt es sich um die $connect-Anfrage.
index.php
inc/funcs.php
Nun, zum eigentlichen Problem. Ich prüfe in der auth.php ob der Benutzer eingeloggt ist, wenn nicht, dann soll das Formular erscheinen und wenn auf Absenden gedrückt wird, dann werden die Eingaben an die $user->login() Funktion übergeben, diese sieht vor ein mysqli-Objekt zu erhalten, einen Benutzernamen sowie ein Passwort.
User.class.php - login()
Nun wird laut der Fehlermeldung aber kein $connect übergeben, somit ergibt sich die zweite Fehlermeldung dass keine mysqli-Instanz übergeben wurde sondern NULL, nun möchte ich gerne wissen, wie ich OHNE global $connect, zu meinem gewünschten Ergebnis komme, nämlich jenem dass der Benutzer eingeloggt wird. Bei der Funktion loggingDB() funktioniert es ja auch ohne irgendwelche Vorkommnisse, da wird aber genau dasselbe Prinzip angewandt, liegt es ggf. daran dass die auth.php inkludiert wird, das kann ich mir jedoch nicht vorstellen.
LG
Rier
ich habe den Tipp von uha angenommen und interpretiert und versucht die mysqli-Verbindung in den Funktionen zu übergeben, dies schlägt jedoch massiv fehl. Angeblich ist die Variable $connect nicht definiert, obwohl diese im Main-File per connect.php inkludiert wurde.
Fehlermeldung
PHP-Code:
Notice: Undefined variable: connect in /home/.sites/23/site2801510/web/usdev/game/pages/auth.php on line 16
Catchable fatal error: Argument 1 passed to User::login() must be an instance of mysqli, null given, called in /home/.sites/23/site2801510/web/usdev/game/pages/auth.php on line 16 and defined in /home/.sites/23/site2801510/web/usdev/game/classes/User.class.php on line 41
PHP-Code:
if(isset($_POST['submit_login'])) {
// wenn der Username und das Passwort nicht leer sind, wird der User eingeloggt.
if(!empty($_POST['username']) AND !empty($_POST['password'])) {
$user = new User();
if($user->login($connect, $_POST['username'], hash("sha512", $_POST['password']))) {
// wenn der Login erfolgreich war, wird der User auf die index-Seite weitergeleitet
header("Location: index.php?site=ucp");
} else {
// Fehlermeldung falls der Login fehlerhaft war
echo '<p class="error">Login fehlerhaft.</p>';
}
} else {
// Fehlermeldung falls der Benutzername oder das Passwort fehlt
echo '<p class="error">Benutzername oder Passwort fehlt.</p>';
}
}
index.php
PHP-Code:
<?php
session_start();
require_once("inc/funcs.php");
require_once("inc/connect.php");
if(isset($_GET['site']) AND file_exists("pages/" . $_GET['site'] . ".php")) {
$site = $_GET['site'] . ".php";
} else {
$site = "index.php";
}
loggingDB($connect, $site . " aufgerufen");
?>
[..]
<?php
loadContent("auth.php");
?>
PHP-Code:
function loadContent($site) {
// Es wird geprüft ob die Seite übergeben wurde und ob die Seite überhaupt existiert
if(isset($site) AND file_exists("pages/" . $site)) {
// falls positiv dann wird der Inhalt der Seite zurückgegeben
return include("pages/" . $site);
} else {
// andernfalls erscheint eine Fehlermeldung
echo "Die angegebene Datei existiert nicht!";
return false;
}
}
User.class.php - login()
PHP-Code:
function login(mysqli $connect, $username, $password) {
$sqlUser = $connect->query("SELECT `username`, `password` FROM `users` WHERE `username` = '$username'");
if($sqlUser->num_rows > 0) {
$rstUser = $sqlUser->fetch_object();
if($rstUser->password == $password) {
$_SESSION['loggedIn'] = true;
$_SESSION['username'] = $username;
loggingDB($connect, $username . " hat sich eingeloggt");
$timestamp = time();
$connect->query("UPDATE `users` SET `lastLogin` = '$timestamp' WHERE `username` = '$username'");
return true;
}
} else {
echo "Dieser Benutzername existiert nicht!";
}
return false;
}
LG
Rier
Kommentar