Was, wenn keine Bedingung zutrifft?

Alain

Grünschnabel
Hi ihr, ich habe eine Frage betreffend nicht zutreffenden Bedingungen.
Also ich habe auf meiner Homepage einen Kalender, auf welchem man auf den Tag klicken kann und dann zu einer bestimmten Seite geleitet wird. Mein Wunsch ist es nun, dass, falls für diesen Tag kein Event eingetragen ist, eine Meldung wie "Kein Event heute!" oder so kommt. Im Anhang ist eine TXT-Datei mit dem Script.


Hoffe, dass ihr meine Frage versteht und beantworten könnt.

Alain
 

Anhänge

Das Problem verstehe ich ehrlöich geasgt nicht, da du doch ein else am Ende hast, falls keine Einträge für das Datum exsitieren oder verstehe ich da was falsch?

Noch was anderes da du scheinbar dein Datum in einem mysql date bzw datetime Feld gepspeichert hast, kannst du dir deine Datumswandelfunktionen sparen in dem du im mySQL-Statement einfach DATE_FORMAT verwendest. Dann kommt das Datum so raus wie du es möchtest. Die Syntax ist ähnlich zu date() von PHP und findet sich in der mySQL-Doku utner http://dev.mysql.com
 
Danke für die rasche Antwort

Also das Problem ist, dass er mir wenn nichts eingetragen ist in der DB einfach eine leere Seite, statt eine Bemerkung bringt. Ich hoffe, dass geht i.O wenn ich kurz den Link schreibe, damit du dir das Prob anschauen kannst.

hier

Wie du sehen kannst, kommt beim 1.9 das mit dem Geburtstag, am 2.9 ist nichts eingetragen und da kommt einfach eine weisse Seite..

Why?

Danke!

Alain
 
Also bei der URL: http://www.schiedsrichter-team.ch/srt/calendar.php?date=2004-09-02

Kommt der fehler Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/web585/html/srt/calendar.php on line 109
zurück


Das liegt daran da du dein Query nicht sauber auf Fehler prüfst nämlich so:
PHP:
$result=mysql_query($sql) or die("Fehler: ".mysql_query());
//oder für ne bessere fehlerbehandlung oberflächentechnisch gesehen
$result=mysql_query($sql);
if( $result ==== FALSE )
      //Hier Fehler behandeln

Aber leere Seite sehe ich nicht...
 
Try again..

das ist, weil ich in dem moment das mit dem syntax gemacht habe. jetzt ist es wieder wie vorher, vor der Veränderung.. Schau's dir bitte noch mal an.
 
Jetzt bekomme ich das:

Code:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/www/web585/html/srt/calendar.php on line 131
Für den wurden keine Eintragungen gemacht

zurück

Also läuft er wohl ins else, aber auch nur weil er eben keine gültige Ressource bekommt, weil dein Statement falsch ist o.ä.
Mach doch nach dem mysql_query mal ein
or die('Fehler: '.mysql_error());
Dann siehst du den SQL-Fehler.
 
Done..

jezt sieht das Ganze so aus:
PHP:
$res = mysql_query($qry) or die ("Fehler: ".mysql_error());
aber habe nicht das Gefühl, dass sich da 'was getan hat. Oder?

Hab mal das script, so wies im Moment aussieht, als Anlage.


danke jetzt schon für deine Hilfe

Alain
 

Anhänge

Wenn du mir jetzt den folgenden, deinem Anhang entnommenen Code erklären solltest, wie würdest du mir hier den logisch sinnvollen Ablauf beschreiben?
PHP:
// Auswählen aller Daten die zur NewsID $id gehören
$qry= "SELECT * from calendar where DATE = '$date'"; 
$res = mysql_query($qry) or die ("Fehler: ".mysql_error());
;
$sql= "select Count(*) As Anzahl, * from calendar where DATE = '$date'"; 
$row = mysql_fetch_array($sql); 
if($row['Anzahl'] <= 1)

Ich fang mal an:

1.) Statement zum auslesen der Einträge zum Datum $date in $qry speichern
2.) Ressource des Queries unter Verwendng von $qry als Statement in $res speichern oder Fehler ausgeben und Script beenden
3.) Ein nicht funktionsfähiges Statement in Variable $sql speicher.
Zu dem nicht funktionsfähigen, du kannst keine Aggregatfunktion, z.b. count mit * oder ähnlichem vermischen. Denn Aggregatfunktionen geben zwangsweise nur einen Datensatz zurück.
4.) Nächster fehler, du versuchst Daten aus einer nicht ressource $sql (hier Steht NUR TEXT drin) auszulesen.
Wenn müsste die Zeile so aussehen: $row = mysql_fetch_array($res),
oder $res = mysql_query($sql); und danach die Zeile von oben.

Soviel nun zu den fehlern im Script, logisch also etwas verkorxt.
Um das mal aufzuräumen, du liest ermal alle Daten zum passenden Tag in ein Array, dieses zhälst du dann auf Inhalt. Ist es leer gibts du die Meldung aus das keine Einträge vorhanden sind. Ist was drin gisbt du sie aus. Du könntest auch zwei Statements verfassen eins zum auslesen der Datensätze, eines zum Zählen der Datenstäze. Für den Fall ist mir ersteres sympatischer... Dafür ergibt sich dann folgender Code:

PHP:
//Query an DB Senden...
$sth = @mysql_query("SELECT * from calendar where DATE = '$date'") or die("Fehler: ".mysql_query());

//Daten fürs Query in $daten Speichern
$daten = array();
while( $row = mysql_fetch_assoc($sth) )
      $daten[] = $row;

//Prüfen ob Daten vorhanden sind
if( count($daten) )
{
  //Daten vorhanden, nun ausgeben
  // mit each so lange datensätze aus dem Array holen, bis das Ende des Arrays erreicht
  //Der rückgabewert von each, ein Array, der Wer dieses Arrays ist wiederum ein Array, da $daten = 2 Diemensional, ergo ist $val 1 Dimensional
  //die einzelne Datenzeile
  
  while( list(,$val) = each($daten) )
  {
    echo "<tr>";
    echo "<td><font class='kalender'>$val[datum]><br></font></td>";
  echo "</tr>";
  echo "<tr>";
    echo "<td><strong><font class='kalender'>$val[titel]<br></font></strong></td>";
  echo "</tr>";
  echo "<tr> ";
    echo "<td><font class='kalender'>$val[beschreibung]<br><br></font></td>";
  echo "</tr>";
  echo "<tr> ";
    echo "<td><font class='nav'>Event eingetragen am $val[eintragung] von $val[autor]<br><br><hr size='1' color='#006600'></font></td>";
  echo "</tr>"; 
   }

}


//Wenn keine Datensätze vorhanden sind
else
{
echo "<font class='kalender'>Für den $datum wurden keine Eintragungen gemacht<br><br><a href='index.php#calender'>zurück</a><br><br></font>";
}

Auf Deine Datumwandlung habe ich verzichtet, da man diese wie bereits erwähnt in das SQL-Statement einabuen kann, sie mein Post weiter oben.

hth
 
Zurück