web-dev-qa-db-fra.com

Index non défini avec PHP sessions

Je suis nouveau sur PHP et je suis encore plus débutant en ce qui concerne les sessions. J'ai ma page index.php, où les utilisateurs peuvent s'inscrire et se connecter. Les formulaires sont publiés sur les pages validate.php et loginvalidate.php, respectivement pour l'enregistrement et la connexion.

J'ai ces erreurs sur index.php quand je le charge:

1) Avis: Index non défini: enregistré 2) Avis: Index non défini: jamais utilisé

J'ai essayé de modifier mon texte de plusieurs façons, mais je n'ai jamais réussi à résoudre les erreurs.

Index.php

    <?php
            if ($_SESSION['registered'] != NULL){
                echo $_SESSION['registered'];                   
            }
            if ($_SESSION['badlogin'] != NULL){
                echo $_SESSION['badlogin'];
            }
            if ($_SESSION['neverused'] != NULL) {
                echo $_SESSION['neverused'];                    
            }
    ?>

Validate.php (après avoir soumis le formulaire d'inscription)

    if (mysqli_num_rows($result) > 0) {  //IF THERE IS A PASSWORD FOR THAT EMAIL IN DATABASE
    $_SESSION['registered'] = "Email is already registered.";
    mysqli_close($db_handle);
    header('Location: index.php');
    exit();
}

Loginvalidate.php (après avoir soumis le formulaire de connexion)

if ($numrows!=0)  //IF THERE IS A PASSWORD FOR THAT EMAIL IN THE DATABASE
{
  if ($row['password'] == $password) {  //IF THE PASSWORD MATCHES USER INPUT
      header('Location: homepage.php');
      echo "lol";
      exit();
  }
  else{
    $_SESSION['badlogin'] = "Email/password combination not valid.";
    mysqli_close($db_handle);
    header('Location: index.php');
    exit();
  } 
}
else {  //THERE IS NO PASSWORD FOR THAT EMAIL, SO THAT EMAIL IS NOT REGISTERED
    $_SESSION['neverused'] = "Email is not registered.";
    mysqli_close($db_handle);
    header('Location: index.php');
    exit();
}

Bon alors mon script fait ce qu'il est censé faire. La seule chose que je ne peux pas résoudre est ces erreurs de session. Voyez-vous une mauvaise utilisation des sessions? Bien sûr, j'ai commencé les sessions dans tous mes fichiers .php.

Notez également que je suis conscient qu'il n'y a aucune protection contre les pirates. C'est uniquement pour un futur prototype qui ne contiendra aucune donnée importante.

9
LPB

La raison de ces erreurs est que vous essayez de lire une clé de tableau qui n'existe pas. La fonction isset () est là pour que vous puissiez tester cela. Quelque chose comme ce qui suit pour chaque élément fonctionnera un régal; il n'y a pas besoin de vérifications nulles car vous n'affectez jamais null à un élément:

// check that the 'registered' key exists
if (isset($_SESSION['registered'])) {

    // it does; output the message
    echo $_SESSION['registered'];

    // remove the key so we don't keep outputting the message
    unset($_SESSION['registered']);
}

Vous pouvez également l'utiliser en boucle:

$keys = array('registered', 'badlogin', 'neverused');

//iterate over the keys to test
foreach($keys as $key) {

    // test if $key exists in the $_SESSION global array
    if (isset($_SESSION[$key])) {

        // it does; output the value
        echo $_SESSION[$key];

        // remove the key so we don't keep outputting the message
        unset($_SESSION[$key]);
    }
}
17
George Brighton

Si vous obtenez des erreurs d'index non définies, vous pouvez essayer de vous assurer que vos index sont définis avant d'essayer de comparer les valeurs. Voir la documentation de la fonction isset ici: http://php.net/manual/en/function.isset.php

if (isset($_SESSION['registered']))
  if ($_SESSION['registered'] != NULL){
      echo $_SESSION['registered'];                   
  }
}
if (isset($_SESSION['badlogin']))
  if ($_SESSION['badlogin'] != NULL){
      echo $_SESSION['badlogin'];
  }
}
if (isset($_SESSION['neverused']))
  if ($_SESSION['neverused'] != NULL) {
      echo $_SESSION['neverused'];                    
  }
}
4
TeejMonster