Problem mit while()?

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

  • Problem mit while()?

    Hi,
    ich suche jetzt schon seit mehreren Tagen den Fehler in diesem Skript, aber ich finde einfach keinen:
    PHP-Code:
      // siehe weiter unten 
    Bitte nicht wundern über die Variablen-Namen, die habe ich mal durch ein paar komplett bezuglose Begriffe ersetzt, genauso wie Datenbank-Daten.
    Zu sagen wäre noch, dass das ein Auszug ist, ich aber mit dem kompletten Code keinen Fehler, auch keinen Notice ausgespuckt bekomme.

    Was ist also los damit?
    Naja, der Code soll eigentlich prüfen, ob verschiedene Datenzeilen mit verschiedenen Bedingungen existieren, und wenn ja, dann sollen sie ausgegeben werden.
    Das funktioniert mit der ersten Tabellenzeile einwandfrei, aber es wird NIEMALS eine zweite Zeile ausgegeben, auch wenn alle Bedingungen dazu erfüllt sind.

    Kann mir jemand sagen wo der Fehler ist (er müsste eigentlich von logischer Natur sein)?

    Nochmals: einige Funktionen sind nicht enthalten, aber an denen kanns nicht liegen, der Fehler muss in diesem Code Abschnitt sein!

    PS: der Code ist für / in PHP 5.1 geschrieben
    Zuletzt geändert von MadeVr; 16.06.2006, 21:40.

  • #2
    erst díe regeln befolgen.

    Kommentar


    • #3
      Dann erklär doch mal einem NICHTSWISSENDEN (weil der restliche Code schliesslich keine fehler enthält) was z.B $datas und $betas sein sollen ?

      Wo kommen die werte her?
      Sicher das diese nach deinem ersten durchlauf noch != 0 sind?
      Warum funktioniert es denn mit der ersten Zeile? ( )

      OffTopic:

      Frag Wahsaga, der müsste das (wie der name schon sagt) wissen

      gruss Chris

      [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

      Kommentar


      • #4
        Das ist es ja, es funktioniert mit der ersten Zeile, aber nicht mit der zweiten!

        Die Bedingung ist ganz klar erfüllt, da auch die echo-Ausgabe (echo '<br /><strong>Auf dieses Release bezieht sich ein Beta:</strong>' vor der while() Schleife ausgegeben wird (bei beiden Zeilen)!

        FAKT: Alle Bedingungen sind erfüllt, nur bei der zweiten Zeile wird die while() Schleife nicht mehr ausgeführt bzw. der enthaltene Code eben nicht mehr ausgegeben.

        Welche Regeln habe ich denn nicht befolgt?
        Zuletzt geändert von MadeVr; 16.06.2006, 18:53.

        Kommentar


        • #5
          ich muss gewaltig horizontal scrollen.

          Kommentar


          • #6
            Sorry,
            die Regel muss ich übersehen haben, tut mir Leid.
            Ich hab mal ein wenig umgebrochen, hoffentlich hat die Übersicht nicht allzu sehr gelitten. Ich weiß, da sind immer noch Scrollbalken, aber ich finde das ist so OK.
            Ich hoffe für dich / euch auch.

            Wie steht's jetzt, kennt jemand das Problem / eine Lösung?

            Kommentar


            • #7
              Die Bedingung ist ganz klar erfüllt, da auch die echo-Ausgabe (echo '<br /><strong>Auf dieses Release bezieht sich ein Beta:</strong>' vor der while() Schleife ausgegeben wird (bei beiden Zeilen)!
              Und?

              PHP-Code:
              if ($betas == 1) { 
              Dann wird das wohl richtig sein..

              PHP-Code:
              if ($betas 1) { 
              kommt das denn auch noch? Wahrscheinlich nicht, sonst würdest du nicht fragen.
              gruss Chris

              [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

              Kommentar


              • #8
                Nein, das kommt narülich nur, wenn $beta ein Zahl hat die größer als eins ist, aber das ist ja gerade dazu um das zu entscheiden (je nachdem was in der Datenbank gefunden wird).
                Und wenn das ganze = 1 ist wie soll es dann gleichzeitig noch > 1 sein?

                Oder ist das ein Missverständnis?

                Kommentar


                • #9
                  1)
                  Das funktioniert mit der ersten Tabellenzeile einwandfrei, aber es wird NIEMALS eine zweite Zeile ausgegeben, auch wenn alle Bedingungen dazu erfüllt sind.
                  2)
                  (je nachdem was in der Datenbank gefunden wird).

                  Oder ist das ein Missverständnis?

                  Und du fragst nach Missverständnissen?

                  Niemand hier weiss was in deiner Datenbank gefunden wird.

                  Ich dachte dir soll hier jemand helfen. Du gibst deinen Code nicht raus, möchtest aber hilfe
                  gruss Chris

                  [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                  Kommentar


                  • #10
                    Wenn die zweite Tabelle nicht ausgegeben wird, ist der Datenbankzugriff auf die Tabelle rels im betas-Teil falsch bzw. liefert 0 Zeilen (da auch keine exception).

                    das $betas kommt übrigens nicht von diesem SELECT sondern von was anderem.
                    Zuletzt geändert von mai; 16.06.2006, 20:01.

                    Kommentar


                    • #11
                      In phpMyAdmin liefert der Befehl mit Werten (die die Variablen haben) eine Zeile zurück!

                      Ich liefere keinen weiteren Code, weil der Fehler einfach hier liegen MUSS!

                      Wenn es unbedingt nötig ist, einige Hinweise:
                      - eine Zeile hat ein ID - und zwei felder, die die Anzahl von datas und betas enthalten - die hab ich ausgelesen, sodass $datas und $betas jeweils 1 enthalten MÜSSEN (kein Zweifel, getestet!)
                      - es gibt ein pzugid-Feld, das die ID der ersten Zeile hat, in zwei weiteren Zeilen (1 zeile steht für die Anzahl in $datas, also eine Zeile die unter die kategorie datas fällt, die andere für $betas (-> 1 Zeile gehört in die Kategorie betas). Diese beiden Zeilen beziehen sich auf die erste Zeile. Also steht in dem pzugid der beiden Zeilen die ID der ersten Zeile, deren pzugid Feld leer ist.

                      $datas = Anzahl der Zeilen Kategorie datas
                      $betas = Anzahl der Zeilen Kategorie betas
                      $pzugid = ID, auf das sich die Zeile aus der Kategorie datas oder betas bezieht

                      Ausgegeben werden sollen jetzt zuerst die Hauptzeile, aus der wird ausgelesen, wie viele datas und betas Zeilen es gibt. Und die werden dann auch ausgegeben (in dem Fall eben jeweils 1 Zeile, die 1. datas Zeile wird korrekt ausgegeben, die 2., eine betas, wird nicht ausgegeben, obwohl sie existiert und den Bedingungen entspricht.

                      Wenn noch Fragen offen sind, ich beantworte sie gerne, wenn ihr mir nur helft! Ich bin sowas von hilflos in der Angelegenheit!

                      Vielleicht poste ich noch den kompletten Code heute Abend...
                      Zuletzt geändert von MadeVr; 16.06.2006, 20:17.

                      Kommentar


                      • #12
                        dann mach mal testoutput von deinem zweiten Datenbankzugriff, was immer deine object-methode MySQLi ldazu liefern kann.
                        Anzahl zeilen? entsprechend mysql_num_rows()?
                        Ausführungsstatus? entsprechend $result=mysql_query()?

                        Dann hast Du noch eine Xaos-Syntax:
                        Also steht in dem pzugid der beiden Zeilen die ID der ersten Zeile, deren pzugid Feld leer ist.
                        eine betas, wird nicht ausgegeben
                        wird jetzt die Anfangszeile, es gibt $betas /ein beta ausgegeben oder nicht.

                        ganz abgesehen von deiner Benennung der zeilen mit erste zeile, bzw. beide zeilen usw.

                        Kommentar


                        • #13
                          und echoe mal deine $sql

                          Kommentar


                          • #14
                            dann kannst noch den source code des html sehen, ob<table> usw. drinsteht.

                            Kommentar


                            • #15
                              Nochmal von vorne, zuerst einmal die Datei, um die es sich dreht (komplett! in zwei Parts, wegen maximaler Beitragslänge) PART1:

                              PHP-Code:
                                      <?php
                                      $id 
                              $_GET['r_id'];
                                      try {
                                        
                              $db = new MySQLi('XXX''XXX''XXX''XXX');
                                        
                              $sql "SELECT id, date, time, typ, art, fach, 
                                        aufbekommen, hausaufgabe, source, rate, komment FROM datensatz WHERE id='
                              $id'";
                                        
                              $kommando $db->prepare($sql);
                                        
                              $kommando->execute();
                                        
                              $kommando->bind_result($id$date$time$typ$art$fach$aufbekommen,
                                         
                              $hausaufgabe$source$rate$komment);

                                        while (
                              $kommando->fetch()) {
                                          
                              ?>
                                          <tr>
                                            // wegen Übersicht gelöscht
                                          </tr>
                                          <?php    
                                        
                              }

                                        
                              $db->close();
                                      } catch (
                              Exception $e) {
                                        
                              header("location: err.php?f=" urlencode($e->getMessage()));
                                      }
                                      
                              ?>

                                    </table>

                                    <?php
                                      
                              try {
                                        
                              $db = new MySQLi('XXX''XXX''XXX''XXX');
                                        
                              $sql "SELECT loops, poops FROM datensatz WHERE id='$id'";
                                        
                              $kommando $db->prepare($sql);
                                        
                              $kommando->execute();
                                        
                              $kommando->bind_result($loops$poops);
                                        
                              $kommando->fetch();
                                        
                              $db->close();
                                      } catch (
                              Exception $e) {
                                        
                              header("location: err.php?f=" urlencode($e->getMessage()));
                                      }

                                      
                              ////////////////////////////////////////////////////////////////////////////////////////
                                      /// loops checken //////////////////////////////////////////////////////////////////////
                                      ////////////////////////////////////////////////////////////////////////////////////////
                                      
                              if ($loops != 0) {
                                        try {
                                          
                              $db = new MySQLi('XXX''XXX''XXX''XXX');
                                          
                              $sql "SELECT id, date, time, typ, art, fach, aufbekommen, hausaufgabe, 
                                          source, rate, komment FROM datensatz WHERE pzugid='
                              $id' AND art='loop'";
                                          
                              $kommando $db->prepare($sql);
                                          
                              $kommando->execute();
                                          
                              $kommando->bind_result($id$date$time$typ$art$fach$aufbekommen
                                          
                              $hausaufgabe$source$rate$komment);
                                          if (
                              $loops == 1) {
                                            echo 
                              '<br /><strong>Auf diesen Eintrag bezieht sich ein loop:</strong>';
                                          }
                                          if (
                              $loops 1) {
                                            echo 
                              '<br /><strong>Auf diesen Eintrag beziehen sich ' $loops 'loops:</strong>';
                                          }
                                          
                              ?>
                                          <table>
                                            <?php while ($kommando->fetch()) { ?>
                                              <tr>
                                                wegen Übersicht gelöscht
                                              </tr>
                                            <?php ?>
                                          </table>
                                          <?php
                                          $db
                              ->close();
                                        } catch (
                              Exception $e) {
                                          
                              header("location: err.php?f=" urlencode($e->getMessage()));
                                        }
                                      }
                              Die drei Funktionen, die included sind (über functions.php) sind wohl nicht relevant, oder? Wenn doch gebt Bescheid!
                              In der Datenbank gibt es (nur relevante Felder):
                              1. Zeile: ID = 1 | loops = 1 | poops = 1
                              2. Zeile: ID = 2 | art = loop | pzugid = 1
                              3. Zeile: ID = 3 | art = poop | pzugid = 1
                              Zuletzt geändert von MadeVr; 16.06.2006, 21:41.

                              Kommentar

                              Lädt...
                              X