Variable $_SESSION['id'] non transmise

Résolu

Bonjour,

a la création de mon site j'avais oublié de passer $_SESSION['id'] lors de la connexion à l'espace admin.

Maintenant que je souhaite la rajouter, elle n'est pas transmise

$requete = 'SELECT * FROM admin WHERE login = "'.$_POST['login'].'" and mdp="'.$_POST['mdp'].'"';

		$result = $pdo->query($requete);

		
		if($result->rowCount()==0){
			header('location:erreur.php');
		}else{
			session_start();
			$ligne_tab = $result->fetch_assoc();
			$_SESSION['log'] = $ligne_tab[0];
			$_SESSION['mdp'] = $ligne_tab[1];
			$_SESSION['nom_ad'] = $ligne_tab[2];
			$_SESSION['prenom_ad'] = $ligne_tab[3];
			$_SESSION['sa'] = $ligne_tab[4];
			$_SESSION['title'] = $ligne_tab[5];
			$_SESSION['id'] = $ligne_tab[6];
			
			header('location:admin/gestion.php');
		}
session_start();

<?php
   echo "<pre>";
   print_r($_SESSION);
   echo "</pre>";
?>
Array
(
    [log] =>
    [mdp] =>
    [nom_ad] =>
    [prenom_ad] =>
    [sa] => 
    [site] => 
)

Il y a les bonnes données mais id n'est pas là.

Merci d'avance pour cotre aide.
Macintosh / Chrome 119.0.0.0


Bien PHPment et MySQLment
Delaville

3 réponses

  1. Modérateur

    Bonjour,

    Es tu sûr que ta variable $ligne_tab  contient bien les informations désirées ?

    Fais en un var_dump  ( et pense bien à mettre en commentaire ta redirection  pour pouvoir en voir le résultat ).

    A noter que tu fais un  fetch_assoc  ...  tu dois donc utiliser le "nom" des champs de ta table et non leur position dans l'array....

    https://www.php.net/manual/fr/pdostatement.fetch.php

    .

    Au passage, évites d'utiliser l'instruction   $pdo->query

    A la place, utilise les requêtes préparées. ( et pense à activer l'affichage des erreurs PDO )

    Voir le contenu de ce lien : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs


    1. bonjour

      Code modifié mais ne fonctionne toujours pas

      <?php
      session_start();
      ini_set('display_errors', 1);
      error_reporting(E_ALL);
      	include ('entete.php');		 
      	if(isset($_POST['valider'])){
      
      		$login = $_POST['login'];
      		$mdp = $_POST['mdp'];
      
      		$query = "SELECT * FROM admin WHERE login = :login AND mdp = :mdp";
      		$datas = array(':login'=>$login, ':mdp'=>$mdp);
      
      		try {
      			$result = $pdo->prepare($query);
      			$result->execute($datas);
      		} catch (Exception $e) {
      			echo " Erreur ! " . $e->getMessage();
      			echo " Les datas : ";
      			print_r($datas);
      		}
      
      		
      		if($result->rowCount()==0){
      			header('location:erreur.php');
      		}else{
      			
      			$row = $result->fetch();
      			$_SESSION['id_admin'] = $row['id'];
      			$_SESSION['log'] = $row['login'];
      			$_SESSION['mdp'] = $row['mdp'];
      			$_SESSION['nom_ad'] = $row['nom_ad'];
      			$_SESSION['prenom_ad'] = $row['prenom_ad'];
      			$_SESSION['sa'] = $row['sa'];
      			$_SESSION['title'] = $row['title'];
      			
      			header('location:admin/gestion.php');
      		}
      	
      	}else{
      ?>
      <div class="ligne_top"></div>
      <div class="row">
      	<div class="col-md-4">	
      		<form method="post" action="index.php">
      
      		<div class="form-group">
      			<label for="login">Nom d'utilisateur</label>
      			<input type="text" class="form-control" name="login" id="login" placeholder="Nom d'utilisateur">
      		</div>
      		<div class="form-group">
      			<label for="password">Mot de passe</label>
      			<input type="password" class="form-control" name="mdp" id="password" placeholder="Mot de passe ">
      		</div>
      		
      		<button type="submit" class="btn btn-primary" name="valider">Valider</button>
      		</form>
      
      	</div>
      </div>
      <?php
      	}
      	include ('footer.php');	

      Je te souhaite de bonnes fêtes


      1. Modérateur

        Tu as fait les var_dump que je t'ai demandé en désactivant les redirections ??

        Si oui, ça t'affiche quoi ?

      2. Modérateur
        @jordane45

        Et ta variable $pdo elle est initialisée où ? dans quel fichier ?

    2. Bonjour, le var_dump($_SESSION);

      me retourne

      array(7) { ["id_admin"]=> string(1) "1" ["log"]=> string(7) "######" ["mdp"]=> string(3) "#######" ["nom_ad"]=> string(7) "######" ["prenom_ad"]=> string(8) "#######" ["sa"]=> string(1) "1" ["title"]=> string(35) "#########" }

      Maintenant que j'ai fait ça le print_r($_SESSION) que j'a fait sur la page de redirection affiche bien "id_admin" qui ne passait pas avant. 

      Bizarre je ne comprends pas.

      Concernant la variable $pdo elle est appelé dans le fichier entete.php.

      connexion.php

      try{
      		$pdo = new PDO('mysql:host=####.mysql.db;dbname=########', '#######', '#######');
      		$pdo->exec("SET CHARACTER SET utf8");
      	}
      	catch(PDOException $e){
      		echo 'Connexion échouée : '.$e->getMessage();
      		exit();
      	}

      1. Merci.

        Comment je mets le sujet résolu ?