kostenloser Webspace werbefrei: lima-city


MySQL ausgabe in variable

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    tec-fantasy

    tec-fantasy hat kostenlosen Webspace.

    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!
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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...
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    tec-fantasy schrieb:
    while($row = mysql_fetch_object($ergebnis)){
    	$id = $row['ID'];
    	$indbpass = $row['PASS']
    }
    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:
    $id = $row->ID;
    oder
    $id = $row->{'ID'};


    Als sebulons
    validate()
    kannst du
    mysql_real_escape_string()
    nutzen.

    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!");
    }
  5. 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.
  6. Du kannst auch statt
    mysql_fetch_object($res);

    mysql_fetch_array($res);

    nutzen :thumb:
  7. 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
  8. Autor dieses Themas

    tec-fantasy

    tec-fantasy hat kostenlosen Webspace.

    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!
  9. 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
  10. 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.
  11. 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
    $username = $row['User'];
    wie bei einem Array

    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

    :=)
  12. Autor dieses Themas

    tec-fantasy

    tec-fantasy hat kostenlosen Webspace.

    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}";
  13. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!