Undefined index

Eléphanteau du PHP | 17 Messages

04 août 2006, 05:44

Bonjour,

j'ai un script qui teste l'existence d'un login/password dans une table. Il fonctionne parfaitement, j'affecte alors mon $_SESSION avec le login. J'en vérifie le contenu, c'est OK.

A l'issue, je veux donner l'accès complet au site, et j'utilise la commande header pour afficher la 1ère "vraie" page du site. Mais dès que j'arrive sur cette page appelée par header, et bien que faisant immédiatement "session_start()" je constate que j'ai perdu le contenu de mon $_SESSION, pourtant bel et bien affecté dans le script qui a contrôlé le login. J'ai alors le message "Undefined index login ...".

Auriez vous une idée ? Merci de vos réponses.

Eléphant du PHP | 88 Messages

04 août 2006, 08:59

Salut.

Pourrais tu mettre un petit bout de code (celui où tu rentre ta variable session login et le header, etc)

Merci

Eléphanteau du PHP | 17 Messages

04 août 2006, 12:51

Le problème rencontré n'est plus le même qu'à l'origine. J'ai maitenant le message suivant lorsque s'affiche la page issue du header :

Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\bm_new.php:5) in c:\program files\easyphp1-8\www\bm_club.php on line 3

la ligne 3 correspond au session_start()

Le message suivant donne le script php qui appelle la page où se trouve le warning.
Modifié en dernier par bruninho le 04 août 2006, 13:31, modifié 2 fois.

Eléphanteau du PHP | 17 Messages

04 août 2006, 12:58

Voici donc le php qui vérifie login et password et lance une autre page par le header :
<?php

// Verifiation du login et password

// On démarre la session
session_start();
$_SESSION['bmlogin'] = 0;
$loginOK = false;

// On effectue les traitements que si les infos ont été bien postées
if ( isset($_POST) && (!empty($_POST['bmlogin'])) && (!empty($_POST['bmpass'])) )
  {
     extract($_POST);

// on se connecte à MySQL
$db = mysql_connect('localhost', 'root', '');

// on sélectionne la base
mysql_select_db('mabase',$db); 

  // On va chercher le mot de passe afférent à ce login
  $sql = "SELECT * FROM membre WHERE membre_login = '".$_POST['bmlogin']."';";

  $req = mysql_query($sql) or die('Erreur SQL : <br />'.$sql);
 
  // On vérifie que l'utilisateur existe bien
  if (mysql_num_rows($req) > 0) {
     $data = mysql_fetch_assoc($req);
   
    // On vérifie que son mot de passe est correct
    if ($bmpass == $data['membre_passwd']) {
      $loginOK = true;
    }
  }
}

// Si le login a été validé on met les données en sessions
if ($loginOK) {
  
  $_SESSION['bmlogin'] = $data['membre_login'];
 
  // a ce stade, la variable $_SESSION est bien chargée

  header("Location: accueil.php");
  
}
else {
  
  echo '<div align="center"><b><font face="verdana" size="1" color="red">Login incorrect ...</font></b></div>';

}
?>
Jusque là, ça va ! $_SESSION est bien chargée juste avant le "header", si je fais un echo, elle contient bien le login que j'ai saisi.

Eléphanteau du PHP | 17 Messages

04 août 2006, 13:35

La page accueil.php ne donne pas le warning (et donc tout va bien) si c'est une page "simple".

Par contre, si accueil.php est une page avec des pseudo frames, là, j'ai le "warning". J'entends par pseudo frames la volonté de ne faire bouger que le centre de la page, les colonnes de gauche et de droite n'évoluant pas (menus)

Que faire pour enlever ce warning ?

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

04 août 2006, 13:57

Pour enlever Warning: session_start(): Cannot send session cache limiter - headers already sent (output started at c:\program files\easyphp1-8\www\bm_new.php:5) in c:\program files\easyphp1-8\www\bm_club.php on line 3 il va falloir mettre le header avant toute sortie (espace, caractère, echo, balise HTML) et donc peut-être repenser ton if.else
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Eléphanteau du PHP | 17 Messages

04 août 2006, 13:58

Merci bien de cette réponse, je pense que je vais pouvoir résoudre ;)