verschachtelte Schleifen

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

  • #31
    sorry,

    beide felder werden über einen datepicker gefüllt, und sind in der datenbank als typ date gesetzt beide felder sind so formatiert. jjjj-mm-tt

    mein query
    PHP-Code:
    $result mysql_query("SELECT 
    id,sd,ed,d_event,d_city,d_land,d_desc,d_org,d_link,
    MONTH(sd) AS start,DAY(sd) AS stag, YEAR(sd) AS sjahr, 
    MONTH(ed) AS ende, DAY(ed) AS etag,YEAR(ed) AS ejahr 
    FROM event WHERE public='1'  ORDER BY sd"
    ); 

    ed ist größer als sd der datepicker verhindert eine kleiner eingabe des enddatums.
    aber auch mit print_r ist sd kleiner ed
    aber $start ist nur der monat als 2 oder vier während ed das ganze datum aslo 2010-04-12
    PHP-Code:
    while($event=mysql_fetch_array($result)){
            
    $sd $event["sd"];
            while (
    $sd <= $event["ed"]) {
                
    $ev[$sdt++][]=$event;
            }
        } 
    habe also in der while statt $start $sd probiert

    Kommentar


    • #32
      Es gibt einen Ändern-Button. Dein Beitrag und das sich ergebende Horizontal-Scrolling wird von einem Doppelpost auch nicht besser.

      Ich hab den regelwidrigen Beitrag jetzt gelöscht.

      Zum Thema: sd nützt dir in diesem Falle überhaupt nichts, wenn du nach Monat gruppieren willst. Was du brauchst, hatte ich schon vor einigen Posts erraten (nur, dass ich dort die Spalte start verwendet hatte, weil ich nicht wusste, dass die bei dir sd heißt).
      Zuletzt geändert von AmicaNoctis; 12.04.2010, 17:30.
      [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
      Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
      Super, danke!
      [/COLOR]

      Kommentar


      • #33
        ok,
        ich habe es hiermit probiert:
        PHP-Code:
        while($event=mysql_fetch_array($result)){
                
        $ev[$event["sd"]][]=$event;
                   if (
        $event["sd"] != $event["ed"]) {
                    
        $ev[$event["ed"]][]=$event;
                }
            } 
            
            
          foreach(
        $ev AS  $key=> $value){
            echo
        "<tr><td class='eventmonth' colspan='3'>
        Veranstaltungen im 
        $monate[$key]</td></tr>";

            foreach(
        $value AS  $val){
            echo
        "        
            <tr class='evltop-daad'><td>
        $val[stag].$val[start].$val[sjahr] -
         
        $val[etag].$val[ende].$val[ejahr]</td><td>$val[d_city]</td>
        <td class='evland'>
        $val[d_land]</td></tr>
            <tr><td class='evname' colspan='3'>
        $val[d_event]</td></tr>
            <tr><td class='evintro-daad' colspan='3' valign='top'>
        $val[d_desc]</td></tr>
            <tr><td class='evland' colspan='3' valign='top' height='40px'>
        <a class='evweiter' href='daad-
        veranstaltung.php?e=
        $val[id]'>weiterlesen</a></td></tr>
            "
        ;                
            
        }
        }

        jetzt ist aber $key ein datum. zB 2010-01-23
        habe also folgendes probiert:
        PHP-Code:
        $datum=explode('-',$key);
            
        $monat=$datum["1"]; 
        das funktioniert aber nicht. die monate werden nicht mehr in den titeln ausgegeb und dadurch habe ich über jede veranstaltung einen title

        Kommentar


        • #34
          Jetzt muss ich dir zum dritten Mal sagen, dass dir das als Datum nichts nützt und du in der Abfrage die EXTRACT-Funktion benutzen sollst.
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #35
            Hallo,
            mit extract bekomme ich das gleiche ergebins wie ohne extract.
            PHP-Code:
            $result mysql_query("SELECT EXTRACT(YEAR_MONTH FROM `sd`),
            id,sd,ed,d_event,d_city,d_land,d_desc,d_org,d_link,MONTH(sd) AS start,
            DAY(sd) AS stag, YEAR(sd) AS sjahr, MONTH(ed) AS ende, 
            DAY(ed) AS etag,YEAR(ed) AS ejahr FROM event WHERE public='1'  
            ORDER BY sd"

            ich habe extract sd benutzt denn start ist ja nur der monat von sd
            mit start bekomme ich einen not suplied argument error

            PHP-Code:
            while($event=mysql_fetch_array($result)){
                    
            $start $event["start"];
                    while (
            $start <= $event["ende"]) {
                        
            $ev[$start++][]=$event;
                    }
                } 

            Kommentar


            • #36
              Natürlich tust du das, weil du es nicht als start alias't. Das AS Schlüsselwort kennst du ja, du benutzt es doch bei den anderen Datumsfunktionen auch.
              [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
              Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
              Super, danke!
              [/COLOR]

              Kommentar


              • #37
                hallo,
                ich bekomme den gleichen fehler.
                ich weiss nicht wo ich das alias hinschreiben soll. ich habe es vor der klammer probiert, am anfang der klammer, nach year_month, am ende der klammer und hinter der klammer.
                ich habe auch bei google nichts mit extract und alias zusammen gefunden.
                kannst du mir die syntax geben?


                ich habe auch MONTH(sd) AS start umbenannt in AS smonat, damit ich start nicht wieder überschreibe.

                Kommentar


                • #38
                  Code:
                  SELECT EXTRACT(YEAR_MONTH FROM `sd`) as `start`, ...
                  [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                  Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                  Super, danke!
                  [/COLOR]

                  Kommentar


                  • #39
                    EXTRACT() ist eine Funktion genau wie MONTH(). Da du dir schon "MONTH(sd) AS start" erarbeitet hast, sollte nun klar sein, wo das AS bei EXTRACT() hingehört.

                    Kommentar


                    • #40
                      ja, das habe ich auch so probiert, aber ich bekomme den gleichen fehler.
                      ich sehe nicht was passeirt:
                      PHP-Code:
                      $result mysql_query("SELECT EXTRACT (YEAR_MONTH FROM sd)
                      AS start,EXTRACT (YEAR_MONTH FROM ed)AS ende, 
                      id,d_event,d_city,d_land,d_desc,d_org,d_link,MONTH(sd) AS smonat, 
                      DAY(sd) AS stag, YEAR(sd) AS sjahr, MONTH(ed) AS emonat, 
                      DAY(ed) AS etag,YEAR(ed) AS ejahr FROM event WHERE public='1'  
                      ORDER BY sd"
                      );
                              
                      while(
                      $event=mysql_fetch_array($result)){
                              
                      $start $event["start"];
                              while (
                      $start <= $event["ende"]) {
                                  
                      $ev[$start++][]=$event;
                              }
                          } 

                      Kommentar


                      • #41
                        Prüf mal bitte, ob du irgendwo null-Werte als Datum drin hast. Wenn ja, wird es daran liegen.
                        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                        Super, danke!
                        [/COLOR]

                        Kommentar


                        • #42
                          Nein. Alle Felder in der Tabelle haben Daten

                          Kommentar


                          • #43
                            Dann ist es aber trotzdem mal an der Zeit, das gute alte print_r-Debugging anzuwenden. Bei unendlich laufenden Schleifen kombiniere ich das immer mit einer zusätzlichen Abbruchbedingung:

                            PHP-Code:
                            $debugLoopCount 20;
                            while (
                            $debugLoopCount-- && /* Original-Bedingung */) {
                                
                            // mach was
                                
                            print_r(/* irgendwas */);

                            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                            Super, danke!
                            [/COLOR]

                            Kommentar


                            • #44
                              bin mir nicht sicher ob ich das richtig angewendet habe.

                              PHP-Code:
                              $debugLoopCount 20;
                              while (
                              $debugLoopCount-- &&
                               
                              $result mysql_query("SELECT EXTRACT (YEAR_MONTH FROM sd)AS 
                              start, EXTRACT (YEAR_MONTH FROM ed)AS ende,d_event FROM 
                              event WHERE public='1'  ORDER BY sd"
                              ))
                                
                                       {    
                              while(
                              $event=mysql_fetch_array($result)){
                                      
                              $start $event["start"];
                                      while (
                              $start <= $event["ende"]) {
                                          
                              $ev[$start++][]=$event;
                                  
                                  
                              // mach was
                                  
                              print_r($start);
                              }      
                                }

                              jetzt bekomme ich keine fehlermeldung mehr, aber ein kein print_r resultat

                              Kommentar


                              • #45
                                Nein, das mit dem Schleifenabbruch muss in das innere while.

                                PHP-Code:
                                    while($event=mysql_fetch_array($result)){
                                        
                                $start $event["start"];
                                        
                                $debugLoopCount 20;
                                        
                                print_r($event);
                                        while (
                                $debugLoopCount-- && $start <= $event["ende"]) {
                                            
                                $ev[$start++][] = $event;
                                        }
                                    } 
                                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                                Super, danke!
                                [/COLOR]

                                Kommentar

                                Lädt...
                                X