Function liefert nur einen Wert :((
Gorginio
- php
0 Frank0 Bernhard Mecl0 Bernhard Mecl0 Gorginio
0 Gorginio
Guten Morgen,
Hole aus einer mySQL Datenbank Einträge, die nach dem Datum sortiert sind.
Dabei wird dann mittels einer Function das Format aus der Datenbank dem deutscchen Standard angepaßt (von yyyy-mm-dd auf dd.mm.yyyy).
zb.
in der Datenbank:
Datum Name Veranstaltung
------------------------------------------
2002-10-09 Georg Darts
2002-11-11 Franz Billard
..
Ausgabe:
09.10.2002 Georg Darts
Als Ausgabe erhalte ich aber nur die Werte der ersten Reihe und die 2. bzw alle anderen folgenden werden dann nicht dargestellt.
Quellcode ist:
$abfrage = "select * from termine order by Enddatum";
$result = mysql_query($abfrage);
while($row = mysql_fetch_object($result)) {
?>
<table width="90%" border="0" cellspacing="0" cellpadding="0">
<tr><hr>
<?
$datum=($row->Enddatum);
function datumfunktion($datum) {
list($jahr, $monat, $tag) = explode("-", $datum);
return sprintf("%02d.%02d.%04d", $tag, $monat, $jahr);
}
?>
<td width="15%"><p class="datum"><?=datumfunktion($datum)?></p></td>
Ich habe es auch mit if und for schleifen versucht, doch diese führten zu keinem oder gleichen Ergebnis.
Thx
Gorginio
Hallo,
hast du mal darüber nachgedacht, das Datum von mysql formatieren zu lassen?
Da gibt es die Funktion: date_format.
Und das sieht bei mir dann so aus:
date_format(Datum,'%d.%M.%Y') as Datum
Schöne Grüsse
Frank
Hallo,
hast du mal darüber nachgedacht, das Datum von mysql formatieren zu lassen?
Da gibt es die Funktion: date_format.
Und das sieht bei mir dann so aus:
date_format(Datum,'%d.%M.%Y') as Datum
Ich will das datum auch mit dem aktuellen Vergleichen, und bereits Einträge die datumsmäßig schon abgelaufen sind, erst gar nicht laden.
Dazu brauche ich aber wiederrum das Datum in yyyy.mm.dd Form. Deshalb will ich ich das Format mit php verändern, dass klappt leider aber nur für 1 eintrag mit der function.
:((
Gorginio
Hallo,
schreibe das ,oder so ähnlich, in die where-Klausel:
Datum>=CURDATE() and Datum<=DATE_ADD(CURDATE(), INTERVAL 7 day)
Damit habe ich Termine die abgelaufen bei der Anfrage gefiltert, diese werden dann nicht angezeigt.
Hallo,
schreibe das ,oder so ähnlich, in die where-Klausel:
Datum>=CURDATE() and Datum<=DATE_ADD(CURDATE(), INTERVAL 7 day)
?? Also bei mir funktioniert gar nix mehr!!!
Wenn ich die Select abfrage so gestalte wie du vorschlagst:
$abfrage = "select * from termine order by Enddatum where Enddatum>=CURDATE() and Enddatum<=DATE_ADD(CURDATE(),)";
Dann tut sich gar nix.
(Enddatum= Feldname)
lg
Gorginio
?? Also bei mir funktioniert gar nix mehr!!!
Ich denke vorher ging auch gar nix. Oder wie erkärst du mir den fatal error:Cannot redeclare datumfunktion() ....
Wie du bei dir eine Zeile bekommst ist mir ein Rätsel, oder hast du den fehler als unwesentlich angesehen und dann verschwiegen.
Ich wollte dir eigentlich aufzeigen, das es auch mit MySQL-Funktionen geht. Die solltest du dir dann natürlich auch mal anschauen.
Und wenn du Teile rausnimmst, dann vergess es auch nicht komplett zu machen und laß nicht Kommas stehen.
Deine funtion wird übrigens immer wiede definiert, weil sie in der while schleife steht.
Also gemeinsam haben wir es nun geschafft!
Anbei der Quellcode (vollständig):
Vielleicht findest du ja einige Optimierungsmöglichkeiten, denn sehr schön ist es nicht wirklich programmiert.
---------------------------------------------------------------------
<HTML>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<link href="../css_files/main.css" rel="stylesheet" type="text/css">
<title>Termine und Veranstaltungen</title>
</head>
<body>
<h2 class="ueberschrift">Veranstaltungstermine:</h2>
<p class="text">Folgende Termine stehen in nächster Zeit am Programm.<br>
<p class="text">Übrigens, heute ist der <strong><?echo date ("d.m.Y")?></strong>.</p>
<?
include ("datenbank_verbindung.php");
function datumfunction($datum) {
list($jahr, $monat, $tag) = explode("-", $datum);
return sprintf("%02d.%02d.%04d", $tag, $monat, $jahr);
}
$abfrage ='SELECT * '
.'FROM termine '
.'WHERE Enddatum>=NOW()'
.'ORDER BY Enddatum';
$result = mysql_query($abfrage);
while($row = mysql_fetch_object($result)) {
?>
<table width="90%" border="0" cellspacing="0" cellpadding="0">
<tr><hr>
<td width="15%"><p class="datum"><?=$row->Anfangdatum?><?=datumfunction($row->Enddatum)?></p></td>
<td width="*" class="titelliste"><strong><?=$row->Veranstaltung?></strong></td>
</tr>
<tr>
<td width="15%"></td>
<td class="text"><font size="-1"><?=$row->Subveranstaltung?></font>
<? if ($row->Ort!="") { ?>
<br>Ort: <font color="#999999"><?=$row->Ort?></font>
<? }
if ($row->Veranstalter!="") { ?>
<br> Veranstalter: <font color="#999999"><?=$row->Veranstalter?></font>
<?
}
if ($row->Kommentar!="") { ?>
<br>Weitere Informationen: <font color="#999999"><?=$row->Kommentar?></font>
<? } ?>
<br></td>
</tr>
</table>
<?
}
mysql_close();
?>
<p class="text">--rp--</p>
</body>
</html>
Das Problem ist das ich nicht nur bestimmte Datum(s)habe, sondern auch Zeitspannen. Weiters sind nicht alle Felder in MySQL gefüllt sodaß die Benennung auch immer variiert.
thx nochmals. (function in while-schleife) war das Problem!
gorginio
Quellcode ist:
Wie dieser code den parser überlebt, ist mir ein Rätsel.
Die Funktion "datumfunktion" wird innerhalb der while-Schleife immer und immer wieder definiert. Verschweigst Du uns einen "Fatal error: Cannot redeclare datumfunktion() ..."? Außerdem ist das erzeugte HTML fehlerhaft (<table> innerhalb der Schleife, <hr> unmittelbar nach <tr>) und die schließende Klammer der Schleife sowie das </tr> geht mir auch ab, was aber eher an einem abrupten Abbruch Deiner copy&paste-Aktion liegen dürfte.
function datumfunktion($datum) {
list($jahr,$monat,$tag)=explode('-',$datum);
return sprintf("%02d.%02d.%04d",$tag,$monat,$jahr);
}
$query='SELECT * '.
.'FROM termine '
/* .'WHERE Enddatum>=NOW() ' */
.'ORDER BY Enddatum';
$result=mysql_query($query) or die (mysql_errno().': '.mysql_error());
?>
<table>
<?
while($row=mysql_fetch_object($result)) {
?>
<tr>
<td><?=datumfunktion($row->Enddatum)?></td>
<td><?=$row->name?></td>
<td><?=$row->veranstaltung?></td>
</tr>
<?
}
?>
</table>
<?
$query='SELECT * '.
^ wär ja zu schön gewesen, wenn das diesmal auf Anhieb geklappt hätte...
.'FROM termine '
^
P.S.: Funktionen schon allein der Lesbarkeit zuliebe immer zentral am besten gleich zu Beginn oder in einer separaten Datei definieren!
Hallo Bernhard
Geht alles wunderbar, hat nur den schwerwiegenden Fehler, daß wenn ich vor dem Enddatum ein anderes Feld aus MySQL auslesen lasse, verschiebt es mir den ganzen Table in der ersten Reihe und ich krieg es nicht hin,dies zu verhindern.
lg
Gorginio
Thx
da sieht man immer wieder wie einfach man doch probleme lösen kann.
Punkto copy/paste. Der ganze Quellcode wäre sehr sehr viel länger gewesen, sodaß ich nur den Problemteil genommen habe.
lg
gorginio