kostenloser Webspace werbefrei: lima-city


Datenbankeintrag in Variable speichern.

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

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

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

  3. s*************h

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

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    rate schrieb:
    ... aber sobald ich diese in eine Variable speichern will, bekomm ich einen Error.
    Dann poste doch bitte den Error
  5. 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

  6. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

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

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    rate schrieb:
    Zeile 8:
    $result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = "$Passwort"");
    Auch klar warum?
    Dein Code müsste so aussehen:
    $result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = '$Passwort'");
    Statt den Doppelten
    "
    einfach einfache
    '
    verwenden (aber nur bei der SQL-Query).
  8. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    hackyourlife schrieb:
    rate schrieb:
    Zeile 8:
    $result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = "$Passwort"");
    Auch klar warum?
    Dein Code müsste so aussehen:
    $result = mysql_query("SELECT Passwort,EMail FROM Users WHERE Passwort = '$Passwort'");
    Statt den Doppelten
    "
    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
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    rate schrieb:
    Grad noch ne Frage, ich würd jetzt gern den Eintrag von der Datenbank aus Passwort mit dem Passwort aus POST vergleichen.
    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...

    Ansonsten lass dir doch die beiden Variablen einfach mal ausgeben, das könnte dir ja schon helfen.
  10. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    hackyourlife schrieb:
    rate schrieb:
    Grad noch ne Frage, ich würd jetzt gern den Eintrag von der Datenbank aus Passwort mit dem Passwort aus POST vergleichen.
    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...

    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.
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    rate schrieb:
    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.
    Wie möchtest du die Datenbank austricksen?

    Du musst natürlich immer bevor du irgend einen String vom Benutzer in eine SQL-Query einbaust den filtern:
    $passwort = mysql_real_escape_string($_POST['password']);
    So kann die Datenbank nicht "ausgetrickst" werden, was sich übrigens SQL-Injection nennt...
  12. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    hackyourlife schrieb:
    rate schrieb:
    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.
    Wie möchtest du die Datenbank austricksen?

    Du musst natürlich immer bevor du irgend einen String vom Benutzer in eine SQL-Query einbaust den filtern:
    $passwort = mysql_real_escape_string($_POST['password']);
    So kann die Datenbank nicht "ausgetrickst" werden, was sich übrigens SQL-Injection nennt...



    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
  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    rate schrieb:
    [...] und damit wäre es sicher?
    Schreib es einfach so, das reicht:
    $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:
    Bzw interessehalber, die idee von vorhin mit dem Vergleichen, weisst du warums nicht funktioniert hat?
    Dazu musst du den gesamten Code posten...
  14. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    hackyourlife schrieb:
    rate schrieb:
    [...] und damit wäre es sicher?
    Schreib es einfach so, das reicht:
    $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:
    Bzw interessehalber, die idee von vorhin mit dem Vergleichen, weisst du warums nicht funktioniert hat?
    Dazu musst du den gesamten Code posten...



    <?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?
  15. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    rate schrieb:
    <?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)
    
    
    ?>
    War das dein ursprünglicher Code? Der, bei dem du das mit dem Passwort vergleichen wolltest?

    rate schrieb:
    Und wie könnt ich dann sagen, was geschehen soll wenn das PW richtig ist, und wenn nicht?
    Wenn du meinen Code so nimmst wie ich ihn gerade gepostet habe gibt es die nötige if-Verzweigung schon... die mit
    if(mysql_num_rows($result) == 1)
  16. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    hackyourlife schrieb:
    rate schrieb:
    <?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)
    
    
    ?>
    War das dein ursprünglicher Code? Der, bei dem du das mit dem Passwort vergleichen wolltest?

    rate schrieb:
    Und wie könnt ich dann sagen, was geschehen soll wenn das PW richtig ist, und wenn nicht?
    Wenn du meinen Code so nimmst wie ich ihn gerade gepostet habe gibt es die nötige if-Verzweigung schon... die mit
    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
  17. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    rate schrieb:
    Oh, ich hab den Code von dir nicht gesehen, sorry, ich tests mal.
    Wenn du noch wissen willst warum das mit deinem Passwortvergleich nicht funktioniert musst du den gesamten Code davon posten.
  18. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    hackyourlife schrieb:
    rate schrieb:
    Oh, ich hab den Code von dir nicht gesehen, sorry, ich tests mal.
    Wenn du noch wissen willst warum das mit deinem Passwortvergleich nicht funktioniert musst du den gesamten Code davon posten.




    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.
  19. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    rate schrieb:
    Und einfach noch ein HTML Formular, damit es an die Variablen übermittelt wird. Aber gibt immer Falsches Passwort aus.
    Ist in der Datenbank auch ganz sicher der MD5-Sum des Passwortes gespeichert?

    Ansonsten schreib mal folgendes am Ende:
    echo(mysql_num_rows($result));
    Das sollte immer 0 ergeben wenn er "Falsches Passwort" sagt.
  20. Autor dieses Themas

    rate

    rate hat kostenlosen Webspace.

    hackyourlife schrieb:
    rate schrieb:
    Und einfach noch ein HTML Formular, damit es an die Variablen übermittelt wird. Aber gibt immer Falsches Passwort aus.
    Ist in der Datenbank auch ganz sicher der MD5-Sum des Passwortes gespeichert?

    Ansonsten schreib mal folgendes am Ende:
    echo(mysql_num_rows($result));
    Das sollte immer 0 ergeben wenn er "Falsches Passwort" sagt.


    Ja, ich lass es auch als md5 eintragen. Und ja, mit dem Code hängt am Ende eine 0.
  21. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    rate schrieb:
    Ja, ich lass es auch als md5 eintragen.
    Schau mal in phpMyAdmin nach was wirklich in der Datenbank steht (oder befüll sie mit Probewerten und poste das dann...).
  22. 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!