Essensplan die 2te

Hiob

Mitglied
Hey Leute.
Der selbe Typ, das selbe Thema :)
Also ich hab noch ein kleinen Fehler in dem Skript und ich weiss einfach nicht wie ich den rausbekomme, bzw. wie ich den Fehler beheben kann, dass das Programm richtig läuft.
Folgendes:
Wöchentlicher Essensplan.. Über den Tabellen mit dem Essen soll der jeweilige Wochentag stehen. Z.B. Monday Menu, Tuesday Menu usw. Das ganze soll via array funktionieren. Arrays sind nun leider immer noch nicht mein Ding. Aber guckt es euch einfach mal an. Danke.
PHP:
//Connect to Database
$db = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
mysqli_set_charset($db, "utf8");

$sql="SELECT menu1,menu2,menu3,menu4,menu5 FROM monday UNION
SELECT menu1,menu2,menu3,menu4,menu5 FROM tuesday UNION
SELECT menu1,menu2,menu3,menu4,menu5 FROM wednesday UNION
SELECT menu1,menu2,menu3,menu4,menu5 FROM thursday UNION
SELECT menu1,menu2,menu3,menu4,menu5 FROM friday";
$cw=date("W")+1;
$result=mysqli_query($db,$sql);


echo'<div align="center"><h3>Here you can choose and order the menu for calendar week '.$cw.'</h3></div>';

$wd1 = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday');//(date("l"));
foreach($wd1 as $wd){

while($abt=mysqli_fetch_array($result)){

//$wd = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday');//(date("l"));


//$wd=($wd1[0]++);

//print menu for weekdays
  
echo '<table border="1" cellpadding="1" cellspacing="1">';
    echo'<tr>';
        //foreach($wd as $wd1)
        echo'<colspan=3><b>'.$wd. ' Menu</b>';
    echo'</tr>';
    echo'<tr>';
        echo'<td width="30px"><input type="checkbox" name="choose" style="vertical-align: middle; margin: 7px;"></td>';
        echo'<td width="40px" style="text-align: center">M1</td>';
        echo'<td><b>'.$abt['menu1'].'</b></td>';
    echo'</tr>';
    echo'<tr>';
        echo'<td><input type="checkbox" name="choose" style="vertical-align: middle; margin: 7px;"></td>';
        echo'<td style="text-align: center">M2</td>';
        echo'<td><b>'.$abt['menu2'].'</b></td>';
    echo'</tr>';
    echo'<tr>';
        echo'<td><input type="checkbox" name="choose" style="vertical-align: middle; margin: 7px;"></td>';
        echo'<td style="text-align: center">M3</td>';
        echo'<td><b>'.$abt['menu3'].'</b></td>';
    echo'</tr>';
    echo'<tr>';
        echo'<td><input type="checkbox" name="choose" style="vertical-align: middle; margin: 7px;"></td>';
        echo'<td style="text-align: center">M4</td>';
        echo'<td><b>'.$abt['menu4'].'</b></td>';
    echo'</tr>';
    echo'<tr>';
        echo'<td><input type="checkbox" name="choose" style="vertical-align: middle; margin: 7px;"></td>';
        echo'<td style="text-align: center">M5</td>';
        echo'<td><b>'.$abt['menu5'].'</b></td>';
    echo'</tr>';
echo'</table>';
echo'<br />';
echo'<br />';
}
$wd1=$wd1++;
}

mysqli_close($db);
}
Ich hab einfach mal meine Versuche drin gelassen, dass Ihr eventuell mein Vorhaben besser verstehen könnt.
Also bisher habe ich nur hinbekommen, dass über jeder Tabelle entweder Monday Menu steht oder "Monday Menu Tuesday Menu Wednesday Menu Thursday Menu Friday Menu". Also bisher war ich nicht so erfolgreich.
Danke nochmals.
 
item: Du gehst für jeden Wochentag alle Eitnräge der DB durch. Jedoch ist in $result der Datenzeige nach dem Montag am Ende und wird so nicht nochmals die Resultate durchgehen.

item: Mit dem UNION werden alle Tage untereinander dargestellt. Will heissen, beim ersten Duchlauf kommen die Menüs für alle Tagel. Ergo müssten so eigentlich alle Menüs (Montag bis Freitag) un derHTML-tabelle für Montag stehen.

item: Deine schleife über $wd1 kann nicht gehen, da du nur $wd hast, nicht jedoch $wd1

item: Pro Wochentag eine Tabelle ist ein seeeeehr ungeschickte Struktur

Das Sind Dinge die du so nicht willst.

Das Konstrukct sollte eher etwa so aussehen

Code:
Schleife über die Tabelle (Jeder Eintrag ein Wochentag
    Auslesen der überschrift
    Ausgaben Menü 1-5
Ende Schleife

Also etwa so
PHP:
$wd = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday');//(date("l"));

while($day = mysqli_fetch_array($result)){
	//oberster Eintrag aus der Titelarray nehmen
	$title = array_shift($wd);
	echo '<table border="1" cellpadding="1" cellspacing="1">';
    echo'<tr>';
    echo "<th colspan=3>{$title}Menu</th>";
    echo'</tr>';
    for($i=1; $i<=5, $i++){
    	$menu = $day["menu{$i}"];
	    echo'<tr>';
	        echo '<td width="30px"><input type="checkbox" name="choose" style="vertical-align: middle; margin: 7px;"></td>';
	        echo "<td width='40px' style='text-align: center'>M{$i}</td>";
	        echo "<td><b>{$menu}</b></td>";
	    echo'</tr>';    	
    }
    echo '</table>';
}
 
Zuletzt bearbeitet:
Mal Grunsätzlich.
Du verlierst so immer die alten Wochen. Die neue muss am Samstag oder Sonntag eingetragen werden, da du sonst die alten überschreibst (du filterst ja nirgens nach Datum oder Woche).

Code:
Tabelle menus
id | date       | mnr | menu
----------------------------
1  | 2010-11-08 | 1   | menu1
2  | 2010-11-08 | 2   | menu2
3  | 2010-11-08 | 3   | menu3
4  | 2010-11-09 | 1   | menu1
5  | 2010-11-09 | 2   | menu2
6  | 2010-11-09 | 3   | menu3
wobei
id:auto-wert
date: Datum (Spaltenformat date)
mnr: Nummer des Menus
menu: Die Menübeschreibung

Und so kannst du ganz einfach die Menüs der aktuellen Woche auslesen
SQL:
SELECT 
	date, 
	WEEKDAY(date) AS wochentag,  --Wochentag: Montag = 0
	mnr, 
	menu	
FROM 
	menus
WHERE 
	WEEK(date) = WEEK(SYSDATE())
ORDER BY 
	date, 
	mnr

Und so kannst dus nachher sauber auslesen
PHP:
$wd = array('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday');//(date("l"));
$date = NULL;
while($row= mysqli_fetch_array($result)){
	if($date != $row['date']){
		echo '<table border="1" cellpadding="1" cellspacing="1">';
	    echo "<tr><th colspan=3>{$wd[$row['wochentag']]}</th></tr>";
	}
    echo '<tr>';
    echo '<td width="30px"><input type="checkbox" name="choose" style="vertical-align: middle; margin: 7px;"></td>';
    echo "<td width='40px' style='text-align: center'>M{$row['mnr']}</td>";
    echo "<td><b>{$row['menu']}</b></td>";
    echo '</tr>';    	
	if($date != $row['date']){
    	echo '</table>';
    	$date = $row['date'];
    }
}
 
Zuletzt bearbeitet von einem Moderator:
Oh man. Über das Überschreiben hab ich noch gar nicht nachgedacht. Danke. Ich glaub ich lass es einfach. Ist doch alles sch..... :)
 
Zurück