Anzeige

Schleife - Doppeleintrag verhindern

Schleife - Doppeleintrag verhindern | PSD-Tutorials.de

Erstellt von Tamiflu, 01.02.2009.

  1. Tamiflu

    Tamiflu Damned...

    Dabei seit:
    05.04.2008
    Beiträge:
    43
    Geschlecht:
    männlich
    Ort:
    Haßloch, RLP
    Software:
    Photoshop CS 4, Blender
    Schleife - Doppeleintrag verhindern
    Hallo,

    ich programmiere gerade eine Art Vertretungsplan, stehe allerdings vor einem Problem:

    PHP:
    1. echo "<table border='1' width='100%'>";
    2.     echo "<tr>";
    3.       echo "<td>Klasse</td>";
    4.       echo "<td>Stunde</td>";
    5.       echo "<td>Lehrer</td>";
    6.       echo "<td>Fach</td>";
    7.       echo "<td>Raum</td>";
    8.       echo "<td>V-Lehrer</td>";
    9.       echo "<td>V-Fach</td>";
    10.       echo "<td>V-Raum</td>";
    11.       echo "<td>Kommentar</td>";
    12.     echo "</tr>";
    13.  
    14. $result = mysql_query("select vyear,vmonth,vday from $TABLE_NAME order by vyear DESC, vmonth DESC, vday DESC");
    15.          
    16.     $result1 = mysql_query("select * from $TABLE_NAME order by vyear ASC, vmonth ASC, vday ASC, klasse DESC");
    17.     // Hier kommt die Schleife
    18.     while ($row1 = mysql_fetch_object($result1))
    19. {          
    20.    
    21.     $aus_vyear = $row1->vyear;
    22.     $aus_vmonth = $row1->vmonth;
    23.     $aus_vday = $row1->vday;
    24.     $aus_vdayweek = $row1->vdayweek;
    25.     $aus_klasse = $row1->klasse;
    26.     $aus_stunde = $row1->stunde;
    27.     $aus_nlehrer = $row1->nlehrer;
    28.     $aus_nfach = $row1->nfach;
    29.     $aus_nraum = $row1->nraum;
    30.     $aus_vlehrer = $row1->vlehrer;
    31.     $aus_vfach = $row1->vfach;
    32.     $aus_vraum = $row1->vraum;
    33.     $aus_komment = $row1->komment;
    34.    
    35.     //vdayweek ist date("w"), also der Wochentag von 0 (Sonntag) bis 6 (Samstag) - deshalb dieses If-Else
    36.     if ($aus_vdayweek == "0"){ $aus_vdayweek = "Sonntag"; }
    37.     elseif ($aus_vdayweek == "1"){ $aus_vdayweek = "Montag"; }
    38.     elseif ($aus_vdayweek == "2"){ $aus_vdayweek = "Dienstag"; }
    39.     elseif ($aus_vdayweek == "3"){ $aus_vdayweek = "Mittwoch"; }
    40.     elseif ($aus_vdayweek == "4"){ $aus_vdayweek = "Donnerstag"; }
    41.     elseif ($aus_vdayweek == "5"){ $aus_vdayweek = "Freitag"; }
    42.     elseif ($aus_vdayweek == "6"){ $aus_vdayweek = "Samstag"; }
    43.    
    44.     echo "<tr>";
    45.         // --- HIER KOMMT DIE DATUMSSPALTE ---
    46.         echo "<td colspan='9'><b>".$aus_vdayweek.", den ".$aus_vday.". ".$aus_vmonth.". ".$aus_vyear."</b></td>";
    47.     echo "</tr>";
    48.     // --- HIER KOMMT DIE DATENSATZ-SPALTE ---  
    49.     echo "<tr>";
    50.       echo "<td>".$aus_klasse." </td>";
    51.       echo "<td>".$aus_stunde." </td>";
    52.       echo "<td>".$aus_nlehrer." </td>";
    53.       echo "<td>".$aus_nfach." </td>";
    54.       echo "<td>".$aus_nraum." </td>";
    55.       echo "<td>".$aus_vlehrer." </td>";
    56.       echo "<td>".$aus_vfach." </td>";
    57.       echo "<td>".$aus_vraum." </td>";
    58.       echo "<td>".$aus_komment." </td>";
    59.     echo "</tr>";
    60.            
    61.     }
    62.  
    63.  
    64.     echo "</table>";
    Jetzt beschreib ich mal kurz was passiert:

    Eine Schleife läuft durch. Die Daten werden aus der Datenbank geordnet ausgewählt. Nun wird zuerst eine Spalte - 9 Zellen breit - geschrieben, in der das Datum des Datensatzes, das am nächsten am heutigen Datum liegt, ausgegeben wird. (Um diese Datumsspalte dreht es sich) Nun wird der Datensatz, der an diesem Datum ist, in einer Tabellenspalte ausgegeben. Die Schleife läuft neu durch, eine neue Datumsspalte wird geschrieben und der nächste Datensatz wird ausgegeben.

    Das Problem: Auch wenn 2 oder mehrere Datensätze das selbe Datum besitzen, wird immer wieder eine neue Datumsspalte geschrieben. Das sieht naütlich nicht sehr schön aus.

    Es ist vollkommen klar, wo das Problem liegt. Es wird halt einfach immer wieder die Schleife durchgelaufen - samt Datum.

    Wie kann man nun das Script so umschreiben, dass wenn mehrere Datensätze das selbe Datum haben, nur einmal das Datum ausgegeben wird - die dazugehörigen Datensätze darunter - und erst beim nächsten Datum eines Datensatzes so eine Datumsspalte geschrieben wird?
    Ich hab absolut keinen Plan, sogar schon versucht mir einen Plan oder so zu zeichnen :lol:, bin aber nicht schlau draus geworden.

    Ich hoffe, dass es irgendwie verständlich war...

    Gruß,
    Tamiflu
     
    Zuletzt bearbeitet: 01.02.2009
    #1      
  2. cebito

    cebito undefined

    262
    Dabei seit:
    08.03.2008
    Beiträge:
    8.316
    Geschlecht:
    männlich
    Ort:
    Dresden
    Kameratyp:
    zum durchgucken
    Schleife - Doppeleintrag verhindern
    AW: Schleife - Doppeleintrag verhindern

    Kann (noch) kein php, deshalb nur die Logik, umsetzen mußt es selbst ;)

    Code (Text):
    1.  
    2. var letztesDatum
    3.  
    4. if (letztesDatum <> ausgelesenesDatum){
    5.      schreibe Tabelle mit Datum}
    6. else{
    7.      schreibe Tabelle ohne Datum}
    8.  
    9. set letztesDatum=ausgelesenes Datum
    10.  
    Hoffe das ist einigermaßen verständlich.... :rolleyes:
     
    Zuletzt bearbeitet: 01.02.2009
    #2      
  3. Chickenshooter

    Chickenshooter Alter Mann

    Dabei seit:
    08.02.2007
    Beiträge:
    431
    Geschlecht:
    männlich
    Ort:
    127.0.0.1
    Software:
    IBM-kompatiblen PC, Mal- und Schreibprogramme
    Kameratyp:
    ...eine zum Durchgucken
    Schleife - Doppeleintrag verhindern
    AW: Schleife - Doppeleintrag verhindern

    Moin,

    versuch es mal so:
    PHP:
    1.  
    2. <?php
    3.     /*
    4.         Deine Code
    5.      */
    6.          
    7.     $arrayWeekDaysDE=array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
    8.    
    9.     $result1 = mysql_query("select * from $TABLE_NAME order by vyear ASC, vmonth ASC, vday ASC, klasse DESC");
    10.     $currentDate = 0;
    11.  
    12.     while ($row1 = mysql_fetch_object($result1))
    13.     {
    14.         $newDate = mktime(0,0,0,$row1->vmonth,$row1->vday,$row1->vyear);
    15.         $aus_vdayweek = date("w",$timestamp);
    16.    
    17.         $aus_klasse = $row1->klasse;
    18.         $aus_stunde = $row1->stunde;
    19.         $aus_nlehrer = $row1->nlehrer;
    20.         $aus_nfach = $row1->nfach;
    21.         $aus_nraum = $row1->nraum;
    22.         $aus_vlehrer = $row1->vlehrer;
    23.         $aus_vfach = $row1->vfach;
    24.         $aus_vraum = $row1->vraum;
    25.         $aus_komment = $row1->komment;
    26.        
    27.         if( $currentDate < $newDate )
    28.         {
    29.             $currentDate = $newDate;
    30.             echo "<tr><td colspan='9'><b>".$arrayWeekDaysDE[$aus_vdayweek].", den ".$aus_vday.". ".$aus_vmonth.". ".$aus_vyear."</b></td></tr>";
    31.         }
    32.         echo "<tr>";
    33.           echo "<td>".$aus_klasse." </td>";
    34.           echo "<td>".$aus_stunde." </td>";
    35.           echo "<td>".$aus_nlehrer." </td>";
    36.           echo "<td>".$aus_nfach." </td>";
    37.           echo "<td>".$aus_nraum." </td>";
    38.           echo "<td>".$aus_vlehrer." </td>";
    39.           echo "<td>".$aus_vfach." </td>";
    40.           echo "<td>".$aus_vraum." </td>";
    41.           echo "<td>".$aus_komment." </td>";
    42.         echo "</tr>";
    43.                
    44.     }
    45.     echo "</table>";  
    46. ?>
    47.  
    du soltest mit einem Timestamp arbeiten

    PHP:
    1. $newDate = mktime(0,0,0,$row1->vmonth,$row1->vday,$row1->vyear);
    das ist eine Zahl, die man bekanntlicher weise prima mit einer

    Anderen vergleichen kann:

    PHP:
    1. $currentDate < $newDate
    wichtig für die function mktime() ist das die Zahlen für tag, Monat und Jahr

    ohne führende 0 sind.

    Dann habe ich noch diese "sinnfreie If / elfeif ... Teil" rausgenommen

    und nutze einen Array siehe:
    PHP:
    1. $arrayWeekDaysDE=array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
    und der muss mit Sonntag beginnen da die Date() function vom PHP

    mit diesen Aufruf

    PHP:
    1. date("w", $timestamp);
    eine Zahl zwischen 0 (Sonntag) bis

    (6) Samstag zurück liefert.

    Hoffe ich konnte helfen.

    MfG Chick
     
    #3      
  4. Tamiflu

    Tamiflu Damned...

    Dabei seit:
    05.04.2008
    Beiträge:
    43
    Geschlecht:
    männlich
    Ort:
    Haßloch, RLP
    Software:
    Photoshop CS 4, Blender
    Schleife - Doppeleintrag verhindern
    AW: Schleife - Doppeleintrag verhindern

    Vielen Dank für das mit dem mktime()
    Wieder was dazugelernt ;)

    Von meiner Seite ist das Thema jetzt --- beendet ---. Danke!
     
    #4      
x
×
×