Codeschnipsel fehlerheft - Zeitangaben
Schwake
- php
Hi,
ich habe mir folgenden Codeschnipsel erdacht, der allerdings noch fehlerhaft ist, weil die Anzeige auch kommt, wenn ich momentan $tag=Sun mache. Könnt Ihr mir helfen? Ich bin noch Php-Newbie (wie man merkt...)
Danke!
<?php
$zeit=time("H:i:S");
$tag=date("D");
if($zeit>140000 AND $tag=Sat)
{
include("dienst.php");
}
else { }
?>
Hi there,
Könnt Ihr mir helfen? Ich bin noch Php-Newbie (wie man merkt...)
<?php
$zeit=time("H:i:S");
$tag=date("D");
if($zeit>140000 AND $tag=Sat)
{
include("dienst.php");
}
else { }
?>
ALso, $tag kann nie Sat sein sonder höchsten 'Sat' oder "Sat". Ausserdem wird das logische UND in PHP nicht durch AND sondern durch && dargestellt. AND ist unter anderem SQL-Syntax..
.
if($zeit>140000 AND $tag=Sat)
Was noch zu sagen wäre: $tag='Sat' weist der Variablen $tag den Wert 'Sat' zu, wenn Du den Wert der Variablen $tag hingegen mit dem Wert 'Sat' vergleichen möchtest muss die Syntax ... $tag == 'Sat' lauten. Somit wäre die Abfrage (syntaktisch, obs einen Sinn steht auf einem anderen Blatt) so richtig:
if ($zeit > 140000 && $tag == 'Sat')
Danke!
Das hier...
<?php
$zeit=time("H:i:S");
$tag=date("D");
if($zeit>140000 && $tag=='Sat')
{
include("dienst.php");
}
else { }
?>
ist also eine Lösung. Was muss ich denn machen, wenn der Tag 'Sat' oder 'Sun' sein soll?
Hi,
Was muss ich denn machen, wenn der Tag 'Sat' oder 'Sun' sein soll?
Dich schlau(er) lesen ...
http://www.php.net/manual/en/language.operators.logical.php
MfG ChrisB
...danke! Könnt Ihr mir das bestätigen...
<?php
$zeit=time("H:i:S");
$tag=date("D");
if($zeit>140000 && $tag=='Sat' || $tag=='Sun')
{
include("dienst.php");
}
else { }
?>
Guten Tag,
...danke! Könnt Ihr mir das bestätigen...
Das? dienst.php an Samstagen und Sonntagen nach 14:00 eingebunden wird?
<?php
$zeit=time("H:i:S");
$tag=date("D");
if($zeit>140000 && $tag=='Sat' || $tag=='Sun')
{
include("dienst.php");
}
else { }
?>
Hast du das Programm mal ausgeführt? Es wird vermutlich nicht tun, was ich vermute, dass du willst.
Gruß
Christoph Jeschke
--
Zend Certified Engineer
hi,
$tag=date("D");
Namen sind Schall und Rauch, ich würde bei sowas eher (mit "w") die numerischen Werte der Wochentage prüfen. (int) stellt sicher, dass ich als Variablentyp Number bekomme:
$tag = (int)date("w");
Ausserdem prüftst Du auf Identität (3x ===), weil die automatische Typenkonvertierung sonst nicht zwischen 0 und false unterscheidet:
if($zeit>140000 && $tag===0)
if($zeit>140000 && $tag=='Sat' || $tag=='Sun')
if ($zeit>140000 && ($tag===6 || $tag===0))
da $zeit ja für beide Tage gelten soll musst Du das in Klammern zusammenfassen
Gruesse, Joachim
Guten Morgen,
Ausserdem prüftst Du auf Identität (3x ===), weil die automatische Typenkonvertierung sonst nicht zwischen 0 und false unterscheidet:
if($zeit>140000 && $tag===0)
Es sieht mir doch so aus, dass das Snippet nur ein Test für Parameterübergabe aus einem Request sein soll.
Und dann wird das vermutlich in die Hose gehen, da alle Post- und Get-Parameter als Strings übergeben werden. Da müsste man dann eher eine Plausibilitätsprüfung vorschalten, aber keiensfalls eine Typprüfung.
Gesundheit
Dr. Bit
Hi,
Es sieht mir doch so aus, dass das Snippet nur ein Test für Parameterübergabe aus einem Request sein soll.
Da siehst Du mehr als ich. Eine Parameterübergabe würde ich jedenfalls nicht mit:
$tag=date("D");
simmulieren, sondern beispielsweise mit
$tag = "Sun";
Ich denke eher, der OP möchte tagesabhängig irgendwas includen.
Gruesse, Joachim
Hi,
ALso, $tag kann nie Sat sein sonder höchsten 'Sat' oder "Sat". Ausserdem wird das logische UND in PHP nicht durch AND sondern durch && dargestellt. AND ist unter anderem SQL-Syntax..
Ausser, wenn Sat eine Konstante waere. Mit error_reporting(E_ALL) wuerde dieser moegliche Fehler eine Notice werfen.
Abgesehen davon ist $tag='Sat' eine Zuweisung und somit immer true. Vergleiche werden mit == gemacht.
Gruss
Dieter
Guten Tag,
ALso, $tag kann nie Sat sein sonder höchsten 'Sat' oder "Sat".
Das stimmt nicht. PHP geht davon aus, wenn keine Konstante Sat definiert ist, dass Sat ein String ist - und zeigt eine Notice:
Notice: Use of undefined constant Sun - assumed 'Sat' [...]
Ausserdem wird das logische UND in PHP nicht durch AND sondern durch &&
dargestellt. AND ist unter anderem SQL-Syntax..
Stimmt nicht. and hat eine niedrigere Präzedenz als &&.
Gruß
Christoph Jeschke
Hi there,
Das stimmt nicht. PHP geht davon aus, wenn keine Konstante Sat definiert ist, dass Sat ein String ist - und zeigt eine Notice:
genau. Und jemand, der von PHP wie er selbst behauptet, keine Ahnung hat, wird mit Konstanten arbeiten, die er in einer if-Abfrage einer Variablen zuweisen möchte. Waahhnsinning wahrscheinlich.
Zumindest hab ich jetzt verstanden, daß Du das Handbuch auswendig gelernt hast. Dem Originalposter hats sicher viel geholfen...
Guten Tag,
genau. Und jemand, der von PHP wie er selbst behauptet, keine Ahnung hat,
wird mit Konstanten arbeiten, die er in einer if-Abfrage einer Variablen
zuweisen möchte. Waahhnsinning wahrscheinlich.
Darüber habe ich nichts geschrieben. Dumm genug, dass PHP einfach rät, wenn eine undefinierte Konstante verwendet wird. Das Verhalten sollte zumindest bekannt sein.
Hier liest im Übrigen nicht nur der OP mit.
Zumindest hab ich jetzt verstanden, daß Du das Handbuch auswendig gelernt
hast. Dem Originalposter hats sicher viel geholfen...
Vielleicht solltest du mehr im Manual lesen, anstatt falsche Informationen zu verbreiten. Die Zeit wäre gut investiert.
Gruß
Christoph Jeschke
Hi there,
Vielleicht solltest du mehr im Manual lesen, anstatt falsche Informationen zu verbreiten. Die Zeit wäre gut investiert.
Ich lese oft im Manual, räume allerdings ein, daß ich nicht die Absicht habe, es auswendig zu lernen. Ich wollte nur darauf hinweisen, daß es nur unnötig und verwirrend ist, einen bekennenden Newbie mit dem Unterschied zwischen && und and zu konfrontieren. Vielleicht braucht man das ja als Zend Certified Engineer, für den Originalposter ist es sicher nutzloses Wissen...
Guten Tag,
Ich wollte nur darauf hinweisen, daß es nur unnötig und verwirrend ist,
einen bekennenden Newbie mit dem Unterschied zwischen && und and zu
konfrontieren.
Immerhin bist du von der Meinung abgerückt, es gäbe den And-Operator gar nicht. Nein, du brauchst mir nicht zu danken.
Gruß
Christoph Jeschke
Hi there,
[...] Nein, du brauchst mir nicht zu danken.
Jaja, menschliche Größe eint, Mutter Theresa hat sich auch keinen Dank erwartet...
Hi Klawischnigg!
Ich wollte nur darauf hinweisen, daß es nur unnötig und verwirrend ist, einen bekennenden Newbie mit dem Unterschied zwischen && und and zu konfrontieren.
Ist ja richtig. Aber hättest du nicht behauptet, den AND-Operator würde es in PHP nicht geben, wäre der Unterschied gar nicht angesprochen wurden. =)
Außerdem, wo ist das Problem, wenn jemand einen Fehler korrigiert?
MfG H☼psel
echo $begrüßung;
Ich wollte nur darauf hinweisen, daß es nur unnötig und verwirrend ist, einen bekennenden Newbie mit dem Unterschied zwischen && und and zu konfrontieren. Vielleicht braucht man das ja als Zend Certified Engineer, für den Originalposter ist es sicher nutzloses Wissen...
Mitnichten, denn der Unterschied kann sich bei seinem Folgeproblem auswirken, zu dem er zum einen wissen muss, dass es so etwas wie Operator-Präzedenz gibt und welche Auswirkungen das hat, und zum anderen, dass er && und and respektive || und or nicht immer als gleichwertige Alternativschreibweise verwenden kann.
if ($zeit > 140000 and $tag=='Sat' || $tag=='Sun')
ergibt ein anderes Ergebnis als
if ($zeit > 140000 and $tag=='Sat' or $tag=='Sun')
zumindest bei bestimmte Konstellationen der Ausgangswerte.
var_dump(false and false || true); // false
var_dump(false and false or true); // true
Es ist auf alle Fälle empfehlenswert, unabhängig von der Operator-Rangfolge durch Klammern die Reihenfolge zu bestimmen. Dadurch kann man auch dem Quelltext direkt die Intention des Autors entnehmen, auch wenn man sich mit den Feinheiten der Operatoren nicht genau auskennt.
if ($zeit > 140000 and ($tag=='Sat' or $tag=='Sun'))
@Schwake:
Zudem wäre es für Quelltextleser interessant, die Bedeutung der 140000 zu erfahren. Das könnte man in einem Kommentar notieren. Außerdem erwartet die Funktion time() keine Parameter.
echo "$verabschiedung $name";
HI there,
Es ist auf alle Fälle empfehlenswert, unabhängig von der Operator-Rangfolge durch Klammern die Reihenfolge zu bestimmen. Dadurch kann man auch dem Quelltext direkt die Intention des Autors entnehmen, auch wenn man sich mit den Feinheiten der Operatoren nicht genau auskennt.
Da geb ich Dir absolut recht, vor allem macht es den Code wesentlich lesbarer. Ich seh' für einen AND-Operator keine wirkliche Notwendigkeit, was aber nicht bedeutet, daß es nicht vielleicht ein Fehler war, dessen Existenz als solche zu leugnen;)
Guten Morgen,
ALso, $tag kann nie Sat sein sonder höchsten 'Sat' oder "Sat".
Ausserdem wird das logische UND in PHP nicht durch AND sondern durch && dargestellt. AND ist unter anderem SQL-Syntax..
Das habe ich anders in Erinnerung:
http://www.php.net/manual/en/language.operators.logical.php
Gesundheit
Dr. Bit
"time" liefert im übrigen, auch wenn man bei Übersetzung einen wie auch immer gearteten Zeitwert als Ergebniss annehmen dürfte, die Anzahl von Sekunden die seit dem 1.1.1970 vergangen sind (aus Sicht der PHP-Umgebung).
Die Funktion müsste also eher "seconds_since_unix_epoch" heissen. "time" ist aber schlicht einfacher merk/tippbar.)
Für deinen Test sollte "getdate" am einfachsten verwendbar sein.
$datum = getdate();
$zeit = 1000 * $datum['hours'] + 100 * $datum['minutes'] + $datum['seconds'];
// Woche beginnt mit Sonntag = 0 und endet mit Samstag = 6
if(($datum['wday'] == 6) && ($zeit > 140000))
...
Oups...die Stunden müssen natürlich mit 10000 multipliziert werden.
$zeit = 10000 * $datum['hours'] + 100 * $datum['minutes'] + $datum['seconds'];