Probleme mit While-Schleife

  • Hi. ich habe ein Problem mit folgender Schleife:

    [php:1:4a6e8aa4a8]<?php
    while($row=mysql_fetch_array($result)) {
    if ($row['benutzername']==$name and $row['pw']==$pass) {
    $logedin = TRUE;
    session_register("logedin");
    header("refresh:2;url=http://ceserver/tgerhardt/pw-bereich/start.php?name=$name");
    echo "Login erfolgreich!
    Sie werden in wenigen Sekunden weitergeleitet.";
    echo "


    Sollten Sie nicht weitergeleitet werden, klicken Sie bitte ";
    echo "<a href=\"start.php\">hier</a> um zur Startseite zu gelangen.";
    }
    }
    ?>[/php:1:4a6e8aa4a8]

    ich hoffe das wird jetzt richtig angezeigt :?

    Das Problem ist einfach, dass die Schleife nur einmal durchzulaufen scheint. Frage ich den ersten User ab (admin) funzt alles. der Zweite wird aber nicht mehr erkannt. Wer kann helfen.

    Achtung: Ich bin echt ein blutiger Anfänger. Nicht wundern wenn Ihr denkt das das eigentlich doch sooo einfach ist ;)

    Wäre nett wenn mir wer helfen könnte.

    Slash

  • Ich würde den Namen und das Passwort gleich bei der SQL-Abfrage prüfen:

    Code
    select * from tabelle where name='$name' and pw='$pass'

    dann bekommst du nur einen Datensatz.

    Dein Ansatz ist sehr ungünstig, weil das immer langsamer wird, je mehr User du hast ;)

    Gruß Marian

  • Das ging ja schnell ;)
    Ja die sache ist die dass ich einen Passwortgeschützten Bereich einrichten möchte. Nun soll erstmal überprüft werden ob die Eingaben irgendeinem Datensatz entsprechen also korrekt sind. Daher soll er schon mehr als einen überprüfen.

    Tjoa und wenn die Datenbank dann größer wird (also mehr User) wirds halt langsamer. Erstmal soll es auch einfach nur funktionieren. Feintuning kommt später wenn ich vor allen Dingen mehr kann ;)

    Also das Problem war wie gesagt dass nur der erste Datensatz in der Tabelle ausgegeben wird. Und das verstehe ich nicht da die Syntax glaube ich richtig ist.

    Aber danke schonmal für den Hinweis. Den werde ich wohl angehen wenn die Sache an sich läuft.

  • zum script: ja das wäre gut. ich hab zwar nicht vor gleich alles zu verwerfen aber es wäre ja gut mal zu vergleichen.

    name LIKE '%$name%'.... goil. darauf muss man erstmal kommen. danke!

  • mhm geht leider nicht. die zeile sieht jetzt so aus:

    $query = "select * from user WHERE benutzername LIKE ".$name."";

    fehlermeldung:
    Anfrage fehlgeschlagen: Unknown column 'admin' in 'where clause'

  • da hast du dich veranführungsstricht :P

    [php:1:c9863be7d9]$query = "select * from user WHERE benutzername LIKE ".$name."";[/php:1:c9863be7d9]

    So wärs korrekt:

    [php:1:c9863be7d9]$query = "select * from user WHERE benutzername LIKE '".$name."'";[/php:1:c9863be7d9]

    oder so:

    [php:1:c9863be7d9]$query = "select * from user WHERE benutzername LIKE \"".$name."\"";[/php:1:c9863be7d9]

    Sonst würdest du mit dem SQL Query alle datensätze bekommen bei denen der inhalt des feldes "benutzername" LIKE denen des feldes "{$name}" währe ;)

  • ODER:

    am einfachsten:

    Code
    $query = "SELECT * FROM user WHERE benutzername LIKE '$name'";

    am besten ist es mit:

    Code
    $query = "SELECT * FROM `user` WHERE `benutzername` LIKE '".$name."'";;
  • OK Danke! Ihr habt mir super geholfen. Aber eine Frage hätt ich ja noch (ist das nicht immer so ;-))

    mit dieser Zeile:
    $query = "INSERT INTO pw_check (pw) WHERE id=1 VALUES (2345)";

    möchte ich dass er in die tabelle pw_check in die spalte pw (und zwar in der zeile mit id=1) den wert 2345 einträgt. (soll später mal durch ne variable ersetzt werden. 2345 nur zum testen).

    leider sagt er:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE id=1 VALUE=2345' at line 1

    mhm right syntax.... ja wie nur ;)

    schonmal danke im voraus! die hilfe hier ist ja echt super. bringt mich voran und weniger zum verzweifeln :D

  • Ah ok habs schon selbst. insert ist auch ein wenig blöd an der stelle. hab update genommen. damit funktioniert es.

    aber noch nicht alle "weglaufen". das nächste problem ist bestümmt um die ecke ;)