Antworten auf deine Fragen:
Neues Thema erstellen

Schleife - Doppeleintrag verhindern

Tamiflu

Damned...

Hallo,

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

PHP:
echo "<table border='1' width='100%'>";
    echo "<tr>";
      echo "<td>Klasse</td>";
      echo "<td>Stunde</td>";
      echo "<td>Lehrer</td>";
      echo "<td>Fach</td>";
      echo "<td>Raum</td>";
      echo "<td>V-Lehrer</td>";
      echo "<td>V-Fach</td>";
      echo "<td>V-Raum</td>";
      echo "<td>Kommentar</td>";
    echo "</tr>";

$result = mysql_query("select vyear,vmonth,vday from $TABLE_NAME order by vyear DESC, vmonth DESC, vday DESC");
          
    $result1 = mysql_query("select * from $TABLE_NAME order by vyear ASC, vmonth ASC, vday ASC, klasse DESC");
    // Hier kommt die Schleife
    while ($row1 = mysql_fetch_object($result1))
{          
    
    $aus_vyear = $row1->vyear;
    $aus_vmonth = $row1->vmonth;
    $aus_vday = $row1->vday;
    $aus_vdayweek = $row1->vdayweek;
    $aus_klasse = $row1->klasse;
    $aus_stunde = $row1->stunde;
    $aus_nlehrer = $row1->nlehrer;
    $aus_nfach = $row1->nfach;
    $aus_nraum = $row1->nraum;
    $aus_vlehrer = $row1->vlehrer;
    $aus_vfach = $row1->vfach;
    $aus_vraum = $row1->vraum;
    $aus_komment = $row1->komment;
    
    //vdayweek ist date("w"), also der Wochentag von 0 (Sonntag) bis 6 (Samstag) - deshalb dieses If-Else
    if ($aus_vdayweek == "0"){ $aus_vdayweek = "Sonntag"; }
    elseif ($aus_vdayweek == "1"){ $aus_vdayweek = "Montag"; }
    elseif ($aus_vdayweek == "2"){ $aus_vdayweek = "Dienstag"; }
    elseif ($aus_vdayweek == "3"){ $aus_vdayweek = "Mittwoch"; }
    elseif ($aus_vdayweek == "4"){ $aus_vdayweek = "Donnerstag"; }
    elseif ($aus_vdayweek == "5"){ $aus_vdayweek = "Freitag"; }
    elseif ($aus_vdayweek == "6"){ $aus_vdayweek = "Samstag"; }
    
    echo "<tr>";
        // --- HIER KOMMT DIE DATUMSSPALTE ---
        echo "<td colspan='9'><b>".$aus_vdayweek.", den ".$aus_vday.". ".$aus_vmonth.". ".$aus_vyear."</b></td>";
    echo "</tr>";
    // --- HIER KOMMT DIE DATENSATZ-SPALTE ---   
    echo "<tr>";
      echo "<td>".$aus_klasse." </td>";
      echo "<td>".$aus_stunde." </td>";
      echo "<td>".$aus_nlehrer." </td>";
      echo "<td>".$aus_nfach." </td>";
      echo "<td>".$aus_nraum." </td>";
      echo "<td>".$aus_vlehrer." </td>";
      echo "<td>".$aus_vfach." </td>";
      echo "<td>".$aus_vraum." </td>";
      echo "<td>".$aus_komment." </td>";
    echo "</tr>";
            
    }


    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:

cebito

undefined

AW: Schleife - Doppeleintrag verhindern

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

Code:
var letztesDatum

if (letztesDatum <> ausgelesenesDatum){
     schreibe Tabelle mit Datum}
else{
     schreibe Tabelle ohne Datum}

set letztesDatum=ausgelesenes Datum
Hoffe das ist einigermaßen verständlich.... :rolleyes:
 
Zuletzt bearbeitet:

Chickenshooter

Alter Mann

AW: Schleife - Doppeleintrag verhindern

Moin,

versuch es mal so:
PHP:
<?php
    /*
        Deine Code
     */
          
    $arrayWeekDaysDE=array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");
    
    $result1 = mysql_query("select * from $TABLE_NAME order by vyear ASC, vmonth ASC, vday ASC, klasse DESC");
    $currentDate = 0;

    while ($row1 = mysql_fetch_object($result1))
    {
        $newDate = mktime(0,0,0,$row1->vmonth,$row1->vday,$row1->vyear);
        $aus_vdayweek = date("w",$timestamp);
    
        $aus_klasse = $row1->klasse;
        $aus_stunde = $row1->stunde;
        $aus_nlehrer = $row1->nlehrer;
        $aus_nfach = $row1->nfach;
        $aus_nraum = $row1->nraum;
        $aus_vlehrer = $row1->vlehrer;
        $aus_vfach = $row1->vfach;
        $aus_vraum = $row1->vraum;
        $aus_komment = $row1->komment;
        
        if( $currentDate < $newDate )
        {
            $currentDate = $newDate;
            echo "<tr><td colspan='9'><b>".$arrayWeekDaysDE[$aus_vdayweek].", den ".$aus_vday.". ".$aus_vmonth.". ".$aus_vyear."</b></td></tr>";
        }
        echo "<tr>";
          echo "<td>".$aus_klasse." </td>";
          echo "<td>".$aus_stunde." </td>";
          echo "<td>".$aus_nlehrer." </td>";
          echo "<td>".$aus_nfach." </td>";
          echo "<td>".$aus_nraum." </td>";
          echo "<td>".$aus_vlehrer." </td>";
          echo "<td>".$aus_vfach." </td>";
          echo "<td>".$aus_vraum." </td>";
          echo "<td>".$aus_komment." </td>";
        echo "</tr>";
                
    }
    echo "</table>";  
?>
du soltest mit einem Timestamp arbeiten

PHP:
$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:
$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:
$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:
date("w", $timestamp);
eine Zahl zwischen 0 (Sonntag) bis

(6) Samstag zurück liefert.

Hoffe ich konnte helfen.

MfG Chick
 

Tamiflu

Damned...

AW: Schleife - Doppeleintrag verhindern

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

Von meiner Seite ist das Thema jetzt --- beendet ---. Danke!
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Statistik des Forums

Themen
118.632
Beiträge
1.538.443
Mitglieder
67.556
Neuestes Mitglied
Mattlack
Oben