Max: Proble: "Notice: Undefined index"

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

  1. 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
    
    1. 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?
      
      1. 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  
        
        
        1. 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)
          
          1. 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.

            1. 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)