Fehler bei PHP switch ausgabe
Tunnel85
- php
Hallo zusammen,
habe entweder Tomaten auf den Augen und finde den Fehler nicht, oder php spinnt.
Habe eine Switch-Abfrage um Tag und Monat in deutsch ausgeben zu lassen. Funktionierte bis jetzt einwandfrei, allerdings spinnt er bei August und September und gibt einfach den Namen nicht aus. Die Variablen sind alle gesetzt, $ausgangsmonat = 08 (bei August) und trotzdem ist $monat leer.
Entweder ich hab nen Fehler den ich vor lauter Bäumen nicht sehe, oder es liegt wirklich an PHP.
hier der Code:
$ausgangstag=date("w");
switch($ausgangstag){
case 0:
$tag = 'Sonntag';
break 1;
case 1:
$tag = 'Montag';
break 1;
case 2:
$tag = 'Dienstag';
break 1;
case 3:
$tag = 'Mittwoch';
break 1;
case 4:
$tag = 'Donnerstag';
break 1;
case 5:
$tag = 'Freitag';
break 1;
case 6:
$tag = 'Samstag';
break 1;
default:
$tag = ' ';}
$ausgangsmonat=date("m");
echo $ausgangsmonat;
switch($ausgangsmonat){
case 01:
$monat = 'Januar';
break 1;
case 02:
$monat = 'Februar';
break 1;
case 03:
$monat = 'März';
break 1;
case 04:
$monat = 'April';
break 1;
case 05:
$monat = 'Mai';
break 1;
case 06:
$monat = 'Juni';
break 1;
case 07:
$monat = 'Juli';
break 1;
case 08:
$monat = 'August';
break 1;
case 09:
$monat = 'September';
break 1;
case 10:
$monat = 'Oktober';
break 1;
case 11:
$monat = 'November';
break 1;
case 12:
$monat = 'Dezember';
break 1;
default:
$monat = ' ';
};
echo $tag. ", der ". date("d").". " .$monat. " ".date("Y");
Vielen Dank für Eure Hilfe
Gruß
Tunnel
Mahlzeit Tunnel85,
$ausgangsmonat=date("m");
echo $ausgangsmonat;
Welchen Typ hat die Variable $ausgangsmonat?
case 01:
In manchen Programmiersprachen bedeutet eine explizit vor eine Zahl gestellte 0 etwas, was Du sicher nicht willst ...
MfG,
EKKi
Dankeschön,
Fehler behoben.
Ist das erstemal das ich auf das nicht strikte von PHP schimpfen könnte, ist es doch sonst so schön einfach. :-)
Vielen Dank nochmal und Gruß
Tunnel
echo $begrüßung;
Ist das erstemal das ich auf das nicht strikte von PHP schimpfen könnte, ist es doch sonst so schön einfach. :-)
Es ist keine spezielle Eigenart von PHP, Zahlen mit führenden Nullen als Oktalschreibweise zu interpretieren. Das findest du auch in anderen Sprachen zur Genüge. Der daraus resultierende Typ ist dabei immer der gleiche wie bei einer in Dezimal- oder Hex-Schreibweise notierten Zahl. Es ist ja nur eine andere Notation für den gleichen Wert.
echo "$verabschiedung $name";
Es ist keine spezielle Eigenart von PHP, Zahlen mit führenden Nullen als Oktalschreibweise zu interpretieren. Das findest du auch in anderen Sprachen zur Genüge. Der daraus resultierende Typ ist dabei immer der gleiche wie bei einer in Dezimal- oder Hex-Schreibweise notierten Zahl. Es ist ja nur eine andere Notation für den gleichen Wert.
Das stimmt, aber normalerweise deklariere ich den Typ einer Variablen bei der Erstellung derselben. In PHP eben nicht, und so kommt es dann zu solchen dummen Fehlern (die natürlich durch mich verschuldet sind, weil man einfach zu wenig darüber nachgedacht hat)...
Na ja, will ja hier auch keine der vielen Diskussionen über PHP führen.
Danke Euch auf jedenfall nochmal für Eure Hilfe
Gruß
Tunnel
echo $begrüßung;
Es ist keine spezielle Eigenart von PHP, Zahlen mit führenden Nullen als Oktalschreibweise zu interpretieren. Das findest du auch in anderen Sprachen zur Genüge. Der daraus resultierende Typ ist dabei immer der gleiche wie bei einer in Dezimal- oder Hex-Schreibweise notierten Zahl. Es ist ja nur eine andere Notation für den gleichen Wert.
Das stimmt, aber normalerweise deklariere ich den Typ einer Variablen bei der Erstellung derselben. In PHP eben nicht, und so kommt es dann zu solchen dummen Fehlern (die natürlich durch mich verschuldet sind, weil man einfach zu wenig darüber nachgedacht hat)...
Nein, den gleichen Fehler bekommst du auch in typisierten Sprachen. Nicht der Typ ist entscheidend sondern die Notation des Wertes.
int variable = 070;
ergibt auch in C keine dezimale 70 sondern 56. Genauso verhält es sich mit
int variable = 0x38;
was ebenfalls eine dezimale 56 ergibt.
Das einzige, was PHP nicht macht, ist eine Fehlermeldung zu werfen, wenn es eine ungültige Oktalzahl (z.B: 08) präsentiert bekommt.
echo "$verabschiedung $name";
Lass einfach die führende "0" weg, da date("w") sie nich liefert.
Also:
switch($ausgangstag){
case 0:
$tag = 'Sonntag';
break 1;
case 1:
$tag = 'Montag';
break 1;
case 2: .....
oder du nimmst diesen etwas kürzeren Code:
function get_month( $month ) {
$ARR_month = array( "Januar","Februar","März","April","Mai","Juni","Juli","August","September","Oktober","November","Dezember" );
$month = $ARR_month[$month-1];
return htmlentities( $month, ENT_QUOTES, 'ISO-8859-1' );
};
echo "aktueller Monat: ".get_month( date("m") );
Helmuth