MySQL ausgabe in variable
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
aussehen
befehl
behandeln
code
datenbank
datum
eingegebene passwort
ergebnis
erzeugen
klartext
kombination
login
mache
nutzen
objekt
re
url
vergleichen
wachsen
-
Und wieder brauche ich hilfe mit MySQL...
Ich ref="/tag/mache">mache gerade eine Login-Seite und möchte jetzt das eingegebene Passwort mit dem in der Datenbank vergleichen:
$name = $_POST['User']; $pass = $_POST['PW']; $dbtable = "SELECT * FROM user WHERE NAME = '$name'"; $ergebnis = mysql_query($dbtable); while($row = mysql_fetch_object($ergebnis)){ $id = $row['ID']; $indbpass = $row['PASS'] } echo "ID: ".$id; echo "<br>"; echo "Eingegebener Name: ".$name; echo "<br>"; if($pass == $indbpass){ echo "Eingeloggt!"; } else { echo "Falsches Passwort!"; }
Statt dem
$id = $row['ID']; $indbpass = $row['PASS']
habe ich auch schon das versucht:
$id = "$row->ID"; $indbpass = "$row->PASS";
Aber die Variablen
$id
und
$indbpass
bleiben immer leer! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
so macht man das nicht...
versuchs mal mit so einem Statement:
$name = validate($_POST['User']); $pass = validate($_POST['PW']); $dbtable = "SELECT `ID` FROM `user` WHERE `NAME` = \"".$name."\" AND `PASS` = \"".$pass."\";";
uund dann schaust du, ob du eine ID bekommst... dann lässt du neutral ausgeben, dass die kOmbination aus user und PW nicht existiert.
1. prüfe ob dein Post dir die beiden erwarteten Variablen liefert (print_r($_POST))
2. prüfe, ob deine Datenbankabfrage was liefert
3. name sollte man nie verwenden als Spaltenname in dbs, das ist ein schlüsselwort...
4. ist == wirklich ein zulässiger vergleichoperator auf Strings in PHP?
und eine funktion validate musst du dir schreiben, damit keiner sql-Befehle bei dir reinhämmern kann und deine seite kompromittieren... sinst schreibt dir einer was rein wie "a; drop schema DATABASE();" und deine DB ist blank...
Escape-Sequenzen nciht vergessen... -
tec-fantasy schrieb:
Du holst ein Objekt und greifst darauf zu, als ob es ein Array wäre? Das funktioniert nicht. Wenn, dann müsste es so aussehen:
while($row = mysql_fetch_object($ergebnis)){ $id = $row['ID']; $indbpass = $row['PASS'] }
$id = $row->ID;
oder$id = $row->{'ID'};
Als sebulons
kannst duvalidate()
nutzen.mysql_real_escape_string()
Als Code würde das dann ca so aussehen:$name = mysql_real_escape_string($_POST['User']); $pass = mysql_real_escape_string($_POST['PW']); $query = "SELECT `ID` FROM `user` WHERE `NAME` = '$name' AND `PASS` = '$pass'"; $result = mysql_query($query); $row = mysql_fetch_object($result); if($row) { echo("OK (User ID: {$row->ID})"); } else { echo("Name / Passwort falsch!"); }
-
tec-fantasy schrieb:
Ich mache gerade eine Login-Seite und möchte jetzt das eingegebene Passwort mit dem in der Datenbank vergleichen:
Dazu eine kleine Randbemerkung, die unabhängig von der eigentlichen Fragestellung ist.
Du speicherst das Passwort im Klartext. Das ist, aus Sicherheitsaspekten, nicht empfehlenswert.
Besser wäre es, wenn Du nur einen Hash des Passwortes in der DB ablegen würdest, beim Login einen Hash des eingegebenen PWs erzeugen und mit dem in der DB hinterlegten Hash vergleichen würdest.
Das wäre schon ein erhebliches Sicherheitsplus für deine Applikation. -
mysql fliegt eh bald, da sehr, sehr veraltet. Gucke dir _zusätzlich_ doch mal mysqli oder PDO an.
Edit: Hash speichern ist zumindest schon mal nicht schlecht. Die Hash-Datenbanken wachsen aber recht gut weiter.
Besser: Salted Hash.
Beitrag zuletzt geändert: 28.11.2014 12:19:18 von muellerlukas -
Ich weiß nicht wirklich viel über MySQL und habe nur wenig verstanden...
Am meisten verstehe ich immer wenn mir jemand meinen Code so verändert das er richtig ist, dann würde ich mir das auch nochmal genau angucken bis ich alles verstehe, aber ich versuche es jetzt einfach mal so! :)
Und was MySQLi ist weiß ich auch nicht! -
tec-fantasy schrieb:
Und was MySQLi ist weiß ich auch nicht!
MySQLi ist nichts anderes als die verbesserte Version von den mysql_* - Befehlen, die, wie bereits erwähnt, ab PHP 5.5 als veraltet gelten und später entfernt werden sollen.
> MySQLi kann also genauso wie MySQL mit der Datenbank "MySQL" verwendet werden, es sind nur verbesserte Befehle (sicherer vor SQL-Injections und es wird auch objektorientierte Programmierung unterstützt).
> PDO ist ähnlich zu der objektorientierten Variante von MySQLi, nur werden neben der Datenbank "MySQL" auch andere Datenbanken unterstützt - also übergreifender
Beitrag zuletzt geändert: 28.11.2014 20:33:51 von webfreclan -
Zusatz nochmal zu PDO
Richtig ist, dass du dich je nach installierem Addon auch mit SQLite, MSSQL, PostreSQL etc. verbinden kanst.
Du müsstest aber immer noch selbst auf den Code achten. MSSQL kann z.B. kein "LIMIT". Für große Projekte kannst z.B. Propel benutzen. Aber in dem Fall auf jeden Fall Overkill. -
genaz einfach ....
wenn Du mysql_fetch_object(() verwendest ....
while($row = mysql_fetch_[b]object[/b]($ergebnis)){
..... dann muss Du die Daten auch als object behandeln, nicht als Array
bei Objekt mit -> darauf zugreifen:$username = $row->User;
... und nicht so
wie bei einem Array$username = $row['User'];
Du kannst Dir aus den Objekt-Daten dann wieder ein Array bauen:
$query = "SELECT `ID` FROM `user` WHERE `NAME` = '$name' AND `PASS` = '$pass'"; $ergebnis= mysql_query($query); $resdata = array(); if ($ergebnis) { while($row = mysql_fetch_object($ergebnis)){ $resdata['ID'] = $resdata->ID; $resdata['PASS'] = $resdata->PASS; $resdata['username'] = $resdata->NAME; } } // --------------------------------- print "<pre style='background:#DEDEDE;'>\n"; print_r($resdata); print "</pre>\n"; // ---------------------------------
aber Du kannst auch gleich in der while() Schleife die Objekt Inhalte ausgeben
while($row = mysql_fetch_object($ergebnis)){ print '<br /> User-ID: ' . $resdata->ID . "\n"; print '<br /> User-NAme: ' . $resdata->NAME. "\n"; // ----- usw. ----- }
aber beachte den Unterschied, bei Array so $ata['key'] und bei Objekt so $data->$key
:=)
-
Danke smartweb, aber ich habe es schon mit diesem code geschafft:
$query = "SELECT `Spalte` FROM `Tabelle` WHERE `ABC` = 'XYZ'"; $result = mysql_query($query); $row = mysql_fetch_object($result); $abc = "{$row->xyz}";
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage