Kann "Notice: Undefined index" nicht nachvollziehen
Enrico
- php
0 MudGuard0 Felix Riesterer1 dedlfix
Hallo,
ich übergebe Variablen von PHP an Javascript bzw. möchte sie übergeben, um nachfolgend mit ihnen weiter arbeiten zu können:
<body>
<script type="text/javascript">
~~~~~~php
<?php
if (!isset ($_POST['NrHauptmenue']) && $_POST['NrHauptmenue'] == "undefined")
{
echo "NrHauptmenue = 0";
}
if (!isset ($_POST['NrUntermenue']) && $_POST['NrUntermenue'] == "undefined")
{
echo "NrUntermenue = 0";
}
?>
~~~~~~javascript
$(document).ready(function()
{
$(window).load(function()
{
$.ajaxSetup({cache:true});
$.getScript('JS/Menues.js',function()
{
Navigation (NrHauptmenue, NrUntermenue);
});
$.ajaxSetup({cache:false});
});
});
</script>
... weiter mit HTML ...
Was ich nicht nachvollziehen kann, ist, warum mir bei den beiden Anweisungen, in denen ich die Variablen NrHauptmenue und NrUntermenue auf Existenz hin prüfe, der Hinweis ausgegeben wird, dass hier undefinierte Indizes vorlägen, denn genau darauf hin prüfe ich ja.
Welcher Fehler ist mir bei der Prüfung unterlaufen?
Vielen Dank für eure Hilfe und Gruß,
Enrico
PS: Ich kann wahrscheinlich leider erst nach Feierabend antworten
Hi,
Hallo,
if (!isset ($_POST['NrHauptmenue']) && $_POST['NrHauptmenue'] == "undefined")
Wenn NrHauptmenue NICHT gesetzt ist UND NrHauptmenue == undefined
Wie soll NrHauptmenue, wenn es gar nicht gesetzt ist, den Wert "undefined" haben?
Vermutlich wolltest Du hier || statt && nutzen.
cu,
Andreas
Hallo Andreas,
stimmt, etwas nicht-Gesetztes kann auch keinen undefinierten Zustand haben.
Werde ich heute Abend gleich ausprobieren, danke Dir aber an dieser Stelle schon mal prophylaktisch für die Lösung dieses Problems :-)
Gruß
Enrico
Moin Enrico,
stimmt, etwas nicht-Gesetztes kann auch keinen undefinierten Zustand haben.
Verwechselst du vielleicht gerade JavaScript (typeof blub == 'undefined') und PHP? In PHP gibt es keinen Operator, der dir 'undefined' zurück gibt für eine nicht gesetzte Variable.
LG,
CK
Lieber Enrico,
if (!isset ($_POST['NrHauptmenue']) && $_POST['NrHauptmenue'] == "undefined")
Besser so:
if (!array_key_exists('NrHauptmenue', $_POST) || empty($_POST['NrHauptmenue'])) {}
Mittlerweile nutze ich lieber array_key_exists() anstatt isset() - obwohl das nur eine aufwendigere Schreibweise ist, für die ich Dir keinen vernünftigen Grund nennen kann. Aber das logische Oder (||) und die empty()-Funktion solltest Du allen Ernstes beherzigen (Christian Kruse hat es schon angedeutet)!
Auch wenn es in JS erlaubt ist und vom Parser entsprechend interpretiert wird, solltest Du trotzdem am Ende der Zuweisungszeile ein Semikolon notieren:
echo 'NrHauptmenue = 0;';
----------------------^
Liebe Grüße,
Felix Riesterer.
Tach!
if (!isset ($_POST['NrHauptmenue']) && $_POST['NrHauptmenue'] == "undefined")
Besser so:
if (!array_key_exists('NrHauptmenue', $_POST) || empty($_POST['NrHauptmenue'])) {}
Mittlerweile nutze ich lieber array_key_exists() anstatt isset() - obwohl das nur eine aufwendigere Schreibweise ist, für die ich Dir keinen vernünftigen Grund nennen kann.
Es gibt nur einen Grund, array_key_exists() zu verwenden: isset() liefert bei null als Inhalt ein false, array_key_exists() hingegen auch dann ein true - natürlich nur, wenn der Schlüssel existiert. Der Unterschied ist jedoch bei $_POST irrelevant, weil null nicht von PHP in dieses Array geschrieben wird.
dedlfix.
Lieber dedlfix,
Es gibt nur einen Grund, array_key_exists() zu verwenden: isset() liefert bei null als Inhalt ein false, array_key_exists() hingegen auch dann ein true - natürlich nur, wenn der Schlüssel existiert.
das war mir jetzt ein "fachlich hilfreich" wert. Ganz herzlichen Dank dafür!
Liebe Grüße,
Felix Riesterer.
Hallo Felix,
wie vermutet habe ist dieser Hinweis jetzt weg.
Danke Dir recht herzlich für Deine Hilfe.
Gruß
Enrico