Gruppenwechsel
conni
- php
Hallo zusammen,
ich möchte in einer Datenbankausgabe eine Gruppenwechsel realisieren. Habe auch einige Hinweise dazu im Forum gefunden, kriege es aber nicht angepasst.
In einer Mysql-DB sind die Seminare in verschiedenen Tabellen gespeichert. Unter anderem auch der Beginn des jeweiligen Seminars. Nun möchte ich eine Anzeige aller Seminare gruppiert nach Monaten erzeugen.
Der Quellcodeauszug sieht so aus:
$result_vorschau = mysql_query ("SELECT s.id_seminar, t.von, ...
FROM seminar s, termine t, ...
WHERE ...
ORDER BY t.von")
or die (mysql_error());
while ($row = mysql_fetch_array ($result_vorschau)) {
//Ermitteln des Monats - klappt
$suchmuster = array ("/(19|20)(\d{2})-(\d{1,2})-(\d{1,2})/", "/^\s*{(\w+)}\s*=/");
$ersetzenmonat = array ("\3", "$\1 =");
$monat = preg_replace($suchmuster, $ersetzenmonat, $row["von"]);
echo " Monat: ".$monat;
//Umwandlung der Daten in deutsches Format
$ersetzen = array ("\4.\3.\1\2", "$\1 =");
$von = preg_replace($suchmuster, $ersetzen, $row["von"]);
// Ab hier bräuchte ich Hilfe
$gruppe = ''; //Leeres Array erzeugen
if ($gruppe != $monat)
{
/* Überschrift ausgeben und Gruppe für nächsten Vergleich merken */
echo "<tr><td colspan='5'><hr><b>" . $monat . " gruppe: ".$gruppe."</b></td></tr>\n";
$gruppe = $monat;
echo "<tr><td colspan='5'><b>gruppe: ".$gruppe."</b></td></tr>\n";
}
/* Zeile immer ausgeben - nur manchmal davor eben die Überschrift */
?>
<tr>
<td><?php echo $row['id_termin'].":".$row['art_nr']."".$row['hgr_kurz'].".".$row['zielgr_kurz']." ".$row['sem_nr']; ?></td>
<td><?php echo " von: ".$von." bis ".$bis; ?></td>
<td><?php echo $frist; ?></td>
<td><?php echo $row['zielgruppe']." ".$row['zusatz']; ?></td>
<td><?php echo $row['haus'].", ".$row['raum']; ?></td>
</tr>
<?php } ?>
Als Ergebnis werden mir alle Datensätze chronologisch angezeigt, immer mit "Überschriftszeile".
Ich würde mich freuen, wenn mir da jemand auf die Sprünge helfen könnte.
Gruß
Conni
Moin!
Ich entnehme Deinem Skript, dass die Datumsangaben im ISO-Format (YYYY-MM-DD) gespeichert sind.
Ok. Welchen Typ hat Dein Datenfeld?
Ist es vom Typ datetime? Dann beginne hier zu lesen:
http://dev.mysql.com/doc/mysql/de/datetime.html
dann weiter mit:
http://dev.mysql.com/doc/mysql/de/date-calculations.html (besonders ganz unten ... MONTH())
Dazu:
http://dev.mysql.com/doc/mysql/de/date-and-time-functions.html
und nun zum 'Gruppieren':
http://dev.mysql.com/doc/mysql/de/select.html
SELECT ,,,,MOUNTH('t.von') AS monat, YEAR('t.von') AS Jahr
FROM
...
ORDER BY Jahr, Monat
...
In der Konsequenz kannst Du auf den inperformanten Regex verzichten und auch das Sortieren / Gruppieren dem DBMS übertragen. Das hat dafür heftig schnelle Routinen.
Du kannst die Funktionen auch in der WHERE Klausel verwenden:
SELECT ,,,,MOUNTH('t.von') AS monat, YEAR('t.von') AS Jahr
...
WHERE Monat=12 AND Jahr=2005
Du kannst also die Arbeit beruhigt der Datenbank überlassen, die macht das schon.
Schreibe den Termin nicht einfach zum Useragent, sondern speichere das Ergebnis in einen Array:
$termin=array();
while ($row = mysql_fetch_array ($result_vorschau)) {
$termin[]=array();
...
$termin[]['Monat']=$row['Monat'];
$termin[]['Jahr']=$row['Jahr'];
# Nur wenn Du die Monate brauchst, an denen was los ist:
#=======================================================
$arJahreMonate[$row['Monat'].'-'.$row['Jahre']]=true;
# erzeugt sowas wie $arJahre_Monate[2005-09]=true;
# Dieses Array kannst Du später mit
# array_keys ($arJahreMonate) ausgeben.
# http://de2.php.net/manual/de/function.array-keys.php
...
}
$arJahreMonateListe= array_keys ($arJahreMonate);
foreach ($arJahreMonate AS $strJahrMonat) {
}
echo $arJahreMonate['2005-12'];
Ich denke, das genügt als Sammlung von Denkanstößen.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo,
danke erstmal für die späte/frühe Antwort.
Ich entnehme Deinem Skript, dass die Datumsangaben im ISO-Format (YYYY-MM-DD) gespeichert sind.
Ja
SELECT ,,,,MOUNTH('t.von') AS monat, YEAR('t.von') AS Jahr
FROM
...
ORDER BY Jahr, Monat
...
Hab ich versucht. Aber es klappr leider schon an dieser Stelle nicht. Meine nun stark verkürzte Datenbankabfrage:
$result_vorschau = mysql_query ("SELECT s.id_seminar,
t.von, MONTH('t.von') AS monat, YEAR('t.von') AS jahr
FROM seminar s, termine t
WHERE t.id_seminar = s.id_seminar
ORDER BY jahr, monat")
or die (mysql_error());
while ($row = mysql_fetch_array ($result_vorschau)) {
echo " Monate: ".$row['monat']." von: ".$row['von'];
}
zeigt nur die "von-Termine" im sql-Format an.
Liegt das vielleicht an der sql-Version? Ich verwende MySQL 4.0.24.
Viele Grüße
Conni
Moin!
$result_vorschau = mysql_query ("SELECT s.id_seminar,
t.von, MONTH('t.von') AS monat, YEAR('t.von') AS jahr
zeigt nur die "von-Termine" im sql-Format an.
Mein Fehler. Die Spaltennamen werden nicht gequotet:
$result_vorschau = mysql_query ("SELECT s.id_seminar,
t.von, MONTH(t.von) AS monat, YEAR(t.von) AS jahr
So sollte es 'tun'.
Ist spät....
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo nochmal,
$result_vorschau = mysql_query ("SELECT s.id_seminar,
t.von, MONTH(t.von) AS monat, YEAR(t.von) AS jahr
So sollte es 'tun'.
Ja, das hat geklappt.
Ist spät....
Schon toll, dass um diese Zeit immer noch Leute hier anderen helfen!
Allerdings ist die Anzeige nicht wie gewünscht, d.h. manche Datensätze werden 1 Mal, manche 2 Mal oder 3 Mal ausgegeben. An der Select-Abfrage kann es wohl nicht liegen, denn wenn ich sie ohne den Versuch einer monatsweisen Anzeige durchlaufen lasse, kommt jede Veranstaltung nur ein Mal vor.
Ich hätte vor allen Dingen gerne vor oder nach jedem Monat eine visuelle Unterscheidung - bei mir erstmal eine horizontale Linie. Diese wird aber nach jedem Datensatz angezeigt.
Habe es mit deinem Quelltext versucht:
$termin=array();
while ($row = mysql_fetch_array ($result_vorschau)) {
$termin[]=array();
$termin[]['monat']=$row['monat'];
$termin[]['jahr']=$row['jahr'];
$arJahreMonate[$row['monat'].'-'.$row['jahr']]=true;
$arJahreMonateListe= array_keys ($arJahreMonate);
foreach ($arJahreMonate AS $strJahrMonat){
echo "<tr><td colspan='5'><hr><b>" . $row['monat'] ."</b></td></tr>\n";
?>
<tr>
<td><?php echo $row['id_termin'].":".$row['art_nr']."".$row['hgr_kurz'].".".$row['zielgr_kurz']." ".$row['sem_nr']; ?></td>
<td><?php echo " von: ".$von." bis ".$bis; ?></td>
<td><?php echo $frist; ?></td>
<td><?php echo $row['zielgruppe']." ".$row['zusatz']; ?></td>
<td><?php echo $row['haus'].", ".$row['raum']; ?></td>
</tr>
<?php }}
Ich kann da keinen Fehler finden, muss aber gestehen, dass ich nicht unbedingt der PHP-Überflieger bin.
Viele Grüße
conni
Moin!
Allerdings ist die Anzeige nicht wie gewünscht, d.h. manche Datensätze werden 1 Mal, manche 2 Mal oder 3 Mal ausgegeben. An der Select-Abfrage kann es wohl nicht liegen, denn wenn ich sie ohne den Versuch einer monatsweisen Anzeige durchlaufen lasse, kommt jede Veranstaltung nur ein Mal vor.
Ich hätte vor allen Dingen gerne vor oder nach jedem Monat eine visuelle Unterscheidung - bei mir erstmal eine horizontale Linie. Diese wird aber nach jedem Datensatz angezeigt.
Habe es mit deinem Quelltext versucht:
$termin=array();
while ($row = mysql_fetch_array ($result_vorschau)) {$termin[]=array();
$termin[]['monat']=$row['monat'];
$termin[]['jahr']=$row['jahr'];$arJahreMonate[$row['monat'].'-'.$row['jahr']]=true;
}
$arJahreMonateListe= array_keys ($arJahreMonate);
foreach ($arJahreMonate AS $strJahrMonat) {
echo "<tr style='border-top:1px solid gray;'><td colspan='5'><strong>" . $row['monat'] ."</strong></td></tr>\n";
?>
<tr>
<td><?php echo $row['id_termin'].":".$row['art_nr']."".$row['hgr_kurz'].".".$row['zielgr_kurz']." ".$row['sem_nr']; ?></td>
<td><?php echo " von: ".$von." bis ".$bis; ?></td>
<td><?php echo $frist; ?></td>
<td><?php echo $row['zielgruppe']." ".$row['zusatz']; ?></td>
<td><?php echo $row['haus'].", ".$row['raum']; ?></td>
</tr>
<?php }
Ich kann da keinen Fehler finden, muss aber gestehen, dass ich nicht unbedingt der PHP-Überflieger bin.
Die Brackets... Du hast die Klammern zwar syntaktisch richtig, aber logisch falsch geschlossen. Das liegt zumeist an der Uhrzeit... Übermüdet mache ich selbst auch mehr Fehler, als wenn ich fit bin.
Zu Deiner 'Linie': Wie soll die denn aussehen?
Ich mal <tr style='border-top:1px solid gray;'>, das von Dir verwendete <hr> sollte nicht an der gewünschten Stelle, sondern sonstwo, zumeist über der Tabelle angezeigt werden.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Guten Morgen,
danke erstmal.
Die Brackets... Du hast die Klammern zwar syntaktisch richtig, aber logisch falsch geschlossen. Das liegt zumeist an der Uhrzeit...
Bei mir glaube ich das langsam nicht mehr. Egal, wie ich die Klammern setze, es kommt nicht das Richtige raus.
Mit:
$termin=array();
while ($row = mysql_fetch_array ($result_vorschau)) {
$termin[]=array();
$termin[]['monat']=$row['monat'];
$termin[]['jahr']=$row['jahr'];
$arJahreMonate[$row['monat'].'-'.$row['jahr']]=true;
}
$arJahreMonateListe= array_keys ($arJahreMonate);
foreach ($arJahreMonate AS $strJahrMonat) {
echo "<tr style='border-top:1px solid gray;'><td colspan='5'><strong>" . $row['monat'] ."</strong></td></tr>\n";
?>
<tr>
<td><?php echo $row['id_termin'].":".$row['art_nr']."".$row['hgr_kurz'].".".$row['zielgr_kurz']." ".$row['sem_nr']; ?></td>
<td><?php echo " von: ".$von." bis ".$bis; ?></td>
<td><?php echo $frist; ?></td>
<td><?php echo $row['zielgruppe']." ".$row['zusatz']; ?></td>
<td><?php echo $row['haus'].", ".$row['raum']; ?></td>
</tr>
<?php }
werden nur noch drei leere Tabellenzeilen, statt 7 angezeigt.
Die Zeile mit dem grauen oberen Rahmen kommt gar nicht vor.
Zu Deiner 'Linie': Wie soll die denn aussehen?
Das ist mir erstmal egal. Das kriege ich dann mit HTML und CSS schon hin. Nur PHP ist halt nicht so einfach (ist ja auch keine Formatierungssprache).
Wenn du mir da noch mal helfen könntest, wär ich wirklich froh.
Viele Grüße
conni
Moin!
<td><?php echo $row['id_termin'].":".$row['art_nr']."".$row['hgr_kurz'].".".$row['zielgr_kurz']." ".$row['sem_nr']; ?></td>
<td><?php echo " von: ".$von." bis ".$bis; ?></td>
<td><?php echo $frist; ?></td>
<td><?php echo $row['zielgruppe']." ".$row['zusatz']; ?></td>
<td><?php echo $row['haus'].", ".$row['raum']; ?></td>
</tr>
<?php }
Das wieder 'nur' ein logisches Problem. Überleg mal: $row ist 'erledigt', diesen Array könntest Du nach dem
while ($row = mysql_fetch_array ($result_vorschau)) {
}
mit unset ($row) löschen.
Alles, was Du jetzt noch brauchst sollte in $termin[] stehen. Wenn nicht schreib es rein.
foreach ($arJahreMonate AS $strJahrMonat) {
$arAuswahlTermin=explode('-',$strJahrMonat);
# Jetzt hast Du in $arAuswahlTermin[0] das Jahr und in $arAuswahlTermin[1] den Monat
echo "<tr style='border-top:1px solid gray;'><td colspan='5'><strong>" . $row['monat'] ."</strong></td></tr>\n";
foreach ($arTermine as $arTermin) {
# Bitte Plural/Einzahl beachten!
if (
($arTermin['jahr']==$arAuswahlTermin[0])
&&
($arTermin['monat']==$arAuswahlTermin[1])
{
echo '<td>'.$arTermin['id_termin'].':'.$arTermin['art_nr'].':'.$arTermin['hgr_kurz'].'.'.$arTermin['zielgr_kurz']." ".$arTermin['sem_nr'].'</td>';
} # end if
} # next $arTermine
} # next $arJahreMonate
Was passiert da?
In der While-Schleife bildest also bei der Auswertung des results zwei Arrays. Einer enthält:
$arJahreMonate= array('2004-01','2004-02','2004-03',...'2005-01','2004-01'...)
Der andere enthält:
$arTermine=array(0....n)
$arTermine[$x]['jahr']= wert aus $row
$arTermine[$x]['monat']=wert aus $row
...
$arTermine[$x]['zielgruppe']=wert aus $row['zielgruppe']
Nach Abarbeitung der Whileschleife ist (der Array) $row nutzlos
Jetzt nimmst Du in der ersten foreach-Schleife jedes einzelne Element von $arJahreMonate und splittest das in Monat und Jahr.
In der zweiten (eingeschlossenen ) foreach-Schleife nimmst Du jeden Termin und testest, ob dieser im Jahr und Monat liegt. (if-Bedingung)
Wenn ja: Ausgabe.
Sonst: nichts.
endif
next Termin
next MonatJahr
Damit solltest Du hübsch sortiert in der Reihenfolge die Termine nach Monat und Tag sortiert bekommen. Wenn nicht, dann sortiere den Array $arJahreMonate zusätzlich.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo nochmal,
leider war ich gestern offline und konnte erst heute wieder an meinem Problem rumknabbern.
Ich hoffe, es schaut nochmal jemand in dieses Posting und könnte mir auf die Sprünge helfen. Ich würde nur ungern ein Doppelposting loslassen.
Habe den Quelltext nun wie folgt angepasst:
while ($row = mysql_fetch_array ($result_vorschau)) {
$termin[]=array();
$termin[]['monat']=$row['monat'];
$termin[]['jahr']=$row['jahr'];
$arTermine[]= array();
$arTermine[]['jahr']= $row['jahr'];
$arTermine[]['monat']=$row['monat'];
$arTermine[]['id_termin']=$row['id_termin'];
...
$arTermine[]['zielgruppe']=$row['zielgruppe'];
$arJahreMonate[$row['monat'].'-'.$row['jahr']]=true;
$arJahreMonateListe= array_keys ($arJahreMonate);
}
unset($row);
$arAuswahlTermin=explode('-',$strJahrMonat);
foreach ($arJahreMonate as $strJahrMonat)
{
echo "<tr style='border-top:1px solid gray;'><td colspan='7'><strong> Monat: ". $arTermin['monat'] ."</strong></td></tr>\n";
foreach ($arTermine as $arTermin)
{
if (($arTermin['jahr']==$arAuswahlTermin[0])&&($arTermin['monat']==$arAuswahlTermin[1]))
{
echo "<tr>";
echo "<td class='dunkel'><b>".$arTermin['id_termin']."</b> ".$arTermin['art_nr']."".$arTermin['hgr_kurz'].".".$arTermin['zielgr_kurz']." ".$arTermin['sem_nr']."</td>";
echo "<td class='dunkel'>".$arTermin['von']." - ".$arTermin['bis']."</td>";
echo "<td class='dunkel'>".$arTermin['frist']."</td>";
echo "<td class='dunkel'>".$arTermin['thema']."</td>";
echo "<td class='dunkel'>".$arTermin['inhalt']."</td>";
echo "<td class='dunkel'>".$arTermin['zielgruppe']."</td>";
echo "</tr>";
} # end if
} # next $arTermine
} # next $arJahreMonate
Nun müssten doch alle meine Angaben aus der "while ($row = mysql_fetch_array ($result_vorschau))"-Schleife in einem Array abgelegt sein, welche ich unten in der eingeschlossenen foreach-Schleife abrufe.
Allerdings wird mir in der Anzeige jeder Wert um eine Zeile nach unten versetzt in die Tabelle geschrieben, d.h. jeder Datensatz "treppenförmig" dargestellt.
Die "Überschriftszeile" wird nur am Anfang gebildet, wobei dort auch $arTermin['monat'] nicht bekannt ist.
Ich hoffe, mir kann da nochmal jemand helfen...
In jedem Fall schonmal herzlichen Dank für die bisherigen Anregungen.
conni
Moin!
Ich würde nur ungern ein Doppelposting loslassen.
*öhem*
Nicht das ich nicht will, aber meine Logikbausteine sind nebst dem Abstaktionsvermögen schon schlafen gegangen. Ich schau mir das morgen das mal an.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Moin!
Habe den Quelltext nun wie folgt angepasst:
> while ($row = mysql_fetch_array ($result_vorschau)) {
>
> $termin[]=array();
> $termin[]['monat']=$row['monat'];
> $termin[]['jahr']=$row['jahr'];
>
> $arTermine[]= array();
> $arTermine[]['jahr']= $row['jahr'];
> $arTermine[]['monat']=$row['monat'];
> $arTermine[]['id_termin']=$row['id_termin'];
> ...
> $arTermine[]['zielgruppe']=$row['zielgruppe'];
>
> $arJahreMonate[$row['monat'].'-'.$row['jahr']]=true;
>
> $arJahreMonateListe= array_keys ($arJahreMonate);
> }
>
> unset($row);
> foreach ($arJahreMonate as $strJahrMonat)
> {
$arAuswahlTermin=explode('-',$strJahrMonat);
## verschoben die Zeile befand sich an einer Stelle, wo $strJahrMonat nicht gesetzt war. (logischer Fehler)
> ##echo "<tr style='border-top:1px solid gray;'><td colspan='7'><strong> Monat: ". $arTermin['monat'] ."</strong></td></tr>\n";
# $arTermin Monat ist leer...
echo " <tr style='border-top:1px solid gray;'><td colspan='7'><strong> Monat: ". $strJahrMonat ."</strong></td></tr>\n";
# in "strJahrMonat steht sowas wie 2005-10 willst Du das nicht verwende:
echo " <tr style='border-top:1px solid gray;'>\n <td colspan='7'><strong> Monat: ". $ar$AuswahlTermin[1].'/'.$AuswahlTermin[0] ."</strong></td>\n </tr>\n";
# sollte sowas wie 10/2005 liefern.
>
> foreach ($arTermine as $arTermin)
> {
> if (($arTermin['jahr']==$arAuswahlTermin[0])&&($arTermin['monat']==$arAuswahlTermin[1]))
> {
> echo "\n <tr>\n";
echo "<td class='dunkel' style='font-weight:bold;'>".$arTermin['id_termin']." ".$arTermin['art_nr']."".$arTermin['hgr_kurz'].".".$arTermin['zielgr_kurz']." ".$arTermin['sem_nr']."</td>";
# Benutze keine veralteten Tags, sondern CSS!
> echo " <td class='dunkel'>".$arTermin['von']." - ".$arTermin['bis']."</td>\n";
> echo " <td class='dunkel'>".$arTermin['frist']."</td>\n";
> echo " <td class='dunkel'>".$arTermin['thema']."</td>\n";
> echo " <td class='dunkel'>".$arTermin['inhalt']."</td>\n";
> echo " <td class='dunkel'>".$arTermin['zielgruppe']."</td>\n";
> echo " </tr>\n";
> } # end if
> } # next $arTermine
> } # next $arJahreMonate
>
Ich habe den Quelltext für Dich jetzt ordentlich eingerückt, wobei ich nicht sagen sagen kann, ob da nicht irgendwo ein [tab] ("/t") für Verrutschungen sorgte.
Ferner habe ich vor Ausgabe der HTML-Zeilen Leerzeichen eingefügt und am ende jeweils ein Zeilenumbruchszeichen.
Nun müssten doch alle meine Angaben aus der "while ($row = mysql_fetch_array ($result_vorschau))"-Schleife in einem Array abgelegt sein, welche ich unten in der eingeschlossenen foreach-Schleife abrufe.
Sieht so aus.
Allerdings wird mir in der Anzeige jeder Wert um eine Zeile nach unten versetzt in die Tabelle geschrieben, d.h. jeder Datensatz "treppenförmig" dargestellt.
Schau in den Quelltext des erzeugten HTML-Dokumentes und versuche herauszubekommen, was da nicht passt. Normalerweise ein Zeichen dafür, dass das </tr> nicht an der erwarteten Stelle steht oder von Invaliditäten im HTML(!)- Quelltext
Die "Überschriftszeile" wird nur am Anfang gebildet, wobei dort auch $arTermin['monat'] nicht bekannt ist.
Die Ursache habe ich oben beschrieben und korrigiert.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo schon wieder,
habe an dem (netterweise geposteten) Quelltext rumgewurstelt (leider nur nebenher, daher bin ich nicht die Schnellste):
...
~~~PHP
while ($row = mysql_fetch_array ($result_vorschau)) {
$termin[]=array();
$termin[]['monat']=$row['monat'];
$termin[]['jahr']=$row['jahr'];
»»
$arTermine[]= array();
$arTermine[]['monat']=$row['monat'];
$arTermine[]['jahr']= $row['jahr'];
$arTermine[]['id_termin']=$row['id_termin'];
$arTermine[]['art_nr']=$row['art_nr'];
...
»»
$arJahreMonate[$row['monat'].'-'.$row['jahr']]=true;
$arMonate[$row['monat']]=true;
$arJahreMonateListe= array_keys ($arJahreMonate);
$arMonateListe= array_keys ($arMonate);
»»
unset($row);
»»
foreach ($arJahreMonate as $strJahrMonat)
{
$arAuswahlTermin=explode('-',$strJahrMonat);
\*\*\* $arAuswahlTermin durch $arJahreMonateListe ersetzt, denn $arAuswahlTermin wurde wohl noch nicht definiert, jedenfalls klappt jetzt die Anzeige in der nächsten Zeile
~~~php
> echo " <tr style='border-top:1px solid gray;'><td colspan='7'><strong> Monat: ". $strJahrMonat ."</strong></td></tr>\n";
> foreach ($arTermine as $arTermin)
> {
> if (($arTermin['monat']==$strJahrMonat[0])&&($arTermin['jahr']==$strJahrMonat[1]))
*** $arTermin['monat']
Notice: Undefined index: monat
> {
> echo "\n <tr>\n";
> echo "<td class='dunkel' style='font-weight:bold;'>".$arTermin['id_termin']." ".$arTermin['art_nr']."".$arTermin['hgr_kurz'].".".$arTermin['zielgr_kurz']." ".$arTermin['sem_nr']."</td>";
> echo " <td class='dunkel'>".$arTermin['von']." - ".$arTermin['bis']."</td>\n";
...
> echo " </tr>\n";
> } # end if
> } # next $arTermine
> } # next $arJahreMonate
>
In der if-Schleife muss ich, denke ich, auf den "Monatswert" aus der "result_vorschau"-Schleife greifen. Allerdings bekomme ich die o.g. Notiz(Index monat nicht definiert). Eigentlich muesste doch aber sowohl $termin['monat'], als auch $arTermin['monat'] für den Abgleich abrufbar, weil noch vorhanden sein, oder?
Danke in jedem Fall für die Antworten (error_reporting(E_ALL); war ein sehr guter - und aufräumintensiver Tipp).
conni
Moin!
Das Problem ist noch immer ein logisches. Diese sind sehr schwer zu finden, wenn man nicht im Projekt steckt und keine vollständigen Quelltexte und keine Testumgebung (konkrete Datenbank...) hat.
Ich kann hier nur mit einem weiteren Ratschlag helfen:
print_r($array) - Funktion zum Ausgeben eines Arrays.
Beste Benutzung:
<?php
echo "<hr>Ausgabe von $array<hr><pre>\n";
print_r($array);
echo "\n</pre><hr>\n";
?>
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
Hallo,
mittlerweile werden in der Ergebnistabelle die entsprechenden Zeilenanzahl pro Monat gezeigt. Werden die entsprechenden Einträge immer noch nicht angezeigt.
Ich kann hier nur mit einem weiteren Ratschlag helfen:
print_r($array) - Funktion zum Ausgeben eines Arrays.
Hatte ich auch versucht.
Der array $arTermine (in der "while... mysql_fetch_array"-Schleife gebildet) sieht mit print_r($arTermine) so aus:
...
[6] => Array
(
[monat] => 2
)
[7] => Array
(
[zielgruppe] => Alle, die wollen
)
[8] => Array
(
[art_nr] => 7
)
...
Also hübsch befüllt, mit allen Werten drin.
In den darauffolgenden Schleife "foreach ($arTermine as $arTermin)"
kann ich Werte aber nicht ansprechen, schon gar nicht gezielt, z.B. mit "$arTermin['zielgruppe']". Seltsamerweise wird "$arTermin['monat']" jedoch als einziger Wert ordentlich ausgeworfen.
Ich werd es jedenfalls weiterversuchen.
Danke trotzdem für die Hilfe hier, die mir erstmal einen Weg gezeigt hat.
conni
Moin!
Ein Tipp noch. Du fragst sehr oft aufgrund logischer Fehler ungesetzte Variablen ab.
Bitte schalte die Ausgaben von Warnungen ein. Das geht zum einen in der PHP.ini:
error_reporting = E_ALL & ~E_NOTICE
oder in der PHP-Datei selbst:
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
Dann siehts Du, was los ist.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®
echo $begrüßung;
Ein Tipp noch. Du fragst sehr oft aufgrund logischer Fehler ungesetzte Variablen ab.
Bitte schalte die Ausgaben von Warnungen ein. Das geht zum einen in der PHP.ini:
Lesender Zugriff auf ungesetzte Variablen erzeugt nur eine Notice.
error_reporting = E_ALL & ~E_NOTICE
Wenn, dann also ohne die Notizen auszuklammern: error_reporting = E_ALL
oder in der PHP-Datei selbst:
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
Mal abgesehen davon, dass diese Einstellung nicht deiner obigen entspricht, sehe ich keinen Sinn darin, während der Entwicklung von Scripten nur eine Teilmenge der Fehler bzw. Hinweise auszugeben [*]
error_reporting(E_ALL);
echo "$verabschiedung $name";
[*] Ausnahme: E_STRICT wenn man PHP4-kompatible Scripte unter PHP5 entwickeln/einsetzen möchte.
Moin!
error_reporting(E_ALL);
Jepp. Du hast Recht.
MFFG (Mit freundlich- friedfertigem Grinsen)
fastix®