ERLEDIGT
JA
JA
ANTWORTEN
10
10
ZUGRIFFE
268
268
EMPFEHLEN
-
Hallo zusammen,
ich bin PHP Anfänger und setze mich zur Zeit mit einzelnen Scripten auseinander, um etwas dazuzulernen. Leider reicht mein Grundwissen häufig nicht, um diese Scripte meinen Bedürfnissen anzupassen.
Bei folgendem Script wird für jede Reihe in der Datenbank deren Datum NICHT in der Zukunft liegt, ein leeres Ergebnis zurückgegeben. Gibt es nun keine Events in der Zukunft, möchte ich dies auf einer Website per echo "No upcoming events" kenntlich machen.
Der Code sieht zur Zeit wie folgt aus:
Natürlich wird nun für jede Reihe der auszugebene Text wiedergegeben, d.h. ich habe "Currently, there are no upcoming events." ungefähr x-mal hinereinander stehen. Damit schieße ich völlig übers Ziel hinaus, da es ja einmal absolut ausreichen würde.PHP-Code:$query = "SELECT * FROM events ORDER BY date, time";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result))
{
if ($row['date'] >= date('Y-m-d'))
{
displayEvents($row);
echo "</tr><tr><td colspan='7' height='0px'></td></tr>";
}
elseif ($row['date'] >= date('Y-m-d') == '')
{
echo "Currently, there are no upcoming events.";
echo "</tr><tr><td colspan='7' height='0px'></td></tr>";
}
}

Ich habe bereits mit mysql_row_count herumgespielt, leider ohne Erfolg. Daher wäre es super, wenn mir jemand einen Tip in Richtung richtige Lösung geben würde.
Vielen Dank für Eure Hilfe.
Skribi
-
Hallo,
sowas machst du am besten direkt in die Datenbankabfrage.
PHP-Code:$date = date('Y-m-d');
$sql = 'SELECT COUNT(*) FROM events WHERE date >= '.$date;
$result = mysql_query($sql);
$count = mysql_result($result,0);
if($count == 0) :
echo 'No upcoming events.';
endif;
-
Danke, das funktioniert - zumindest fast.
Leider geht es nur wenn ich den zweiten Paramter aus folgender Line weglasse:
Da mysql_result aber 2 Paramter verlangt, wird vor der Ausgabe der entsprechende Fehler angezeigt. Dabei bin ich mir auch ziemlich sicher, dass die Null schon stimmt...PHP-Code:$count = mysql_result($result,0);
Ich fürchte, dass ich da gerade irgendetwas Fundamentales nicht beachte...
-
Was passiert denn, wenn du
verwendest?PHP-Code:$count = mysql_result($result,0);
-
-
16.04.11 12:41 #6
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Dann schreib mal testweise in die ersten zwei Zeilen in deinem Script
Code php:1 2
error_reporting(E_ALL | E_STRICT); ini_set('display_errors', 1);
Außerdem verwende mysql_error() wo es geht:
Code php:1
$count = mysql_result($result, 0) || die(mysql_error());
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Ok, habe ich gemacht.
Dies hatte für jede Reihe der Abfrage folgenden Error zur Folge:
Ich habe dies korrigiert, indem ich in meinem ScriptStrict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Berlin' for 'CEST/2.0/DST' instead in [...]
gesetzt habe.date_default_timezone_set('Europe/Berlin');
Nun sind alle Fehler weg und ich bin wieder bei meiner leeren Seite... :-/
Falls es hilft, kann ich Euch gerne einen Link zu der Seite, auf der ich das Script nutze, schicken.
-
16.04.11 13:02 #8
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Gibst du dieses $count mit echo irgendwo aus?
Du willst ja anzeigen, das keine Einträge da sind, wenn dir der Query 0 als Wert zurück gibt. Hast du eine Prüfung dafür eingebaut?
Ansonsten mach es mal so:
Code php:1 2 3 4 5 6 7 8
if( ($num_events = mysql_result($result, 0)) == 0 ) { echo "Currently, there are no upcoming events."; } else { echo "We $num_events upcoming events so far."; }
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Jetzt hab' ich es...
Der Fehler war eine der Marke "Grausam", betraf die Logik hinter der DB Abfrage bzw. der gestellten Bedingungen. Beim oben gemachten Lösungsansatz hatte ich auf einmal den Output "14", was der Anzahl aller DB Einträge (die zur Zeit in der Vergangenheit liegen) entspricht.
Somit habe ich die Abfrage völlig neu geschrieben. Ist evtl. etwas umständlich geworden, aber funktioniert: Eine Abfrage gibt mir nun die Gesamtanzahl an Einträgen aus, eine weitere die Anzahl der Einträge/Events in der Vergangenheit. Zu guter letzt wird dann letzteres von erstem subtrahiert. Ist dieses Ergebnis = 0, so wird der gewünschte Text "No upcoming events [...]" angezeigt.
Ich bedanke mich bei allen für die Hilfe und vor allem Geduld und hoffe, mit meiner Lösung in Zukunft auch anderen Newbies etwas helfen zu können. Das Thema kann geschlossen werden...PHP-Code:date_default_timezone_set('Europe/Berlin');
$query = "SELECT * FROM events ORDER BY date, time";
$result = mysql_query($query);
while($row = mysql_fetch_assoc($result))
{
if ($row['date'] >= date('Y-m-d'))
{
displayEvents($row);
echo "</tr><tr><td colspan='7' height='0'></td></tr>";
}
}
$date = date('Y-m-d');
$sql = 'SELECT COUNT(*) FROM events WHERE date >= '.$date;
$query1 = mysql_query($sql);
$totalentries = 'SELECT COUNT(*) FROM events';
$query2 = mysql_query($totalentries);
if((mysql_result($query2, 0) - mysql_result($query1, 0)) == 0)
{
echo "<b>Currently, there are no upcoming events.</b><br />The list will be updated as soon as possible.<br /><br />If you know about events in the near future that should be listed, don't hesitate to contact us. ";
echo "</tr><tr><td colspan='7' height='0'></td></tr>";
}
else
{
echo "There are $sql upcoming events in this list.";
echo "</tr><tr><td colspan='7' height='0'></td></tr>";
}
-
16.04.11 14:20 #10
- Registriert seit
- May 2006
- Ort
- There is no place like 127.0.0.1
- Beiträge
- 3.520
Du kannst das Thema selbst schließen (Erledigt-Haken).
Außerdem kann man sich einen Query sparen. Du liest ja ohnehin schon alle aus. Du müsstest in deiner ersten while-Loop nur alle Termine mit zählen, die in der Zukunft (also größer als heute-Bedingung) liegen.
Falls du Interesse hast, zu erfahren, wie das geht, kann man ja daran optimieren. Wenn nicht, ists auch ok
Grüße
--
Qualität des Codes wird in WTF's/Min gemessen: Je mehr, desto schlechter der Code ;-)
-
Ok, danke. Sehr nette Leute hier im Forum, muss ich schon sagen.
Was weitere Optimierung angeht, werde ich das im Hinterkopf behalten. Allerdings will ich heute erstmal das schöne Wetter genießen, bevor es wieder an HTML, CSS, PHP, und SQL geht...in meinem Projekt warten glaube ich noch ganz andere Probleme auf mich, die gelöst werden wollen. Von daher werdet Ihr schon früh genug wieder von mir hören.
Ähnliche Themen
-
Neue SQL Abfrage mit Ergebnissen
Von neus im Forum C/C++Antworten: 1Letzter Beitrag: 11.08.08, 11:23 -
Von 2 Ergebnissen bzw arrays die differenz ausgeben
Von thiamak im Forum PHPAntworten: 5Letzter Beitrag: 21.04.07, 14:21 -
prozentrechnung mir 3 ergebnissen
Von M-GT im Forum PHPAntworten: 8Letzter Beitrag: 09.09.05, 18:48 -
Mehrere Ergebnissen jeweils 1 Var.
Von Nilman im Forum Relationale DatenbanksystemeAntworten: 0Letzter Beitrag: 05.03.05, 13:40 -
Listbox mit mehreren Ergebnissen
Von joky_joky im Forum PHPAntworten: 4Letzter Beitrag: 08.06.04, 11:30





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren