Ich habe da noch einen Wunsch für zukünftige Versionen von Contenido.
PHP wird zunehmend intolleranter gegenüber Zugriff auf nichtgesetzte Variablen. Das betrifft den aktuellen Quellcode an vielen Punkten (»if($contenido) { ... }« wird dann ggf. zu einem Fatal Error führen.) Da stehen noch viele Umbauten an. Mir wäre es wichtig, dass wir in diesem Zusammenhang auch in der Datenbank eindeutiger werden. Viele Datenbankfelder werden als Boolean genutzt, das Format ist dann tinyint(1), eine '1' bedeutet true, eine '0' steht für false. Per default sind diese Felder aber leer. Mein Wunsch wäre, dass diese Felder künftig als Defaultwert eine '0' (Null) bekommen.
Vielen Dank für eure Aufmerksamkeit!
Bodil
Boolean-Werte in der Datenbank
-
- Beiträge: 1945
- Registriert: Sa 8. Sep 2007, 16:23
- Wohnort: Brandenburg
- Hat sich bedankt: 5 Mal
- Kontaktdaten:
Re: Boolean-Werte in der Datenbank
Hallo Bodil,
ja, PHP 8 wirft ein paar Fragen auf, mit denen auch recht viele andere Systeme zu kämpfen haben.
Aber was nicht gesetzte Variablen angeht, programmiere ich mit if (isset($var) ) anstelle von if ($var).
Das wirft dann keinen Fehler aus, weil es prüft, ob die Variable existiert und sich von NULL unterscheidet.
Hier kommen wir zu einer ganz wichtigen Unterscheidung: 0 ist nicht NULL
Die Zahl 0 ist ein Wert, die Variable mit dem Wert 0 würde existieren.
0 wäre also nicht false bei if($var).
NULL ist kein Wert, wenn einer Variablen $var = NULL zugewiesen wird, enthält sie keinen Wert mehr und bei der Frage nach isset($var) würde false heraus kommen und bei if($var) folglich eine Fehlermedlung, weil sie nicht gesetzt ist.
https://www.php.net/manual/de/function.isset.php
Achtung, Konstanten werden anders geprüft, ob sie gesetzt sind.
Darum finden wir im Contenido Programm oft und häufig if(!defined($CONTENIDO)) , da dies eine Konstante ist.
Edit: Bei SQL in der DB ist auch zu beachten, dass eine 0 oder ein Leerzeichen nicht NULL sind.
NULL ist nichts, also eine leere Tabellenzelle, wogegen Leerzeichen und 0 ein Inhalt sind.
ja, PHP 8 wirft ein paar Fragen auf, mit denen auch recht viele andere Systeme zu kämpfen haben.
Aber was nicht gesetzte Variablen angeht, programmiere ich mit if (isset($var) ) anstelle von if ($var).
Das wirft dann keinen Fehler aus, weil es prüft, ob die Variable existiert und sich von NULL unterscheidet.
Hier kommen wir zu einer ganz wichtigen Unterscheidung: 0 ist nicht NULL
Die Zahl 0 ist ein Wert, die Variable mit dem Wert 0 würde existieren.
0 wäre also nicht false bei if($var).
NULL ist kein Wert, wenn einer Variablen $var = NULL zugewiesen wird, enthält sie keinen Wert mehr und bei der Frage nach isset($var) würde false heraus kommen und bei if($var) folglich eine Fehlermedlung, weil sie nicht gesetzt ist.
https://www.php.net/manual/de/function.isset.php
Achtung, Konstanten werden anders geprüft, ob sie gesetzt sind.
Darum finden wir im Contenido Programm oft und häufig if(!defined($CONTENIDO)) , da dies eine Konstante ist.
Edit: Bei SQL in der DB ist auch zu beachten, dass eine 0 oder ein Leerzeichen nicht NULL sind.
NULL ist nichts, also eine leere Tabellenzelle, wogegen Leerzeichen und 0 ein Inhalt sind.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.