Notice: Undefined Index. Come faccio a definire l’indice?

Ho ricevuto una risposta di:

Notice: Undefined index aa in Page1.php alla riga 11

Notice: Undefined index mm Page1.php linea 12

Notice: Undefined index dd Page1.php la linea 13

Cosa devo fare per definire questi aa, mm, gg?

  <?php 
       $redirect_page= 'Page2.php';

       $_SESSION['yy'] = $_POST['yy'];  //this is on line 11
       $_SESSION['mm'] = $_POST['mm'];  //this is on line 12
       $_SESSION['dd'] = $_POST['dada'];//this is on line 13

      if (isset($_POST['Submit'])) {
          header ('Location: '.$redirect_page);
      }

  ?>

      <HTML>

      <Form name="Page1" action="" method="POST">

      <select name="yy">
      <option value="2001">2001</option>
         //...Another 100 years
      </select>

       <select name="mm">
       <option value="1">1</option>
       <option value="2">2</option>
         //... another 10 months
       </select>

       <select name="dd">
       <option value="1">1</option>
       <option value="2">2</option>
          //...another 29 days
       </select>

        <input type="Submit" name="Submit" value="Submit">
        </Form>
        </HTML>
POST e OTTENERE dati vengono inviati solo se c’è una selezione fatta. Il modo più semplice per aggirare questo è quello di avere un default di selezione effettuata in forma. In secondo luogo, di verificare i dati prima di fare qualcosa con esso utilizza una funzione come !empty()
possibile duplicato di PHP: “Notice: Undefined variable” e “Notice: Undefined index”

OriginaleL’autore Mike | 2013-10-02

4 risposte

  1. 5

    Provare la disposizione di tali variabili post in un isset funzione

    $_SESSION['yy'] = isset($_POST['yy']) ? $_POST['yy'] : "";  //this is on line 11
    $_SESSION['mm'] = isset($_POST['mm']) ? $_POST['mm'] : "";  //this is on line 12
    $_SESSION['dd'] = isset($_POST['dada']) ? $_POST['dada'] : "";//this is on line 13

    OriginaleL’autore Janzell Jurilla

  2. 6

    Conosco persone già aswered, ma voglio darvi un piccolo consiglio. Utilizzare questa piccola funzione qui sotto :

    function _post($Var, $Default=''){
        return (isset($_POST[$Var]) === TRUE ? $_POST[$Var] : $Default);
    }

    È possibile impostare il valore di default nel caso in cui la variabile non viene trovato. Si occupa anche della undefined index errore 😉

    Undefined index dire che la voce non è stato trovato nell’array. In questo caso, le voci yy, mm e dd non esiste nel $_POST array. Devi controllare se esiste usando il linguaggio PHP costruire comando isset. Utilizzare come segue :

    $_SESSION['yy'] = _post('yy', date('Y')); //will be the value of $_POST['yy'] or it not found will be the current year
    $_SESSION['mm'] = _post('mm', date('M')); //... or will be the current month (MM)
    $_SESSION['dd'] = _post('dd', date('d')); //... or will be the current day (DD)

    È possibile creare una funzione diversa in base alle vostre esigenze :

    function _get($Var, $Default=''){
        return (isset($_GET[$Var]) === TRUE ? $_GET[$Var] : $Default);
    }
    
    function _session($Var, $Default=''){
        return (isset($_SESSION[$Var]) === TRUE ? $_SESSION[$Var] : $Default);
    }
    
    function _put($Var, $Default=''){
        return (isset($_PUT[$Var]) === TRUE ? $_PUT[$Var] : $Default);
    }
    
    function _delete($Var, $Default=''){
        return (isset($_DELETE[$Var]) === TRUE ? $_DELETE[$Var] : $Default);
    }
    
    function _files($Var, $Default=NULL){
        return (isset($_FILES[$Var]) === TRUE ? $_FILES[$Var] : $Default);
    }
    Per la tua prima funzione, non è necessario il TRUE o le staffe. Basta fare return isset($_POST[$Var]) ? $_POST[$Var] : $Default;.
    Sì, ma è più chiaro da leggere ed è anche un modo standard per scrivere codice PHP.
    Io non sono d’accordo su entrambi i fronti, anche se so che una o due persone che anche prendere la stessa vista. Per il bene di interesse, il mio approccio è quello di leggere isset($x) ? come “se $x” ad alta voce, che credo abbia più senso in inglese di “se $x è uguale a true”. Ma è un punto secondario; si ottiene il mio +1 per una soluzione di lavoro.
    Grazie. L’altro motivo, anche se non vale qui, è il comparazioni contro un valore booleano. Diciamo si dispone di una funzione che può restituire 0, 1, FALSE o TRUE (bad design all’inizio, ma), è possibile che si desidera utilizzare === per controllare contro un valore booleano. Se si utilizza if(myFunction()) poi 1 e TRUE sarà vero in questo caso. Tuttavia, l’utilizzo di if(myFunction() === TRUE) sarà vero solo se la funzione di restituire TRUE. Il concetto si applica anche qui, anche se isset ritorno FALSE o TRUE. Dal mio punto di vista, tutto deve essere standard e uniforme in tutto il codice. Se qualcun altro venire
    Se qualcun altro vieni a leggere il mio codice, saprà che sto cercando TRUE e non 1 o TRUE. Questo si applica per ogni lingua che non è stretto su 1 o affermazione VERA, come PHP e Javascript. Tuttavia, in C#, quello che dici sarebbe meglio, perché 1 non è VERO. Ma, c’è un compilatore che permette di convertire e fissare il tutto, a questo punto. Ora l’unica ragione per la sinistra è quello di essere in grado di leggere in un modo più semplice per te.

    OriginaleL’autore David Bélanger

  3. 2

    È necessario avviare la sessione di PHP prima di impostare i valori:

    <?php 
       session_start(); 
    
       $redirect_page= 'Page2.php';
    
       $_SESSION['yy'] = $_POST['yy'];
       $_SESSION['mm'] = $_POST['mm'];
       $_SESSION['dd'] = $_POST['dada'];
    
       //rest of code
    ?>

    OriginaleL’autore Walter Gandarella

  4. 1

    provare

    if(isset($_POST['yy']))
        $_SESSION['yy'] = $_POST['yy'];
    if(isset($_POST['mm']))
        $_SESSION['mm'] = $_POST['mm'];
    if(isset($_POST['dd']))
        $_SESSION['dd'] = $_POST['dd']; //assuming it is $_POST['dd'] and not $_POST['dada']

    OriginaleL’autore Pramod

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *