Datenbank füllt Variable nicht
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
abfrage
ausgabe
ausgeben
code
datenbank
datum
fehler
feld
formular
image
index
login
person
post
richtig code
schwerwiegender fehler
syntax
url
verbindung
zeichen
-
Hallo zusammen,
ich finde zur Zeit einfach meinen Fehler nicht. Ich will, dass ein User ein Benutzername und Passwort eingeben kann. Dann soll überprüft werden, ob das Passwort in der Datenbank zum jeweiligen Benutzer passt. Das ganze dann mit ner If-Abfrage. So sieht mein Code aus:
include ('config.php'); # In der config sind alle Variablen benannt (host,username,passwort,datenbank) $link = mysqli_connect("$datenbank_host", "$datenbank_username", "$datenbank_passwort"); if (!$link) { die("Es ist ein schwerwiegender Fehler bei der Verbindung mit der Datenbank aufgetreten. Fehlerbeschreibung: " . mysqli_error()); } mysqli_select_db($datenbank_datenbank, $link); # Zuerst wird kontrolliert, ob der User beide Felder ausgefüllt hat oder nicht. if ($username == "" || $password == "") { # ist das nicht der Fall, wird folgendes festgelegt: $ausfuellen = "false"; $re = "0"; $re_url = "index.php?ausfuellen=false"; } else { #ist es doch der Fall, passiert folgendes: $sql = "SELECT * FROM fins_user WHERE nickname= '".$username."'"; $result = mysqli_query($sql, $link); $daten = mysqli_fetch_array($result, MYSQL_ASSOC); print_r($daten); $user_passwort = $daten["passwort"]; if ($password == $user_passwort) { #hier soll kontrolliert werden, ob Passwort und Benutzer zusammen passen $ausfuellen = "true"; $re = "0"; $re_url = "main.php"; } else { $ausfuellen = "false"; $re = "3"; $re_url = "index.php?ausfuellen=$user_passwort"; } }
Aktuell ist es immer so, dass die Variable $user_passwort leer ist (trotz Datenbankeintrag und richtigem Nickname)
Vielen Dank schon einmal für eure Hilfe.
Beitrag zuletzt geändert: 14.2.2015 20:11:01 von mpsftp -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
hallo mpsftp ,
überprüfe doch mal ob du vielleicht deine variablennamen fürs passwort unterschiedlich schreibst (einmal mit d und einmal mit t am ende?)
ansonsten wäre noch anzumerken das man (wenn es sich um passwörter von anderen personen handelt) diese nicht direkt in der datenbank speichert sondern lieber nur den md5-hash (und diesen dann vergleicht) - schließlich muss man ja nicht alles wissen...
lg hechma -
Alles durchsucht und keinen Fehler gefunden.
Zu der Verschlüsselung: Keine Sorge. Das Passwort dient nur dazu, dass ich mich und einige Personen meiner Familie auf meine Webseite zu greifen können. -
Hi,
lass Dir doch mal eventuelle Fehler ausgeben, falls noch nicht getan.
Ich habe so schon oft meine kleinen Tippfehler gefunden.
Nach Deinem
einfach mal folgende Zeile ausführen.$result
echo $mysqli->errno.'-'.$mysqli->error;
LG Marco
-
Bis auf den "-" zeigt er mir leider nichts an.
-
mhh ok, das mal nur ein Griff ins blaue, Du gibst mit print_r
aus, dabei wird der Arrayzeiger auf das letzte Element gesetzt. Nimm das doch mal raus oder setze ein$daten
, dadurch wird der Zeiger wieder an den Anfang gesetzt.reset()
Bekommst Du denn einen Namen aus der DB zurück oder ist der auch leer?
Also wenn Du Dir wie das Passwort auch mal den Namen ausgiebst.
$user_name = $daten["wieAuchImmerDieSpalteHeisstBeiDir"];
-
Leider auch kein Erfolg.
-
Ok,
ist das der vollständige Code? Ich vermissen dort noch die Variable aus dem Formular, die muss übernommen werden und im Normalfall abgesichert werden.
Ich weiß ja nicht wie Du die Daten übermittelst, empfehlen würde ich POST. Setze die Zeile vor Deine Abfrage ob username und PW vorhanden sind.
$username = $_POST[username]; $password = $_POST[password ]; # Zuerst wird kontrolliert, ob der User beide Felder ausgefüllt hat oder nicht. if ($username == "" || $password == "") {
Das dann einfach mal ausgeben und schauen ob etwas ankommt, wenn der Code nicht Vollständig ist solltest Du den Rest noch posten.
LG
Tante EDIT:
ich sehe schon, Du nimmst POST, also die POST Variante nehmen.
Beitrag zuletzt geändert: 15.2.2015 11:36:37 von aff3m1tw4ff3 -
Ok. Hier nochmal die vollständige Datei:
<?php include ('includes/functions.php'); //KONTROLLE, OB FELDER AUSGEFÜLLT $username = $_POST['username']; $password = $_POST['password']; if ($username == "" || $password == "") { $ausfuellen = "false"; $re = "0"; $re_url = "index.php?ausfuellen=false"; } else { $sql = "SELECT * FROM fins_user WHERE nickname= '".$username."'"; $result = mysqli_query($sql, $link); $daten = mysqli_fetch_array($result, MYSQL_ASSOC); $user_passwort = $daten["passwort"]; $user_name = $daten["nickname"]; if ($password == $user_passwort) { $ausfuellen = "true"; $re = "0"; $re_url = "main.php"; } else { $ausfuellen = "false"; $re = "3"; $re_url = "index.php?ausfuellen=$username&$password"; } } $temp = "login_body.html"; include ($template_loader); //SESSION_VAR SETZEN MIT IF_ABFRAGE ?>
functions.php:
<?php // SESSION_STARTEN: session_start(); $_SESSION["logged"] = 0; // DATENBANK VERBINDUNG include ('config.php'); $link = mysqli_connect("$datenbank_host", "$datenbank_username", "$datenbank_passwort"); if (!$link) { die("Es ist ein schwerwiegender Fehler bei der Verbindung mit der Datenbank aufgetreten. Fehlerbeschreibung: " . mysqli_error()); } mysqli_select_db($datenbank_datenbank, $link); //Datenbank if($_SESSION["logged"] != "true") { $allow_storno = "0"; $allow_acp = "0"; $allow_add = "0"; $allow_bill = "0"; $allow_inventur = "0"; $allow_copy = "0"; $allow_summe = "0"; $login = "0"; } else { //DB ABFRAGEN } // Vergabe der globalen Variablen $template_loader = "includes/templates.php"; $logo1 = "images/logo1.png"; $logo2 = "images/logo2.png"; $soft_name = "FinS"; ?>
Die Daten aus dem Login-Formular werden richtig übergeben (getestet).
Gruß,
mps -
Versuch doch die Abfrage einfach mal so:
$sql = $mysqli->query("SELECT * FROM `fins_user` WHERE nickname='$username'"); $result = $sql ->fetch_object(); echo $link->errno.'-'.$link->error; // (edit) das sollte objektorientiert dann auch was ausgeben $user_passwort = $result->passwort; $user_name = $result->nickname;
Zwar für den Fehler nicht verantwortlich, trotzdem ungünstig, Du solltest Deinen Sessionstart IMMER als erstes machen. Keine anderen Zeichen davor.
Ansonsten fllt mir da jetzt so auch nichts zu ein, bin Unterwegs und kann da auch nicht mal schnell
testen leider.
LG
Tante Edit:
Gerade erst gesehen, das was Du da machst ist prozedurale Syntax , meins ist objektorientierte Syntax, dazu müsstest Du Deine Verbindung noch anpassen.
$link = new mysqli('localhost', 'user', 'pw', 'db name'); $link -> query ('BEGIN'); if (mysqli_connect_errno()) { printf("Connect failed: %s\n", mysqli_connect_error()); }
Ich mache das immer objektorientiert, bei prozeduraler kann ich dann auch nicht wirklich weiterhelfen, da sehe ich die Fehler auch nicht.
Beitrag zuletzt geändert: 15.2.2015 21:41:02 von aff3m1tw4ff3 -
An zwei Stellen übergibst du die Parameter in der falschen Reihenfolge. Die Datenbankverbindung kommt immer zuerst!
mpsftp schrieb:
Richtig:
$result = mysqli_query($sql, $link);
$result = mysqli_query($link, $sql);
mpsftp schrieb:
Richtig:
mysqli_select_db($datenbank_datenbank, $link);
mysqli_select_db($link, $datenbank_datenbank);
aff3m1tw4ff3 schrieb:
Wo hast du denn eine Ausgabe vor session_start() gesehen? Php-Kommentare stören hier jedenfalls nicht. Wichtig ist, dass vor dem Start-Tag <?php keine Zeichen stehen.
Zwar für den Fehler nicht verantwortlich, trotzdem ungünstig, Du solltest Deinen Sessionstart IMMER als erstes machen. Keine anderen Zeichen davor. -
Kenne es so, das vor session_start() keine Ausgabe oder Leerzeichen sein dürfen. Ich habe das mit den Leerzeichen auch auf den Code interpretiert, nicht nur auf die Ausgabe selber. Lasse mich da gern eines Besseren belehren. Gerade wenn man sich das alles nur aus Büchern, Google und Co holt versteht man da schnell was miss.
-
@fuerderer: Danke. Jetzt gehts.
@aff3m1tw4ff3: Dir natürlich auch vielen Dank für deine Hilfe! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage