String innerhalb while-Schleife leeren?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • String innerhalb while-Schleife leeren?

    Hallo zusammen,

    ich stehe vor einem kleinen Problem.
    Ich ziehe mir aus einer DB mehrere rows. Diese wiederum gebe ich dann in einer Tabelle aus.
    PHP-Code:
    while ($row mysql_fetch_assoc($query)) {   echo $row['name']."<br />";........ 
    Klappt ja auch alles. Nur das Problem ist das wenn der Datensatz $row['name'] mal zufälligerweise KEINEN Wert beinhaltet, wird der Eintrag des vorherigen Datensatzes herangezogen. Was natürlich nicht so gedacht war;

    Normalerweise würde ich den String ja vorher leeren $name ="";
    Aber wie kann ich das innerhalb einer do-while Schleife?

    Cu SusiSorglos
    PHP 8.0, MariaDB 10.5 auf U20.04

  • #2
    Re: String innerhalb while-Schleife leeren?

    Original geschrieben von SusiSorglos
    Hallo zusammen,

    ich stehe vor einem kleinen Problem.
    Ich ziehe mir aus einer DB mehrere rows. Diese wiederum gebe ich dann in einer Tabelle aus.
    PHP-Code:
    while ($row mysql_fetch_assoc($query)) {   echo $row['name']."<br />";........ 
    Klappt ja auch alles. Nur das Problem ist das wenn der Datensatz $row['name'] mal zufälligerweise KEINEN Wert beinhaltet, wird der Eintrag des vorherigen Datensatzes herangezogen. Was natürlich nicht so gedacht war;
    Das halte ich für sehr unwahrscheinlich.

    Kommentar


    • #3
      hmmm... ich kann es mir auch nicht erklären. Dann muss ich wohl wo anders danach suchen. Denn dieses Problem habe ich bei einer anderen Abfrage auch.

      Cu Susi
      PHP 8.0, MariaDB 10.5 auf U20.04

      Kommentar


      • #4
        Lass dir mal $row bei jedem Durchgang mit print_r ausgeben. Und was du noch machen solltest: Führ das exakt selbe Query direkt am MySQL-Server aus (oder über phpMyAdmin), wär ja möglich, dass du ein anderes Ergebnis bekommst als du erwartest.

        Kommentar


        • #5
          Re: String innerhalb while-Schleife leeren?

          Original geschrieben von SusiSorglos
          ich stehe vor einem kleinen Problem.
          Ich ziehe mir aus einer DB mehrere rows. Diese wiederum gebe ich dann in einer Tabelle aus.
          PHP-Code:
          while ($row mysql_fetch_assoc($query)) {   echo $row['name']."<br />";........ 
          Klappt ja auch alles. Nur das Problem ist das wenn der Datensatz $row['name'] mal zufälligerweise KEINEN Wert beinhaltet, wird der Eintrag des vorherigen Datensatzes herangezogen.
          Das erscheint mir höchst unwahrscheinlich. Da du aber nur Teile deines Quelltextes vorgestellt hast, kann man nur raten.

          Nebenbei hast du auch noch einige Ungereimtheiten eingebaut, :

          Die Variable $row ist der DATENSATZ. $row['name'] ist ein DATENFELD innerhalb dieses Datensatzes.

          Der Variablen $query hast du hoffentlich das Ergebnis des Queries ($query_result) zugewiesen und nicht den Query-String (oder die Query-Anfrage) selbst.

          Hilfreich sind zwei Aktionen:
          1. var_dump() ist dein Freund. Anders als print_r() zeigt es auch die Typen der Variablen an. So kannst du bspw. sehen, ob es sich bei einer "leeren" Variablen um einen Leerstring '' oder den Wert NULL handelt. Für die Ausgabe im Browser hat sich folgende Funktion bewährt:
          PHP-Code:
          function my_var_dump(& $var) {
            echo 
          '<pre>';
            
          ob_start();
            
          var_dump($var);
            echo 
          htmlspecialchars(preg_replace('/\]=>(\r\n|[\r\n])(\x20{2})+/S''] => 'ob_get_clean()));
            echo 
          '</pre>';

          2. error_reporting(E_ALL) hilft dir, (neben anderen Fehlern) eventuell falsch benannte Variabeln aufzuspüren.

          ... Normalerweise würde ich den String ja vorher leeren $name ="";
          Aber wie kann ich das innerhalb einer do-while Schleife?
          Du kannst innerhalb des Schleifenkörpers so ziemlich alles machen, was du auch an anderen Stellen im Quellcode machen kannst:

          PHP-Code:
          $query 'select bla from blubb where bleu';
          $query_result mysql_query($dbh$query);
          if (
          FALSE === $query_result) {
            die(
          'DB-Abfrage gescheitert!');
          }
          // ...

          // du solltest auch die Abbruchbedingung 
          // etwas genauer festlegen
          while (FALSE !== $row mysql_fetch_assoc($query_result)) {
            
          // my_var_dump($row); 

            
          echo $row['name'], '<br />';

            
          // ...

            
          $row = array (); // da $row ein Array sein sollte
            // halte ich die Zuweisung von array () für 
            // verständlicher als die Zuweisung von '' (Leerstring)

          Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

          Kommentar


          • #6
            Mein Fehler lag doch an einer anderen Stelle.
            Ich habe mit ein paar elseif Abfragen einige Werte abgefragt und danach einem $tring den entsprechenden Wert zugewiesen.

            Nach dem Durchlauf der Schleife wurde dieser natürlich nicht gelöscht und war somit im nächsten Datensatz noch Aktiv. Ich habe nun kurz vor den if-Abfragen den $tring geleert. nun klappt es.

            Das mit dem "var_dump" kannte ich noch gar nicht. Werde ich nun häufiger anwenden. Hatte allerdings mit Deiner OOP Version Probleme. So weit bin ich noch nicht

            Ich danke Euch.. Wieder was gelernt

            Cu susi
            PHP 8.0, MariaDB 10.5 auf U20.04

            Kommentar

            Lädt...
            X