Problem wenn kein mehrere Eintrag Einträge für Monat vorhanden
Nachdem ich jetzt dank der Mithilfe eines Users den Eintrag passend zum Tag anzeigen lasssen kann habe ich ein neues problem.
Wenn für den ausgewählten Monat kein Datenbankeintrag vorhanden ist, wird dieser garnicht erst angezeigt.
Hier meine Funktionen:
Habe ich mehrere einträge für einen monat gibt er mir für jeden eintrag einen Kallender aus!<-Problem behoben indem die While-schleife in zeile 33 endet!
Ich habe bislang noch keine lösung gefunden. Danke für jede mithilfe und für jeden Lösungsansatz
Wenn für den ausgewählten Monat kein Datenbankeintrag vorhanden ist, wird dieser garnicht erst angezeigt.
Hier meine Funktionen:
function print_table_cell_with_data( $i, &$refArrEvents ) // $refArrEvents ist "nur" eine Referenz(&)/Verknüpfung auf das originale Array
{
echo"<td id='border'>". $i ."<br>";
if( isset($refArrEvents[$i]) && !empty($refArrEvents[$i]) ) // ist Index vorhanden UND enthält es Daten
{
// alle Daten ausgeben
foreach( $refArrEvents[$i] as $refArrEvent )
{
echo $refArrEvent['ma_wish'].'<br>';
}
}
echo "</td>";
return NULL;
}
function january($username){
require_once("class.editcal.php");
$cal_dates = new CALENDAR();
$date_year = getdate();
$year = $date_year['year'];
$days = 31;
$mnum = 1;
$i = 1;
$user = $username;
$work = $cal_dates->runcQuery("SELECT id, mitarbeiter, cal_day, cal_mon, cal_year, ma_wish FROM ma_wishes WHERE mitarbeiter=:uname AND cal_mon=$mnum AND cal_year=$year");
$work->execute(array(":uname"=>$user));
echo"<center>";
echo"<table id='month'>";
echo"<tr>";
while($workRow = $work->fetch()) {
$events[$workRow['cal_day']] = $workRow;}
if(empty($events)){
$events[$workRow['ma_wishes']] = ' ';
}
$intLastDayOfMonth = 31; // kann man sicha uch berechnen lassen ;)
for($i=1; $i<=$intLastDayOfMonth; $i++) // FEHLER KORRIGIERT ( < und <= )
{
$this->print_table_cell_with_data( $i, $events );
if( 0==($i%7) )
{
echo '</tr><tr>';
}
}
echo"</tr>";
echo"</table>";
echo"</center>";
// verschoben nach zeile 33->}
}
Habe ich mehrere einträge für einen monat gibt er mir für jeden eintrag einen Kallender aus!<-Problem behoben indem die While-schleife in zeile 33 endet!
Ich habe bislang noch keine lösung gefunden. Danke für jede mithilfe und für jeden Lösungsansatz
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 364433
Url: https://administrator.de/contentid/364433
Ausgedruckt am: 17.11.2024 um 09:11 Uhr
2 Kommentare
Neuester Kommentar
Hey.
Erstmal für alle anderen, die vorherige Frage: Zuordnung von Daten aus einer Mysql-Tabelle zum passendem Tag
Zweitens. um deiner selbst willen, schau mal nach Codeformatierung. Mindestens aber das gleichmäßige einrücken. Das erhöht nicht nur die Lesbarkeit für Dich und Andere Beteiligten und reduziert Fehler da offensichtlicher, sondern erhöht auch die Hilfsbereitschaft in Foren allgemein. Denn i.d.R. hat niemend Lust und Zeit den Code für jemand Anderen aufzuräumen.
Teil deines Problems ist dieser Part:
Hier wird der Codeblock "{ ... }" nur durchlaufen wenn es mindestens ein Datensatz zur Abfrage gefunden wurde. Ergänzend: Der Codeblock wird für jeden gefundenen Datensatz ausgeführt.
0 DS = 0 Ausführunden
10 DS = 10 Ausführungen
1.000 DS = 1.000 Ausführungen.
Da in diesem Codeblock auch die
In deiner Ursprünglichen Fragestellung hast du das etwas anders stehen so das ich auch von anderen Gegebenheiten ausgegangen bin.
Für mich hat es also das Array $events, in denen alle ausgelesenen DS stehen. beteits gegeben.
Daten Sammeln, Aufbereiten, Analysieren und Ausgeben hat bis jetzt für mich immer ganz gut funktioniert.
Also kannst du die
Und für die Ausgabe brauchst du dann nur einmalig die
Unterm Strich:
Es werden die Daten aus der Datenbank gelesen und in
Dann wird die Tabelle mit der
Das sollte jetzt etwa so aussehen:
~Arano
Erstmal für alle anderen, die vorherige Frage: Zuordnung von Daten aus einer Mysql-Tabelle zum passendem Tag
Zweitens. um deiner selbst willen, schau mal nach Codeformatierung. Mindestens aber das gleichmäßige einrücken. Das erhöht nicht nur die Lesbarkeit für Dich und Andere Beteiligten und reduziert Fehler da offensichtlicher, sondern erhöht auch die Hilfsbereitschaft in Foren allgemein. Denn i.d.R. hat niemend Lust und Zeit den Code für jemand Anderen aufzuräumen.
Teil deines Problems ist dieser Part:
while($workRow = $work->fetch())
{
0 DS = 0 Ausführunden
10 DS = 10 Ausführungen
1.000 DS = 1.000 Ausführungen.
Da in diesem Codeblock auch die
for
-Schleife (1-31) steht, wird diese für jeden DS ausgeführt.In deiner Ursprünglichen Fragestellung hast du das etwas anders stehen so das ich auch von anderen Gegebenheiten ausgegangen bin.
while($workRow = ...) { $events[$workRow['cal_day'] /* == 1..31 */] = $row; }
Daten Sammeln, Aufbereiten, Analysieren und Ausgeben hat bis jetzt für mich immer ganz gut funktioniert.
Also kannst du die
while
-Schleife so wieder implementieren. (Ergänzt durch deine Änderung bzgl. fetch()
)Und für die Ausgabe brauchst du dann nur einmalig die
for
-Schleife um dir die Kalendertage auszugeben. Dabei wird das Erzeugen "des Tages" von der zusätzlichen Funktion print_table_cell_with_data()
übernommen.Unterm Strich:
Es werden die Daten aus der Datenbank gelesen und in
$events
gepeichert.Dann wird die Tabelle mit der
for
-Schleife generiert und für jeden Tag wird im Array-$events
nach Datensätzen geschaut die zusätzlich mit ausgegeben werden könnten.Das sollte jetzt etwa so aussehen:
<?php
// vim: set ts=4:
// content:364400 - [content:364433]
function print_table_cell_with_data( $i, &$refArrEvents ) // $refArrEvents ist "nur" eine Referenz(&)/Verknüpfung auf das originale Array
{
echo "<td id='border'>". $i ."<br>";
if( isset($refArrEvents[$i]) && !empty($refArrEvents[$i]) ) // ist Index vorhanden UND enthält es Daten
{
// alle Daten ausgeben
foreach( $refArrEvents[$i] as $refArrEvent )
{
echo $refArrEvent['ma_wish'].'<br>';
}
}
echo "</td>";
return NULL;
}
function january($username)
{
require_once("class.editcal.php");
$cal_dates = new CALENDAR();
$date_year = getdate();
$year = $date_year['year'];
$days = 31;
$mnum = 1;
$i = 1;
$user = $username;
// DATEN SAMMELN
$work = $cal_dates->runcQuery("SELECT id, mitarbeiter, cal_day, cal_mon, cal_year, ma_wish FROM ma_wishes WHERE mitarbeiter=:uname AND cal_mon=$mnum AND cal_year=$year");
$work->execute(array(":uname"=>$user));
// DATEN AUFBEREITEN
$events = array();
while($workRow = $work->fetch())
{
$events[$workRow['cal_day']] = $workRow;
}
// DATEN ANALYSIEREN (kein bedarf)
// DATEN AUSGEBEN
// Tabellen-/Kalenderkopf
echo"<center>";
echo"<table id='month'>";
echo"<tr>";
// Tabellenzellen / Kalendertage: 1-$days
//$intLastDayOfMonth = 31; // kann man sicha uch berechnen lassen ;)
// Ich habe deine VORHANDENE Variable $days in die for-Schleife aufgenommen
for($i=1; $i<=$days; $i++) // FEHLER KORRIGIERT ( < und <= )
{
$this->print_table_cell_with_data( $i, $events );
// Neue Tabellenzeile wenn 7. Tag
if( 0==($i%7) )
{
echo '</tr><tr>';
}
}
// Tabellen-/ Kalenderende
echo"</tr>";
echo"</table>";
echo"</center>";
}
?>
~Arano