renee03: while-scheife in einer function

Hallo,
ich habe eine kleine Frage.
Ich lese etwas aus der Datenbank aus.
Die while-scheife habe ich in eine Funktion gepackt, damit diese nur
bei bedarf geladen wird. Die while-Schleife läuft aber nur einmal durch.
Könnt Ihr mir einen Tipp geben?

function showUser()
{
  $abfrage = "SELECT * FROM tbl_user";
  $ergebnis = mysql_query($abfrage);
  while ($row = mysql_fetch_array($ergebnis))
  {
    $nickname = $row['user'];
    echo $nickname;
  }
}

  1. Tach!

    Die while-scheife habe ich in eine Funktion gepackt, damit diese nur bei bedarf geladen wird.

    Bei Bedarf "geladen"? Unter PHP wird Code - egal ob in einer Funktion enthalten oder nicht - nur dann bei Bedarf geladen, wenn du ein bedingtes include_once/require_once verwendest, das durch diesen Bedarf ausgelöst wird. Ansonsten ist sämtlicher Code seit Anfang an "geladen" und harrt nur noch darauf, dass der Programmablauf an seine Stelle kommt.

    Die while-Schleife läuft aber nur einmal durch.
    Könnt Ihr mir einen Tipp geben?

    Betreibe Debugging! Sind die Werte in den Variablen und die Rückgabewerte der Funktionen so wie du sie dir vorstellst und sie laut Funktionsbeschreibung im Handbuch sein müssen? Finde die Stelle, an der Wunsch und Wirklichkeit auseinanderlaufen.

    $nickname = $row['user'];
        echo $nickname;

    Wozu das Umkopieren? Ein echo $row['user']; arbeitet genauso. Sollte es sich nicht nur um eine Quick'n'Dirty-Testausgabe handeln, fehlt nur noch die Kontextwechselbeachtung.

    dedlfix.

    1. Tach!

      Die while-scheife habe ich in eine Funktion gepackt, damit diese nur bei bedarf geladen wird.

      Bei Bedarf "geladen"? Unter PHP wird Code - egal ob in einer Funktion enthalten oder nicht - nur dann bei Bedarf geladen, wenn du ein bedingtes include_once/require_once verwendest, das durch diesen Bedarf ausgelöst wird. Ansonsten ist sämtlicher Code seit Anfang an "geladen" und harrt nur noch darauf, dass der Programmablauf an seine Stelle kommt.

      Die while-Schleife läuft aber nur einmal durch.
      Könnt Ihr mir einen Tipp geben?

      Betreibe Debugging! Sind die Werte in den Variablen und die Rückgabewerte der Funktionen so wie du sie dir vorstellst und sie laut Funktionsbeschreibung im Handbuch sein müssen? Finde die Stelle, an der Wunsch und Wirklichkeit auseinanderlaufen.

      $nickname = $row['user'];
          echo $nickname;

      Wozu das Umkopieren? Ein echo $row['user']; arbeitet genauso. Sollte es sich nicht nur um eine Quick'n'Dirty-Testausgabe handeln, fehlt nur noch die Kontextwechselbeachtung.

      dedlfix.

      Danke dedlfix,
      1. also bei bedarf geladen meinte ich: diese funktionen sind in einer datei und diese werden mit dem funktionsaufruf eingebunden.

      2. Die whileschleife läuft eigentlich, aber nur einmal. in der datenbank befinden sich aber mehrer einträge. ich weiß nicht warum die schleife hier nur einmal ausgeführt wird.

      print_r($ergebis) liefert mir hier den fehler: Resource id #14

      3. das echo war hier nur als bespiel, ich lese mehere feld aus. es werden alle angezeigt, aber wie gesagt, die schleife läuft nur einmal, und es wird mir nur der erste datendatz angezeigt

      1. Moin,

        als erstes möchte ich mitteilen dass ich kein Freund von verschachtelten Befehlen bin so wie das hier if($variable = irgendwas()). Spätestens beim Debuggen muss man die Struktur wahrscheinlich ändern.

        Und schon sind wir bei deinem Problem. Was in der Datenbank ist und was durch einen Query im PHP Ankommt sind nun mal zwei verschiedene Sachen. Deshalb wäre es sehr interessant zu wissen, welche Ergebnisse dein Query tatsächlich liefert. Sind es mehr als 1 Eintrag ist irgendwas bei der Whileschleife falsch, ist es nur 1 Eintrag du erwartest aber mehr ist dien Query falsch.
        Dritte Möglichkeit wäre noch das beide Sachen stimmen, deine Erwartungen jedoch falsch sind.

        Gruß
        Erwartungsfreier
        T-Rex

      2. Tach!

        Bitte zitiere nur das, warauf du dich konkret beziehst und schreib deine Antwort genau unter das Zitat. Vollzitate sind nicht nützlich. Danke.

        1. Die whileschleife läuft eigentlich, aber nur einmal. in der datenbank befinden sich aber mehrer einträge. ich weiß nicht warum die schleife hier nur einmal ausgeführt wird.
          print_r($ergebis) liefert mir hier den fehler: Resource id #14

        Und weiter mit den Kontrollausgaben? Du hast ja nicht nur diese eine Variable. (var_dump() ist übrigens besser geeignet.) Die Ausgabe ist auch kein Fehler, wie du im Handbuch hättest nachlesen können. mysql_query() gibt im Gutfall eine solche Ergebniskennung zurück. Diese ist nur zur Übergabe an andere Funktionen verwendbar, eine Ausgabe nicht wirklich sinnvoll. Mit dieser Ergebniskennung kannst du aber zum Beispiel eine Funktion aufrufen, die dir die Anzahl der von der Abfrage ermittelten Datensätze angibt. Damit kannst du erst einmal sehen, ob nun nur ein Datensatz "geschleift" werden kann oder ob der Fehler vielleicht in deinem Code zu suchen ist.

        1. das echo war hier nur als bespiel, ich lese mehere feld aus. es werden alle angezeigt, aber wie gesagt, die schleife läuft nur einmal, und es wird mir nur der erste datendatz angezeigt

        Du hast da also anderen Code bei dir, als du hier zeigst. Damit wird es schwer, den möglichen Fehler aufzuzeigen, besonders wenn du den Code einfach nur gekürzt hast, ohne zu kontrollieren, ob der Fehler damit auch noch auftritt. Das ist jetzt kein Vorwurf sondern nur eine Vermutung von möglichen Ursachen. Im gezeigten Code sehe ich keinen Fehler, der zum nur einmaligen Durchlauf führt.

        dedlfix.