117471
19.11.2022
4316
9
0
PHP 8.1 isset - Syntaxproblem?
Huhu,
mein Webhoster hat das PHP auf 8.1 aktualisiert. Im Rahmen der Cookie-Handhabung habe ich eine Warnung bekommen, so dass ich jetzt vor dem Auslesen der Cookies prüfe, ob diese überhaupt existieren.
Code alt:
Code neu:
Warum steigt der Mistvogel nicht in die Schleife ein? Das Cookie ist genau so gesetzt...?!?
Gruß,
Jörg
mein Webhoster hat das PHP auf 8.1 aktualisiert. Im Rahmen der Cookie-Handhabung habe ich eine Warnung bekommen, so dass ich jetzt vor dem Auslesen der Cookies prüfe, ob diese überhaupt existieren.
Code alt:
$cookie = $_COOKIE["cookie_erlaubt_ad"];
if ($cookie == "allow") {
echo "\n<!-- Code fuer Google Ads -->\n";
};
Code neu:
if (isset($_COOKIE["cookie_erlaubt_ad"])) {
$cookie = $_COOKIE["cookie_erlaubt_ad"];
if ($cookie == "allow") {
echo "\n<!-- Code fuer Google Ads -->\n";
};
}
Warum steigt der Mistvogel nicht in die Schleife ein? Das Cookie ist genau so gesetzt...?!?
Gruß,
Jörg
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 4687586740
Url: https://administrator.de/contentid/4687586740
Ausgedruckt am: 25.11.2024 um 05:11 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
bei mir gehts.
http://skit.center/1.php
http://skit.center/2.php
Mach doch mal ein print_r($_COOKIE); davor zum testen was es an Cookies gibt.
Stefan
bei mir gehts.
http://skit.center/1.php
<?php
echo "Cookies=";
print_r($_COOKIE);
echo "<br>";
echo "<br>";
echo "PHP=" . phpversion();
echo "<br>";
echo "<br>";
if (isset($_COOKIE['user'])) {
echo 'User is ' . $_COOKIE['user'];}
else {
echo 'User is not logged in'; // false, cookie is not set
}
http://skit.center/2.php
<?php
setcookie('user', 'Test', time()+3600, '/');
echo "Cookie set";
Mach doch mal ein print_r($_COOKIE); davor zum testen was es an Cookies gibt.
Stefan
Zitat von @117471:
mein Webhoster hat das PHP auf 8.1 aktualisiert. Im Rahmen der Cookie-Handhabung habe ich eine Warnung bekommen, so dass ich jetzt vor dem Auslesen der Cookies prüfe, ob diese überhaupt existieren.
mein Webhoster hat das PHP auf 8.1 aktualisiert. Im Rahmen der Cookie-Handhabung habe ich eine Warnung bekommen, so dass ich jetzt vor dem Auslesen der Cookies prüfe, ob diese überhaupt existieren.
Zugriff auf nicht existierende Variablen/Arrayelement war schon immer falsch, mit PHP 8.0 wurde die Fehlerstufe hier nur von Notice auf Warning gehoben.
$cookie = $_COOKIE["cookie_erlaubt_ad"];
Warum das Umkopieren des Wertes? Aber setz doch einfach noch einen Standardwert:
$cookie = $_COOKIE["cookie_erlaubt_ad"] ?? 'denied';
Warum steigt der Mistvogel nicht in die Schleife ein? Das Cookie ist genau so gesetzt...?!?
Welche Schleife?
Zitat von @117471:
Aber in diesen einen Fall halt nicht. Da muss irgendein Syntaxfehler drin sein (per Cut & Paste übernommen), den ich schlichtweg nicht finde.
Deshalb das Beispiel...Aber in diesen einen Fall halt nicht. Da muss irgendein Syntaxfehler drin sein (per Cut & Paste übernommen), den ich schlichtweg nicht finde.
Weil ich es nur auf diese Art und Weise begreife.
KISSIch habe inzwischen die Lösung: Offenbar unterscheide Opera zwischen einem Klick auf das Reload-Symbol und einem Klick mit gedrückter Shift-Taste auf das Reload-Symbol. Warum auch immer...
Bei Firefox z.B. ist F5-Reload und Strg-F5 Force-Reload.
Hi,
ich würde ja statt "isset()" immer !empty() nehmen.
oder vereinfacht:
Im "!empty()" ist das "isset()" inkludiert und der meckert auch nicht, wenn die Variable erst gar nicht vorhanden bzw. gesetzt wurde.
empty() überprüft ob die Variable:
empty() ist das Equivalent zu:
bzw. bei !empty()
Gruß
@firefly
ich würde ja statt "isset()" immer !empty() nehmen.
if (!empty($_COOKIE["cookie_erlaubt_ad"])) {
if ($_COOKIE["cookie_erlaubt_ad"] == "allow") {
echo "\n<!-- Code fuer Google Ads -->\n";
}
}
oder vereinfacht:
if (!empty($_COOKIE["cookie_erlaubt_ad"])) {
echo $_COOKIE["cookie_erlaubt_ad"] == "allow" ? "\n<!-- Code fuer Google Ads -->\n" : null;
}
Im "!empty()" ist das "isset()" inkludiert und der meckert auch nicht, wenn die Variable erst gar nicht vorhanden bzw. gesetzt wurde.
empty() überprüft ob die Variable:
- überhaupt existiert
- den Wert null hat
- den Wert 0 hat
- der Wert false ist
empty() ist das Equivalent zu:
!isset($var) || $var == false
isset($var) || $var == true
Gruß
@firefly
Zitat von @117471:
Hallo,
in den Variablen steht aber „allow“ und „deny“ statt „false“ und „true“?!?
Oder verstehe ich das jetzt flasch?
Gruß,
Jörg
Hallo,
in den Variablen steht aber „allow“ und „deny“ statt „false“ und „true“?!?
Oder verstehe ich das jetzt flasch?
Gruß,
Jörg
Das mit den false/true war doch nur die Erklärung, was empty() alles prüft.
Oben hatte ich doch das Beispiel mit "allow" gemacht:
if (!empty($_COOKIE["cookie_erlaubt_ad"])) {
echo $_COOKIE["cookie_erlaubt_ad"] == "allow" ? "\n<!-- Code fuer Google Ads -->\n" : null;
}
oder mit einer klassischen if Abfrage:
if (!empty($_COOKIE["cookie_erlaubt_ad"])) {
if ($_COOKIE["cookie_erlaubt_ad"] == "allow") {
echo "\n<!-- Code fuer Google Ads -->\n";
}
}
--> $_COOKIE["cookie_erlaubt_ad"] == "allow"
Die erste Zeile prüft ob dein $_COOKIE["cookie_erlaubt_ad"] überhaupt existiert, null, 0 oder false ist. Wenn nicht, dann geht er in die zweite Zeile und prüft auf dein "allow". Du sparst dir damit die Abfrage isset() und die zusätzliche Prüfung ob das Cookie leer ist (dein Fehler oben). isset prüft ja nur ob die Variable existiert, nicht aber ob sie den Wert 0, null, etc. hat. empty() bzw. !empty() macht beides. isset() würde ja bei einem Wert von "0" = true ausgeben. empty() wäre = false.
Gruß
firefly