Proble: "Notice: Undefined index"
Max
- php
Hi
ich habe ein switch/case code geschrieben der mir den wechsel das angezeigten seiteninhalts ermöglicht.
Aber leider bekommm ich folgende Fehlermeldung:
Notice: Undefined index: p in G:\xampp\htdocs\templer\content.php on line 2
Hier noch der code:
<?php
switch ($_GET['p']) {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;
default : $inhalt = array('content/leer.php', 'Startseite');
}
?>
ich hab bereits in mehreren foren gelesen das ich mit einer bestimmten anweisung das ganze beheben könnte: die neue anweisung steht in zeile 2
<?php
if (isset($_GET['p'])) $p = $_GET['p'];
switch ($p) {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;
default : $inhalt = array('content/leer.php', 'Startseite');
}
?>
so nun bekommt ich aber folgende Fehlermeldung:
Notice: Undefined variable: p in G:\xampp\htdocs\templer\content.php on line 4
Was kann ich da machen?
Gruß
Max
Hi,
<?php
switch ($_GET['p']) {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;default : $inhalt = array('content/leer.php', 'Startseite');
}
?>
Wenn an die Seite kein Paramter "p" übergeben wird ist $\_GET['p'] selbstverständlich undefined.
Du musst also prüfen ob $\_GET['p'] gesetzt ist (mit isset()), und falls nicht in diesem Fall wohl am einfachsten einen Defaultwert zuweisen.
~~~php
<?php
// Wenn URL-Paremter "p" nicht gesetzt ist Default-Wert setzen.
if(!isset($_GET['p']){
$_GET['p'] = '';
}
switch ($_GET['p']) {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;
default : $inhalt = array('content/leer.php', 'Startseite');
}
?>
Oder kürzer mit dem ternären Operator:
<?php
switch (isset($_GET['p']) ? $_GET['p'] : '') {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;
default : $inhalt = array('content/leer.php', 'Startseite');
}
?>
Oder, Möglichkeit 3, falls default ausgeführt werden soll falls $_GET['p'] nicht gesetzt ist so:
<?php
// Wenn URL-Paremter "p" gesetzt ist entsprechend des Wertes Inhalt setzen.
if(isset($_GET['p']){
switch ($_GET['p']) {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;
// "Seite nicht gefunden"-Seite
default : $inhalt = array('content/404.php', '404');
}
}else{
// Falls Kein URL-Parameter "p" gesetzt ist die Startseite anzeigen.
$inhalt = array('content/leer.php', 'Startseite');
}
?>
<?php
if (isset($_GET['p'])) $p = $_GET['p'];
switch ($p) {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;default : $inhalt = array('content/leer.php', 'Startseite');
}
?>
>
> so nun bekommt ich aber folgende Fehlermeldung:
> Notice: Undefined variable: p in G:\xampp\htdocs\templer\content.php on line 4
$p wird ja auch nur gesetzt falls $\_GET['p'] gesetzt ist.
Gleiches Problem wie oben, nur jetzt eben mit $p.
Umkopieren von Variablen ist prinzipiell übrigens unnötig.
~dave
Hi,
Oder kürzer mit dem ternären Operator:
<?php
switch (isset($_GET['p']) ? $_GET['p'] : '') {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;default : $inhalt = array('content/leer.php', 'Startseite');
}
?>
>
> Oder, Möglichkeit 3, falls default ausgeführt werden soll falls $\_GET['p'] nicht gesetzt ist so:
Das passiert doch mit obigem Code eh schon.
Wenn $\_GET['p'] nicht existiert, vergleicht switch den Leerstring '' mit 'test'. Das ergibt nicht true, also wird der default-Zweig ausgeführt.
MfG ChrisB
--
RGB is totally confusing - I mean, at least #C0FFEE should be brown, right?
Hallo ChrisB
Oder kürzer mit dem ternären Operator:
<?php
switch (isset($_GET['p']) ? $_GET['p'] : '') {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;default : $inhalt = array('content/leer.php', 'Startseite');
}
?>
> >
> > Oder, Möglichkeit 3, falls default ausgeführt werden soll falls $\_GET['p'] nicht gesetzt ist so:
>
> Das passiert doch mit obigem Code eh schon.
> Wenn $\_GET['p'] nicht existiert, vergleicht switch den Leerstring '' mit 'test'. Das ergibt nicht true, also wird der default-Zweig ausgeführt.
ja, aber mit dem Code von Möglichkeit 3 hat dave dem OP zusätzlich die Möglichkeit gegeben zwischen $\_GET['p'] nicht gesetzt und $\_GET['p'] hat einen 'unsinnigen' Wert (warum auch immer) zu unterscheiden und je nachdem die Startseite, oder eine 404 Fehlerseite auszugeben.
Liebe Grüße
mbr
Hallo ChrisB
Oder kürzer mit dem ternären Operator:
<?php
switch (isset($_GET['p']) ? $_GET['p'] : '') {
case 'test' : $inhalt = array('content/test.php', 'Test');
break;default : $inhalt = array('content/leer.php', 'Startseite');
}
?>
> > >
> > > Oder, Möglichkeit 3, falls default ausgeführt werden soll falls $\_GET['p'] nicht gesetzt ist so:
> >
> > Das passiert doch mit obigem Code eh schon.
> > Wenn $\_GET['p'] nicht existiert, vergleicht switch den Leerstring '' mit 'test'. Das ergibt nicht true, also wird der default-Zweig ausgeführt.
>
> ja, aber mit dem Code von Möglichkeit 3 hat dave dem OP zusätzlich die Möglichkeit gegeben zwischen $\_GET['p'] nicht gesetzt und $\_GET['p'] hat einen 'unsinnigen' Wert (warum auch immer) zu unterscheiden und je nachdem die Startseite, oder eine 404 Fehlerseite auszugeben.
>
> Liebe Grüße
>
> mbr
»»
Danke euch für die hilfe
also ich hatte heute eine windows-neuinstallation und nachdem ich fertig war wollte ich weiterarbeiten und siehe da keine fehlermeldung mehr
ich hab keine ahnung warum aber es lag vllt daran das ich die website auf meinem rechner liegen hatte und die mit xampp zum laufen brachte und das einen fehler irgendwie hatte
jadenfalls jetzt geht es ohne probleme
Gruß
Max
ps ich hab mir eure Tipps fürs nächste mal aufgeschrieben :o)
jadenfalls jetzt geht es ohne probleme
Lass mich raten. Jetzt steht das error_reporting so, dass es keine notice mehr anzeigt. Wenn es dir ausreicht, dass die Probleme nicht mehr angezeigt werden, anstatt das Problem zu beheben,ist natürlich alles in Ordnung, allerdings wird dein Code damit nie wirklich fehlerfrei sein.
jadenfalls jetzt geht es ohne probleme
Lass mich raten. Jetzt steht das error_reporting so, dass es keine notice mehr anzeigt. Wenn es dir ausreicht, dass die Probleme nicht mehr angezeigt werden, anstatt das Problem zu beheben,ist natürlich alles in Ordnung, allerdings wird dein Code damit nie wirklich fehlerfrei sein.
ok du hattest recht
da ich nicht der einzige bin der dran arbeitet dachte mein 'kollege' er setzt einfach mal die bilddatei die durch den fehler verschoben wird mit:
position: absolut;
z-index: 10;
an seine richtige position und dadurch wurde die fehler meldung verdeckt
hab es erst heute in firebug entdeckt
und eine einfache und nich nervenaufreibende lösung gefunden:
if (isset($_GET['p']) == TRUE){
$p = $_GET['p'];
}
else {
$p = '';
}
switch ($p) {
case 'test' :
$inhalt = array('content/test.php', 'Test');
break;
case 'test2' :
$inhalt = array('content/test2.php', 'Test2');
break;
}
Nochmals danke für eure hilfe jetzt kann ich ohne fehler weitermachen :o)