SELECT ... WHERE

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • SELECT ... WHERE

    Hi. Kann mir bitte noch mal jemand kurz helfen?
    Ich möchte, dass zwei spalten ausgegeben werden, aber nur die vom jeweiligen, gerade angemeldeten User.

    Der Code bis jetzt:

    Quellcode

    1. [...]
    2. <?php
    3. $ergebnis = mysql_query("SELECT id, username, firmenname FROM fabrik WHERE !!!!");
    4. while ($row = mysql_fetch_array($ergebnis))
    5. {
    6. echo "<u>Willkommen</u>, ";
    7. echo $row['username'];
    8. echo "<br />\n";
    9. echo "<u>derzeitiger Firmenname: </u> ";
    10. echo $row['firmenname'];
    11. }
    12. ?>
    13. [...]
    Alles anzeigen


    Ich brauch noch das statt diesen !!!!. Irgenwas mit user_id muss das sein, aber find nicht das richtige. Dann muss ich irgendwie noch eine ID definieren, oder? Kann mir da bitte jemand zur Hand gehen?

    Grüße
    Nach langer Zeit wieder ein bisschen als Programmierer tätig
  • So:

    Quellcode

    1. <?php
    2. $verbindung = mysql_connect("localhost", "rezensionen" , "***")
    3. or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
    4. mysql_select_db("rezensionen") or die ("Datenbank konnte nicht ausgewählt werden");
    5. $username = $_POST["username"];
    6. $passwort = $_POST["password"];
    7. $abfrage = "SELECT username, passwort FROM fabrik WHERE username LIKE '$username' LIMIT 1";
    8. $ergebnis = mysql_query($abfrage);
    9. $row = mysql_fetch_object($ergebnis);
    10. if($row->passwort == $passwort)
    11. {
    12. $_SESSION["username"] = $username;
    13. echo "Willkommen, $username. <br> <a href=\"startseite.php\">Weiter zu deinem Account</a>";
    14. }
    15. else
    16. {
    17. echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.php\">Login</a>";
    18. }
    19. ?>
    Alles anzeigen
    Nach langer Zeit wieder ein bisschen als Programmierer tätig
  • Ok, da der Username in der Spalte username steht, müsste das doch so aussehen, oder?

    Quellcode

    1. $ergebnis = mysql_query("SELECT id, username, firmenname FROM fabrik WHERE username = "$_SESSION['username']"");


    Problem an der Sache:
    Parse error: syntax error, unexpected T_VARIABLE in /usr/export/www/vhosts/funnetwork/hosting/rezensionen/php/startseite.php on line 40
    (eben diese Zeile)
    Nach langer Zeit wieder ein bisschen als Programmierer tätig
  • Ich zieh der Literatur schon die Ohren lang, aber einmal muss ich euch noch damit nerven. Ich bin so knapp davor, den ganzen Bettel hinzuschmeißen.

    Die Login-Datei:

    Quellcode

    1. <html>
    2. <head>
    3. <title>...</title>
    4. </head>
    5. <body background="grafiken/bg2.gif" link="#800000" alink="#800000" vlink="#800000">
    6. <?php
    7. session_start();
    8. ?>
    9. <br /><br /><br /><br /><br />
    10. <div align="center">
    11. <table bgcolor="#888888" border="1">
    12. <tr height="200"><td width="300">
    13. <center>
    14. <?php
    15. $verbindung = mysql_connect("localhost", "rezensionen" , "***")
    16. or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
    17. mysql_select_db("rezensionen") or die ("Datenbank konnte nicht ausgewählt werden");
    18. $username = $_POST["username"];
    19. $passwort = $_POST["password"];
    20. $abfrage = "SELECT username, passwort FROM fabrik WHERE username LIKE '$username' LIMIT 1";
    21. $ergebnis = mysql_query($abfrage);
    22. $row = mysql_fetch_object($ergebnis);
    23. if($row->passwort == $passwort)
    24. {
    25. $_SESSION["username"] = $username;
    26. echo "Willkommen, $username. <br> <a href=\"startseite.php\">Weiter zu deinem Account</a>";
    27. }
    28. else
    29. {
    30. echo "Benutzername und/oder Passwort waren falsch. <a href=\"login.php\">Login</a>";
    31. }
    32. ?>
    33. </center>
    34. </td></tr>
    35. </table>
    36. </div>
    37. </body>
    38. </html>
    Alles anzeigen


    Die benutzereigene Startseite:

    Quellcode

    1. <html>
    2. <head>
    3. <title>...</title>
    4. </head>
    5. <body background="grafiken/bg2.gif" link="#800000" alink="#800000" vlink="#800000">
    6. <div style="position:fixed; top:5px; left:10px; z-index:2;">
    7. <img src="grafiken/logo.jpg" border="0">
    8. </div>
    9. <div style="position:fixed; top:5px; left:200px; z-index:2;">
    10. <img src="grafiken/banner3.jpg" border="0">
    11. </div>
    12. <style type="text/css">
    13. #links { position:fixed; top:160px; left:10px; width:170px; height:300px; padding:4px; z-index:2;}
    14. #willkommen { position:fixed; top:160px; left:200px; width:170px; padding:4px; z-index:2;}
    15. </style>
    16. <div id="links" style="background:#777777; border:solid 3px #000000;"><?php include ("links.html"); ?></div>
    17. <div id="willkommen" style="background:#777777; border:solid 3px #000000;">
    18. <?php
    19. session_start();
    20. $verbindung = mysql_connect("localhost", "rezensionen" , "***")
    21. or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
    22. mysql_select_db("rezensionen") or die ("Datenbank konnte nicht ausgewählt werden");
    23. $ergebnis = mysql_query("SELECT id, username, firmenname FROM fabrik WHERE username = $username");
    24. while ($row = mysql_fetch_array($ergebnis))
    25. {
    26. echo "<u>Willkommen</u>, ";
    27. echo $row['username'];
    28. echo "<br />\n";
    29. echo "<u>derzeitiger Firmenname: </u> ";
    30. echo $row['firmenname'];
    31. }
    32. ?>
    33. </div>
    34. </body>
    35. </html>
    Alles anzeigen


    Im Login wurde doch ganz klar $username = $_SESSION['username'] definiert, und dank session_start(); in die benutzerdefinierte Seite übernommen, oder? Warum funktioniert dann die WHERE nicht? Da muss doch stehen:
    ... WHERE username = $username"); oder?
    Die Spalte im PHPMyAdmin, wo der Username gespeichert wird, heißt schlicht und eifach "Username".
    Soda, und das gnaze passt nicht. Kann mit da BITTE!!! jemand mit dem restlichen Code helfen? Mich macht das fix und fertig...

    DANKE SCHON MAL IM VORRAUS!!

    Grüße,
    Waldi
    Nach langer Zeit wieder ein bisschen als Programmierer tätig
  • Wenn Fehlermeldungen auftauchen, solltest du diese nicht ignorieren.
    Ich bin mir sicher, dass eine Fehlermeldung in der Art von "headers already sent" erscheint.

    Sobald du eine Ausgabe an den Browser startest (entweder mit echo oder indem du Text außerhalb des php codes schreibst) wird ein Header gesendet.
    Danach darfst du keine session mehr starten.

    Du musst also in der allerersten zeile die session starten

    Quellcode

    1. <?php session_start(); ?>
    2. <html>
    3. ....


    Sessions weist du mit $_SESSION['var'] = $test zu und liest du auch wieder mit $_SESSION['var'] aus. $test als Variable bleibt nicht erhalten.

    Datei1:

    Quellcode

    1. <?php
    2. session_start();
    3. $_SESSION["username"] = 'peter';
    4. ?>


    Datei2:

    Quellcode

    1. <?php
    2. session_start();
    3. echo "SELECT id, username, firmenname FROM fabrik WHERE username = '$_SESSION[username]'";
    4. ?>
  • Noch ein paar Tips:

    1) Speicher nicht den Namen des Users in der Session. Der ist ggf. nicht eindeutig. Nimm stattdessen eine ID. In der Tabelle fabrik kannst du eine Spalte mit dem Namen id anlegen, die die Eigenschaft auto_increment hat.

    2) Versuche zu verstehen was SQL-Injection ist. Google mal nach diesem Begriff. Hilfreiche Artikel die sich allerdings auf ASP beziehen findest du unter [1] & [2].

    Dann schau dir nochmal deinen Code an:

    "Waldi" schrieb:

    Quellcode

    1. $username = $_POST["username"];
    2. ...
    3. $abfrage = "
    4. SELECT username, passwort
    5. FROM fabrik
    6. WHERE username LIKE '$username'
    7. LIMIT 1";


    3) Warum limitierst du das Select (s.o.) auf einen Datensatz. Wenn zwei User deinen Anforderungen entsprechen wird ggf der falsche Datensatz benutzt.

    4) Du prüfst nicht auf die Gültigkeit des Paßwortes. Das heißt man kann sich nur mit dem Benutzernamen und einem beliebigen Paßwort anmelden?

    [1] aspheute.com/artikel/20011030.htm
    [2] aspheute.com/artikel/20011031.htm
  • Haha, es funkt. Endlos geil!!! DANKE!!! 8)

    "Marcus Gnaß" schrieb:


    1) Speicher nicht den Namen des Users in der Session. Der ist ggf. nicht eindeutig. Nimm stattdessen eine ID. In der Tabelle fabrik kannst du eine Spalte mit dem Namen id anlegen, die die Eigenschaft auto_increment hat.


    Hab ich übrigens. Gibts da dann einen Unterschied zu usernamen?
    Nach langer Zeit wieder ein bisschen als Programmierer tätig
  • Solange du deine usernamen bei der registrierung auf gleichheit prüfst, nicht.

    Wenn du das aber nicht prüfst, kann es sein, dass es einen usernamen mehrmals gibt.

    Das Arbeiten mit IDs ist trotzdem sinnvoller. Grund: Meist wird auf eine Spalte in der Datenbank ein Index gelegt (oft die ID also eine Zahl). Das Datenbanksystem (also bei dir MySQL) legt sich intern eine Indextabelle an, um die Einträge leichter zu finden und die Performance zu steigern. Wird nun eine zahl geordnet, geht das schneller, also einen String (Zeichenkette wie z.B. deinen usernamen) zu ordnen.
    Ergebnis daraus ist, dass die Datenabfrage unter Umständen schneller geht. Bei kleinen Datenbanken meist nicht zu merken, trotzdem sollte man im Vorhinein daran denken.

    cya
  • "Marcus Gnaß" schrieb:

    4) Du prüfst nicht auf die Gültigkeit des Paßwortes. Das heißt man kann sich nur mit dem Benutzernamen und einem beliebigen Paßwort anmelden?

    Blödsinn! Ich hab folgende Zeile überlesen:

    Quellcode

    1. if($row->passwort == $passwort)


    Aber wo ist das Problem hinter:

    Quellcode

    1. $_SESSION["username"] = $username;

    noch dies zu schreiben?

    Quellcode

    1. $_SESSION["id"] = $row->id;