thealex
Goto Top

Zuordnung von Daten aus einer Mysql-Tabelle zum passendem Tag

Hallo erstmal an alle,

Derzeit versuche ich einen Kalender zu erstellen, um es etwas übersichtlicher zu gestallten baue ich den Php-Code um. Auch um den Tagen Daten aus einer MySql-Tabelle zuordnen zu können.

Dies ist mein bisheriger Php-Code:

function february($username){
$date_year = getdate();
$year = $date_year['year'];  
$days = 28;
$mnum = 2;
$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 = ...) { $events[$workRow['cal_day'] /* == 1..31 */] = $row; }  
 $i++; 
echo"<td id='border'>".  $i ."</td>";  
$i++;  
echo"<td id='border'>".  $i ."</td>";  
$i++;
echo"<td id='border'>".  $i ."</td>";  
$i++;
echo"<td id='border'>".  $i ."</td>";  
$i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;   
echo"</tr>";  
echo"<tr>";  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;     
echo"</tr>";  
echo"<tr>";  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
$i++;
echo"</tr>";  
echo"<tr>";  
echo"<td id='border'>".  $i ."</td>";  
$i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
 $i++;  
echo"<td id='border'>".  $i ."</td>";  
echo"</tr>";  
echo"<tr>";  
echo"<td id='noborder'></td>";  
echo"<td id='noborder'></td>";  
echo"<td id='noborder'></td>";  
echo"<td id='noborder'></td>";  
echo"<td id='noborder'></td>";  
echo"<td id='noborder'></td>";  
echo"<td id='noborder'></td>";  
echo"</tr>";  
echo"</table>";  
echo"</center>";  
		
		
		
		}

Ich bin über jeden Hinweis und jede Lösung dankbar!

Content-Key: 364400

Url: https://administrator.de/contentid/364400

Printed on: April 20, 2024 at 03:04 o'clock

Member: Arano
Arano Feb 10, 2018 updated at 16:46:14 (UTC)
Goto Top
Hallo TheAlex,
du sag einmal... wie lautet überhaupt die Frage ?
Helfen könne wir nur wenn wir wissen was das Problem ist ;)

Allerdings sehe ich da mehrere Probleme in deinem Code.
z.B.
  • In Zeile 6 definiert du $i=1, in Zeile 14 erhöhst du i auf 2 $i++ und in 15 gibst du i zum ersten mal aus, da ist i aber 2 ! Müsste für den Beginn des Monats ja aber 1 sein.
  • Ebenfalls Zeile 15. Ich denke du gehst hier davon aus, das der Monat immer mit MONTAG dem 1. beginnt, dem ist aber nicht so. Der 01.02.2018 war ein Donnerstag.
  • Zähle ich 4 Tabellen-Zeilen die vermutlich die Wochen darstellen sollen. aber auch hier: der Februar hat 5 Wochen, DIESES Jahr - 02.2021 sind es "nur" 4 Wochen.
  • Eine HTML-ID ist ein EINDEUTIGER Bezeichner, darf also nur ein EINZIGESMAL vergeben werden.

Vielleicht wäre es besser wenn du das erstmal als "Apothekenkalender" umsetzt, also als Liste von Oben(1.) nach Unten(28,29,30,31) ?
Oder zumindest erst den Kalender und dann die Inhalte bzw. nicht alles auf einmal ;)

Naja, aber wie gefragt: Wo hängst du/es denn gerade / Wo sollen/können wir dir helfen ?


~Arano
Member: TheAlex
TheAlex Feb 10, 2018 updated at 15:56:10 (UTC)
Goto Top
ich möchte den table so anpassen das er in der while-schleife identisch aussieht. Das mit dem $i++ auf 2 ist ne fehlende zeile.

Das endergebnis soll sein das er wenn in der Datenbank zu dem Tag ($i) etwas voliegt er dies unter dem tag ausgibt.

Begonnen habe ich mit der tabellenansicht, was auch geklappt hat. jetzt soll halt aus einer datenbank noch wenn vorhanden ein eintag ausgegeben werden.
Member: Arano
Arano Feb 10, 2018 at 17:20:03 (UTC)
Goto Top
Hallo, najut dann ma los.

echo"<td id='border'>".  $i ."</td>"  
Im Prinzip musst du ja "nur" an der Stelle an der du $i ausgibst auf das $event-Array mit dem richtigem Index zugreifen - falls dieses nicht leer ist.
echo"<td id='border'>". $i ."<br>";  
  if( isset($events[$i]) && !empty($events[$i]) ) // ist Index vorhanden UND enthält es Daten
  {
    // alle Daten ausgeben
    foreach( $events[$i] as $arrEvent )
    {
      echo $arrEvent['ma_wish'].'<br>';  
    }
  }
echo "</td>";  

Allerdings wird dein Quelltext nun sehr sehr sehr lang. Und wenn du dann eine Kleinigkeit ändern möchtest, musst du ggf alle Stellen ablaufen.
Besser wäre es wohl du steckst das Ganze in eine neue Funktion print_table_cell_with_data( $i, $events[$i])
Diese könntest du dann z.B. auch von einer for-Schleife aufrufen lassen.
  // SOLLTE Anzahl"intLastDayOfMonth" Tabellenzellen erzeugen die alle 7x durch Tabellenzeilenende und -start getrennt sind 
  // Sprich 4-5 Zeilen mit je 7 Zellen, je nach Tagesanzahl pro Monat
  for( $i=1, $i<$intLastDayOfMonth; $i++ )
  {
    print_table_cell_with_data( $i, $events[$i] );
    if( 0==($i%7) )
    {
      echo '</tr><tr>';  
    }
  }
Und wenn du nun etwas ändern möchtest, muss du dies nur noch in der Funktion machen.


~Arano
Member: TheAlex
TheAlex Feb 10, 2018 at 17:30:03 (UTC)
Goto Top
danke für den Code, jedoch stehe ich etwas auf dem schlauch, weiß gerade nicht wie ich das einbauen soll.
Member: Arano
Solution Arano Feb 10, 2018 at 18:20:38 (UTC)
Goto Top
Hey.

Also zuerst wird ein Backup gemacht, wie immer.
Dann erstellst du eine neue Funktion:
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;
}
und ersetzt, schätzungsweise, die Zeile 14 - 82 mit der for-Schleife:
$intLastDayOfMonth = 28; // kann man sicha uch berechnen lassen ;)
for( $i=1, $i<=$intLastDayOfMonth; $i++ ) // FEHLER KORRIGIERT ( < und <= )
{
  print_table_cell_with_data( $i, $events );
  if( 0==($i%7) )
  {
     echo '</tr><tr>';  
  }
}

So oder so ähnlich könnte das funktionieren.


~arano
Member: TheAlex
TheAlex Feb 11, 2018 at 14:08:01 (UTC)
Goto Top
Also habe jetzt nachdem ich ein wenig geschlafen habe den code folgendermaßen geändert:

function february($username){
					$date_year = getdate();
					$year = $date_year['year'];  
					$days = 28;
					$mnum = 2;
					$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 = ...) { $events[$workRow['cal_day'] /* == 1..31 */] = $row; }   
					$intLastDayOfMonth = 28; // kann man sicha uch berechnen lassen ;)
					for($i=1; $i<=$intLastDayOfMonth; $i++;) // FEHLER KORRIGIERT ( < und <= )
					{
					print_table_cell_with_data( $i, $events );
					if( 0==($i%7) )
					{
					echo '</tr><tr>';  
					}
					}
					echo"</table>";  
					echo"</center>";  
		
		
		
		}

und die neue function am anfang der seite ist so:

		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;
}

Jedoch bin ich mir immernoch nicht sicher was ich mit dieser zeile genau machen soll:
while($workRow = ...) { $events[$workRow['cal_day'] /* == 1..31 */] = $row; }  
Member: TheAlex
TheAlex Feb 11, 2018 at 14:46:14 (UTC)
Goto Top
nachdem ich ein paar minuten mit dem fehlerlog gegen die fehler angekämpft habe, bekam ich dank deine Codes meinen Kalender zum laufen!
Member: Arano
Arano Feb 11, 2018 at 18:11:33 (UTC)
Goto Top
Hallöchen

Zitat von @TheAlex:

Jedoch bin ich mir immernoch nicht sicher was ich mit dieser zeile genau machen soll:
while($workRow = ...) { $events[$workRow['cal_day'] /* == 1..31 */] = $row; }  

Ah HA !
Das ist doch mal eine richtige Frage zu einem Problem, die hättest du am besten gleich zu Anfang gestellt.
Ich habe das nämlich nicht als Problem für dich erkannt und darum übergangen.
Nun, da du jetzt den nächsten Beitrag erstellt hast und dieses dort auch behandelt wird, lass uns doch dort weiter machen: Problem wenn kein mehrere Eintrag Einträge für Monat vorhanden


~Arano