Anfängerfrage: Notice: Undefined index

Berliner31

New Member
Hallo Freunde,

ich merze gerade zahlreiche Notices aus. Mit isset bzw. empty kann man ja abfragen ob eine Variable existiert oder nicht.

Ich habe jetzt allerdings in einem Modul eine Zeile bei der ich nicht weiß wie ich das abfragen soll.

Die "Notice: Undefined index" entsteht hier ...

Codeschnipsel
Code:
if ($node->content[$field['control_field_name']]['field']['#access'] == TRUE

Bevor die Variable auf "True" gecheckt wird, muss ich sie doch vorher mit isset abfragen aber der Code befindet sich schon in einer if-Schleife - muss ich dazu noch eine weitere if-Schleife davor setzen wo ich die Variable erst mit isset abfrage?

So vielleicht?

Code:
if isset($node->content[$field['control_field_name']]['field']['#access']) {
if  ($node->content[$field['control_field_name']]['field']['#access'] == TRUE

oder wie macht man das korrekt?

Grübel?

Kann da jemand helfen bitte?

Danke und Gruß Matthias
 
Also, wenn ich das richtig verstanden habe, die Fehlermeldung entsteht weil deine Variable "nicht" gefüllt ist du sie aber dennoch abfragen willst?

Was spricht den gegen

$variable = '';
bzw
$variable = array();

Die Harte Methode wäre ein @davor zu setzen, das unterdürckt zwar den fehler, behebt ihn aber nicht

PHP:
if (@$node->content[$field['control_field_name']]['field']['#access'] == TRUE
 
PHP:
if (isset($node->content[$field['control_field_name']]['field']['#access']) and $node->content[$field['control_field_name']]['field']['#access'] == true)
 
Die Fehlermeldung sagt einfach aus, dass der Index deiner Membervariable nicht gefüllt ist.
Code:
$node->content[$field['control_field_name']]
Solltest daher erstmal schaun, warum diese nicht gefüllt ist. Andernfalls solltest einen Standardwert (in dem Falle false) vorgeben. sonst ist es unsauber programmiert.

Das nur mal so zum Verständnis.
 
Einige Tipps:

Schreibe true/false immer klein, spart Rechenleistung. Ebenfalls wie && anstelle von "AND". Konstanten sollten immer am Anfang in einer IF-Anweisung (if ( true === $var ) )
 
Schreibe true/false immer klein, spart Rechenleistung. Ebenfalls wie && anstelle von "AND". Konstanten sollten immer am Anfang in einer IF-Anweisung (if ( true === $var ) )

Hast du dazu eine Quelle, dass es Rechenleistung spart? Würde mich jetzt schon interessieren :D
 
Nanu? PHP ist doch nun wirklich kein Annodunnemals-BASIC-Interpreter.
Und dass PHP nicht in der Lage ist zu optimieren?
Glaube ich nicht.

Gilt vielleicht für PHP 2, dass solche "Optimierungen" nötig waren.

Udn dass && und AND gleichwertig sind, hatlte ich ebenfalls für ein Gerücht! Denkt mal daran dass && stärker bindet als AND oder verwendet ihr immer massenhaft Klammern?
http://www.php.net/manual/de/language.operators.precedence.php
 
Last edited by a moderator:
Konstanten "sollten" aus einem ganz einfachen Grund an den Anfang.

Folgendes Beispiel:

if($testvar == true)
Wenn man (als Anfänger vor allem) noch nicht so gut in PHP ist oder man sich einfach mal vertippt kann es passieren das man nur ein = macht.

if($testvar = true)
PHP weisst $testvar nun den Wert true zu und das If wird ausgeführt. Bis man den Fehler gefunden hat kanns dann schon mal dauern.

if(true = $testvar)
Würde nun einen Fehler erzeugen da man einer Konstante nicht einfach so einen neuen Wert zuweisen kann.
 
Last edited by a moderator:
if($testvar == true)
Wenn man (als Anfänger vor allem) noch nicht so gut in PHP ist oder man sich einfach mal vertippt kann es passieren das man nur ein = macht.

Jede halbwegs anständige IDE weißt dich auf eine Zuweisung in einer IF hin ;)

Außerdem finde ich persönlich $variable == konstante wesentlich einer zu lesen, insbesondere bei sehr verschachtelten Abfragen
 
Konstanten zuerst zu schreiben hat wirklich nur einen Vorteil beim Debugging, aber die umgekehrte Schreibweise ist einfacher zu lesen. Ich ziehe letzteres vor.
Und bezüglich Einsparung der Rechenleistung durch andere Schreibweise: Alles was ich bisher da gelesen habe, gehört in den Bereich der Mythen, wirkliche Nachweise habe ich noch nicht gesehen.
 
zumal man Boolische Werte immer mit einer boolischen Abfrage versieht.

if($var === true)
und nicht
if($var == true)

Jede halbwegs anständige IDE weißt dich auf eine Zuweisung in einer IF hin
Sofern man das eingestellt hat, stimm ich dem zu :)
 
Wer als Anfänger = statt == verwendet begeht möglicherweise noch viel schlimmere Programmierfehler.
* keine STRICT-Modus aktiv
* die Verwendung von @ weil das korrekte Programmieren lästig/unbekannt ist
* mangelhaftes Quoting bei Datenbankanwendungen
* nichtdruchgeführte Überprüfung von Variaben, die CGI-Paramter beinhalten
* unsichere Verbindungen öffnen mit fopen
usw.

Ich frage mich aber, ob Anfänger auf einem Server überhaupt programmieren sollten und nicht erst mal zuhause auf dem PC.
 
Genau. Es kommt auf den Typ der Variable an, denn du kannst auch Integer oder Strings mit boolschen Werten vergleichen ;)
Ich sagte ja, Boolsche Werte. Weder Integer noch Strings.

Nicht zwingend, kommt drauf an, was man mit der Abfrage erreichen will.
Naja, was will man denn mit if($var === true) erreichen ?

Für die Performance sollte sich auch jeder die Seite http://www.phpbench.com/ mal anschauen, und das beherzigen, was dort steht. Eigene Tests haben deren Ergebnisse bestätigt.
 
Back
Top