Datenbankeintrag in Variable speichern.
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
code
datenbank
email
ergebnis
falsches passwort
fehler
formular
gesamten code
login
nachname
post
raten
richtige ergebnis
url
verbindung
vergleichen
vorname
zeile
-
Hey,
Ich kann problemlos Daten aus meiner Datenbank auslesen, aber sobald ich diese in eine Variable speichern will, bekomm ich einen Error. Wie macht man das? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Das würde zum Beispiel so gehen wie auf der folgenden Seite: http://de3.php.net/manual/de/function.mysql-fetch-row.php.
Es gibt noch mehrere varianten von mysql_fetch welche du auch in der Doku findest. Poste doch mal einen Code damit man das problem selbst sehen kann.
Gruß S.Brosch -
rate schrieb:
Dann poste doch bitte den Error
... aber sobald ich diese in eine Variable speichern will, bekomm ich einen Error. -
Hallo
Datenbank-Abfrage-Ergebnis entält ja meist mehrere Daten,
vorallem mit SELECT * FROM .... bekommt man alle Spalten (in Array oder Object)
hast Du sowas in der Art?
$num = 1; while($row = mysql_fetch_assoc($result)) { echo "<br />Nr: " . $num . "\n"; echo "<br />ID: " . $row['id'] ."\n"; echo "<br />Vorname: " . $row['vorname'] ."\n"; echo "<br />Nachname: " . $row['nachname'] ."\n"; echo "<br />Geschlecht: " . $row['gender'] ."\n"; echo "<br />\n"; $num++; }
also ist das Speichern in Variable mit Typ: Array vielleicht die Lösung
$db_tabelle = 'name_deiner_tabelle"; $result = "SELECT * FROM ".$db_tabelle.""; if (!$result) { die"<br />Fehler ... <br />\n" . mysql_error(); exit; } $data = array(); while($row = mysql_fetch_assoc($result)) { $data[] = $row; } // ----- Debug Ausgabe ----- print "<pre>\n"; print_r($data); print "</pre>\n";
dann ist $data ein 2-dimensionales Array,
erste Ebene die Zeilen (fortlaufende Zahl bon 0 bis n-1 Zeilen)
die Zweite Ebene assoziatives Array mit Spalten-Namen als Key
alternativ .. zweite Ebene als Object
$db_tabelle = 'name_deiner_tabelle"; $result1 = "SELECT * FROM ".$db_tabelle.""; if (!$result) { die"<br />Fehler ... <br />\n" . mysql_error(); exit; } $data = array(); while($row = mysql_fetch_object($result1)) { $data[] = $row; } // ----- Debug Ausgabe ----- print "<pre>\n"; print_r($data); print "</pre>\n";
Entscheidend ist die while-Schleife
die läuft, solange Zeilen aus dem Ergebnis ($result) vorhanden sind
und in dieser while-Schleife belegst du je Zeile ein Array-Element
was wiederum ein Array (oder Objekt) enthält aus $row
so bekommst Du alle Daten ind eine Variable (Array)
auf die Elemente im Array $data kannst Du dann bequem mit foreach() zugreifen
$num = 1; foreach($data as $item) { echo "<br />Nr: " . $num . "\n"; echo "<br />ID: " . $item['id'] ."\n"; echo "<br />Vorname: " . $item['vorname'] ."\n"; echo "<br />Nachname: " . $item['nachname'] ."\n"; echo "<br />Geschlecht: " . $item['gender'] ."\n"; echo "<br />\n"; $num++; }
bei Daten als Object dann anstatt $item['vorname'] eben so $item->vorname
usw. etc...
hier noch der Doku Vorlese-Service
mysql_fetch_row($result)
Gibt ein numerisches Array von Zeichenketten zurück, das der gelesenen Zeile entspricht oder FALSE falls keine weiteren Zeilen vorhanden sind.
mysql_fetch_object($result)
Gibt ein Objekt mit String-Eigenschaften zurück, die mit der angeforderten Zeile korrespondieren, oder FALSE wenn es keine weiteren Zeilen mehr gibt.
mysql_fetch_array($result, $result_type)
Gibt ein Array von Zeichenketten zurück, das der gelesenen Zeile entspricht oder FALSE falls keine weiteren Zeilen vorhanden sind. Der Typ des zurückgegebenen Arrays hängt davon ab, wie result_type definiert ist. Nutzen sie MYSQL_BOTH (Standard), erhalten sie ein Array mit sowohl assoziativen als auch numerischen Indice. Nutzen sie MYSQL_ASSOC erhalten sie nur assoziative Indice (wie mysql_fetch_assoc() arbeitet), mit MYSQL_NUM erhalten sie nur numerische Indice (wie mysql_fetch_row() arbeitet).
mysql_fetch_assoc($result)
Liefert ein assoziatives Array, das der geholten Zeile entspricht oder FALSE falls keine weiteren Zeilen vorhanden sind.
... siehe auch php.net MySQL Funktionen
... aber poste mal deinen Error, vielleicht ist das Problem ja doch anders gelagert ?!
ich vermite aber ganz stark, es liegt am (nicht genutzen) Array
-
software-brosch schrieb:
Das würde zum Beispiel so gehen wie auf der folgenden Seite: http://de3.php.net/manual/de/function.mysql-fetch-row.php.
Es gibt noch mehrere varianten von mysql_fetch welche du auch in der Doku findest. Poste doch mal einen Code damit man das problem selbst sehen kann.
Gruß S.Brosch
Mit dem Quellcode:
//Verbindung $EMail = $_POST["EMail"]; $Passwort = md5($_POST["Passwort"]); $result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = "$Passwort""); if (!$result) { echo 'Konnte Abfrage nicht ausführen: ' . mysql_error(); exit; } $row = mysql_fetch_row($result); echo $row[0]; echo $row[1]; }
Error:
Parse error: syntax error, unexpected T_VARIABLE in /data/multiserv/users/540111/projects/2045115/www/login.php on line 8
Zeile 8:
$result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = "$Passwort"");
Beitrag zuletzt geändert: 2.5.2012 16:28:16 von rate -
rate schrieb:
Auch klar warum?
Zeile 8:
$result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = "$Passwort"");
Dein Code müsste so aussehen:
Statt den Doppelten$result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = '$Passwort'");
einfach einfache"
verwenden (aber nur bei der SQL-Query).'
-
hackyourlife schrieb:
rate schrieb:
Auch klar warum?
Zeile 8:
$result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = "$Passwort"");
Dein Code müsste so aussehen:
Statt den Doppelten$result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = '$Passwort'");
einfach einfache"
verwenden (aber nur bei der SQL-Query).'
Danke!
Grad noch ne Frage, ich würd jetzt gern den Eintrag von der Datenbank aus Passwort mit dem Passwort aus POST vergleichen.
Das von Post steht in der Passwort Variable und das aus der Datenbank in der Passwort2
if($Passwort == $Passwort2) { echo 'Richtiges Passwort'; } else { echo 'Falsches Passwort'; }
Es gibt mir jedoch immer Falsches Passwort aus, auch wenn es stimmt, ich find nicht heraus an was es liegt.
Beitrag zuletzt geändert: 2.5.2012 17:33:28 von rate -
rate schrieb:
Das brauchst du nicht machen, da das ja die Datenbank schon für dich macht (wegen der WHERE-Bedingung), wobei ich die SQL-Query soweit anpassen würde, dass der Benutzername auch gleich mit geprüft wird...
Grad noch ne Frage, ich würd jetzt gern den Eintrag von der Datenbank aus Passwort mit dem Passwort aus POST vergleichen.
Ansonsten lass dir doch die beiden Variablen einfach mal ausgeben, das könnte dir ja schon helfen. -
hackyourlife schrieb:
rate schrieb:
Das brauchst du nicht machen, da das ja die Datenbank schon für dich macht (wegen der WHERE-Bedingung), wobei ich die SQL-Query soweit anpassen würde, dass der Benutzername auch gleich mit geprüft wird...
Grad noch ne Frage, ich würd jetzt gern den Eintrag von der Datenbank aus Passwort mit dem Passwort aus POST vergleichen.
Ansonsten lass dir doch die beiden Variablen einfach mal ausgeben, das könnte dir ja schon helfen.
Habs abgeändert, dass es nur die Email überprüft, da es die nur einmal geben kann, und wenn ich dann noch dranhänge, dass es auch das Passwort prüfen soll, kann man doch einfach per eingabe die Datenbank austricksen und man wird eingeloggt, deshalb würd ich gern das Passwort einzeln checken. -
rate schrieb:
Wie möchtest du die Datenbank austricksen?
Habs abgeändert, dass es nur die Email überprüft, da es die nur einmal geben kann, und wenn ich dann noch dranhänge, dass es auch das Passwort prüfen soll, kann man doch einfach per eingabe die Datenbank austricksen und man wird eingeloggt, deshalb würd ich gern das Passwort einzeln checken.
Du musst natürlich immer bevor du irgend einen String vom Benutzer in eine SQL-Query einbaust den filtern:
So kann die Datenbank nicht "ausgetrickst" werden, was sich übrigens SQL-Injection nennt...$passwort = mysql_real_escape_string($_POST['password']);
-
hackyourlife schrieb:
rate schrieb:
Wie möchtest du die Datenbank austricksen?
Habs abgeändert, dass es nur die Email überprüft, da es die nur einmal geben kann, und wenn ich dann noch dranhänge, dass es auch das Passwort prüfen soll, kann man doch einfach per eingabe die Datenbank austricksen und man wird eingeloggt, deshalb würd ich gern das Passwort einzeln checken.
Du musst natürlich immer bevor du irgend einen String vom Benutzer in eine SQL-Query einbaust den filtern:
So kann die Datenbank nicht "ausgetrickst" werden, was sich übrigens SQL-Injection nennt...$passwort = mysql_real_escape_string($_POST['password']);
Also
$EMail = mysql_real_escape_string($_POST['EMail']); $Passwort = mysql_real_escape_string (md5($_POST['Passwort'])); $result = mysql_query("SELECT * FROM `Users` WHERE `EMail` = '".$EMail."' AND 'Passwort' = '".$Passwort."'"); while ($row = mysql_fetch_object($result))
und damit wäre es sicher?
Bzw interessehalber, die idee von vorhin mit dem Vergleichen, weisst du warums nicht funktioniert hat?
Beitrag zuletzt geändert: 2.5.2012 17:54:22 von rate -
rate schrieb:
Schreib es einfach so, das reicht:
[...] und damit wäre es sicher?$EMail = mysql_real_escape_string($_POST['EMail']); $Passwort = mysql_real_escape_string (md5($_POST['Passwort'])); $result = mysql_query("SELECT * FROM `Users` WHERE `EMail` = '$EMail' AND 'Passwort' = '$Passwort'"); if(mysql_num_rows($result) == 1) { // Benutzer und Passwort stimmt zusammen... }
rate schrieb:
Dazu musst du den gesamten Code posten...
Bzw interessehalber, die idee von vorhin mit dem Vergleichen, weisst du warums nicht funktioniert hat? -
hackyourlife schrieb:
rate schrieb:
Schreib es einfach so, das reicht:
[...] und damit wäre es sicher?$EMail = mysql_real_escape_string($_POST['EMail']); $Passwort = mysql_real_escape_string (md5($_POST['Passwort'])); $result = mysql_query("SELECT * FROM `Users` WHERE `EMail` = '$EMail' AND 'Passwort' = '$Passwort'"); if(mysql_num_rows($result) == 1) { // Benutzer und Passwort stimmt zusammen... }
rate schrieb:
Dazu musst du den gesamten Code posten...
Bzw interessehalber, die idee von vorhin mit dem Vergleichen, weisst du warums nicht funktioniert hat?
<?php //Datenbank Verbindung $EMail = mysql_real_escape_string($_POST['EMail']); $Passwort = mysql_real_escape_string (md5($_POST['Passwort'])); $result = mysql_query("SELECT * FROM `Users` WHERE `EMail` = '".$EMail."' AND 'Passwort' = '".$Passwort."'"); $row = mysql_fetch_object($result) ?>
Und wie könnt ich dann sagen, was geschehen soll wenn das PW richtig ist, und wenn nicht? -
rate schrieb:
War das dein ursprünglicher Code? Der, bei dem du das mit dem Passwort vergleichen wolltest?
<?php //Datenbank Verbindung $EMail = mysql_real_escape_string($_POST['EMail']); $Passwort = mysql_real_escape_string (md5($_POST['Passwort'])); $result = mysql_query("SELECT * FROM `Users` WHERE `EMail` = '".$EMail."' AND 'Passwort' = '".$Passwort."'"); $row = mysql_fetch_object($result) ?>
rate schrieb:
Wenn du meinen Code so nimmst wie ich ihn gerade gepostet habe gibt es die nötige if-Verzweigung schon... die mit
Und wie könnt ich dann sagen, was geschehen soll wenn das PW richtig ist, und wenn nicht?if(mysql_num_rows($result) == 1)
-
hackyourlife schrieb:
rate schrieb:
War das dein ursprünglicher Code? Der, bei dem du das mit dem Passwort vergleichen wolltest?
<?php //Datenbank Verbindung $EMail = mysql_real_escape_string($_POST['EMail']); $Passwort = mysql_real_escape_string (md5($_POST['Passwort'])); $result = mysql_query("SELECT * FROM `Users` WHERE `EMail` = '".$EMail."' AND 'Passwort' = '".$Passwort."'"); $row = mysql_fetch_object($result) ?>
rate schrieb:
Wenn du meinen Code so nimmst wie ich ihn gerade gepostet habe gibt es die nötige if-Verzweigung schon... die mit
Und wie könnt ich dann sagen, was geschehen soll wenn das PW richtig ist, und wenn nicht?if(mysql_num_rows($result) == 1)
Oh, ich hab den Code von dir nicht gesehen, sorry, ich tests mal.
EDIT:
<?php include 'variable.php'; $EMail = mysql_real_escape_string($_POST['EMail']); $Passwort = mysql_real_escape_string (md5($_POST['Passwort'])); $result = mysql_query("SELECT * FROM `Users` WHERE `EMail` = '$EMail' AND 'Passwort' = '$Passwort'"); if(mysql_num_rows($result) == 1) { echo 'Richtiges Passwort'; } else { echo 'Falsches Passwort'; } ?>
Das wär dann der ganze Code bis jetzt, ich will fürs erste einfach mal, dass die Abfrage stimmt und er ausgibt obs richtig ist oder nicht. Aber es gibt immernoch wie vorhin immer falsches Passwort aus.
Beitrag zuletzt geändert: 2.5.2012 18:08:12 von rate -
rate schrieb:
Wenn du noch wissen willst warum das mit deinem Passwortvergleich nicht funktioniert musst du den gesamten Code davon posten.
Oh, ich hab den Code von dir nicht gesehen, sorry, ich tests mal. -
hackyourlife schrieb:
rate schrieb:
Wenn du noch wissen willst warum das mit deinem Passwortvergleich nicht funktioniert musst du den gesamten Code davon posten.
Oh, ich hab den Code von dir nicht gesehen, sorry, ich tests mal.
Das ist der ganze Code:
<?php // Verbindung $EMail = mysql_real_escape_string($_POST['EMail']); $Passwort = mysql_real_escape_string (md5($_POST['Passwort'])); $result = mysql_query("SELECT * FROM `Users` WHERE `EMail` = '$EMail' AND 'Passwort' = '$Passwort'"); if(mysql_num_rows($result) == 1) { echo 'Richtiges Passwort'; } else { echo 'Falsches Passwort'; } ?>
Und einfach noch ein HTML Formular, damit es an die Variablen übermittelt wird. Aber gibt immer Falsches Passwort aus. -
rate schrieb:
Ist in der Datenbank auch ganz sicher der MD5-Sum des Passwortes gespeichert?
Und einfach noch ein HTML Formular, damit es an die Variablen übermittelt wird. Aber gibt immer Falsches Passwort aus.
Ansonsten schreib mal folgendes am Ende:
Das sollte immer 0 ergeben wenn er "Falsches Passwort" sagt.echo(mysql_num_rows($result));
-
hackyourlife schrieb:
rate schrieb:
Ist in der Datenbank auch ganz sicher der MD5-Sum des Passwortes gespeichert?
Und einfach noch ein HTML Formular, damit es an die Variablen übermittelt wird. Aber gibt immer Falsches Passwort aus.
Ansonsten schreib mal folgendes am Ende:
Das sollte immer 0 ergeben wenn er "Falsches Passwort" sagt.echo(mysql_num_rows($result));
Ja, ich lass es auch als md5 eintragen. Und ja, mit dem Code hängt am Ende eine 0. -
rate schrieb:
Schau mal in phpMyAdmin nach was wirklich in der Datenbank steht (oder befüll sie mit Probewerten und poste das dann...).
Ja, ich lass es auch als md5 eintragen. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage