Problème recupération id dans session

Eléphant du PHP | 388 Messages

27 nov. 2010, 09:55

bonjour a tous,

Quand un utilisateurs se connecte a sont compte il rempli des champs, ces champs sont ensuite enregistré dans une table cependant j'ai un message d'erreur lors de l'enregistrement.

Notice: Undefined variable: idutilisateurs in C:\Program Files\EasyPHP-5.3.3\www\php\validationannonce.php on line 20
Column count doesn't match value count at row 1
Je pense que idutilisateurs n'arrive pas a se mettre, pourriez vous m'aiguillé s'il vous plait merci d'avance.

Car la session démarre bien mais ....
<?php
session_start();

if ( isset( $_SESSION['idutilisateurs']) ) {
// Recuperation pour la variable 
$idutilisateurs = $_SESSION['idutilisateurs'];
}
if (isset($_SESSION['email'])) {


 // traitement
$titreannonce=$_POST['titreannonce'];
$categorie=$_POST['categorie'];
$souscategorie=$_POST['souscategorie'];
$description=$_POST['description'];
$prix=$_POST['prix'];

include ('connect.php');
           
$ajoutannonce = "INSERT INTO annonces (titreannonce,categorie,souscategorie,description,prix,idutilisateurs) VALUES ('$titreannonce','$categorie','$souscategorie','$description','$prix','".date("Y-m-d H:i:s")."','$idutilisateurs')";
$req = mysql_query($ajoutannonce)or die(mysql_error());        
               
	
} else {
        echo '<br>Vous n\'avez pas les droits pour regarder cette page...<br><br>';
        echo '<a href="index.php">Retour</a>';
}

?>

Eléphant du PHP | 388 Messages

27 nov. 2010, 10:08

déja j'ai trouver une erreur le champs date :)

je penser rajouter cela
$idutilisateurs=mysql_insert_id(); 
mais cela ne marche pas j'ai une autre erreur

Warning: Unknown: Your script possibly relies on a session side-effect which existed until PHP 4.2.3. Please be advised that the session extension does not consider global variables as a source of data, unless register_globals is enabled. You can disable this functionality and this warning by setting session.bug_compat_42 or session.bug_compat_warn to off, respectively in Unknown on li

ViPHP
xTG
ViPHP | 7331 Messages

27 nov. 2010, 10:20

Pourquoi stockes-tu le retour de mysql_insert_id() dans la variable qui contient le retour de la session ?_?
Cette fonction va te retourner la dernière clé insérée, quelle est-elle dans ta table ? idutilisateurs ???

Eléphant du PHP | 388 Messages

27 nov. 2010, 10:51

En faite je veut recuperer l'id de l'utilisateur pour le rajouter a son annonce

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 nov. 2010, 11:28

Il faut distinguer les deux erreurs que tu rencontres et les traiter individuellement.

La première est un message d'avertissement : "Notice: Undefined variable: idutilisateurs" qui t'indique qu'à la ligne 20 de ton script tu fais appel à la variable idutilisateurs, alors que celle-ci n'est pas définie. En effet, ta variable idutilisateurs n'est définie que si la variable $_SESSION['idutilisateurs'] existe, ce qui ne semble pas toujours être le cas.

Il faut donc t'assurer que tu as bien une variable en session, mais surtout gérer le cas où celle-ci n'est pas présente. Vérifie que lorsque tu mets l'email de l'utilisateur en session, tu mets bien son id également (vérifie l'orthographe, le pluriel, les majuscules, etc.)

Une fois que tu récupéreras bien ton id, tu pourras l'utiliser dans ta requête sql :)

Second point, tu as une erreur dans ta requête sql : "Column count doesn't match value count at row 1". Tu n'indiques pas le même nombre de colonnes et de valeurs dans ta requête. Tu déclares en effet 6 colonnes (titreannonce, categorie, souscategorie, description, prix, idutilisateurs), mais tu tentes d'y insérer 7 valeurs ('$titreannonce', '$categorie', '$souscategorie', '$description', '$prix', '".date("Y-m-d H:i:s")."', '$idutilisateurs')

Comme le disais xTG, la fonction mysql_insert_id() te permet de récupérer l'id créé par mysql via auto_increment lors de la dernière insertion. Au mieux ici, il te permettrait de récupérer le dernier id de l'annonce que tu viens d'insérer. L'id de l'utilisateur connecté doit provenir de la session (et tu l'obtiendras en résolvant le premier point :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 388 Messages

27 nov. 2010, 16:19

merci pour vos réponses c'est bizarre sa bloc un peut la pas d'erreur voici le script de connexion.
<?php
 session_start();
 include_once 'connect.php';

 $email    = mysql_real_escape_string($_POST['email']);
 $password = mysql_real_escape_string($_POST['password']);


 $sql = "SELECT email, idutilisateurs  FROM utilisateurs WHERE email = '".$email."' AND password = '".md5($password)."'";

 $req   = mysql_query($sql);
 $count = mysql_num_rows($req);
 $row   = mysql_fetch_assoc($req);

        //Le couple doit être de 1 sinon il y une erreur.
        if($count != 1)
        {
                header('Location: erreurconnexion.php');
                exit();
        }
        else
        {
                //La suite ici.
           $_SESSION['email']          = $user['email'];
       $_SESSION['idutilisateurs'] = $user['idutilisateurs'];
    }

 header('Location: ../monespace.php');


 ?>

Eléphant du PHP | 388 Messages

27 nov. 2010, 21:54

aprés ma page de connexion si je valide le formulaire

j'ai placer cela pour voir
<?php
session_start();

if ( isset( $_SESSION['idutilisateurs']) ) {
// Recuperation pour la variable 
$idutilisateurs = $_SESSION['idutilisateurs'];
}
if (isset($_SESSION['email'])) {


echo $_SESSION['idutilisateurs'];
echo $_SESSION['email'];
}

?>
effectivement id n'est pas récupéré j'ai analyser et rien trouvé lol

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

27 nov. 2010, 22:30

Quand ton utilisateur s'authentifie, tu fais un select pour récupérer les infos en base et tu stockes le résultat dans la variable $row :
$row   = mysql_fetch_assoc($req);
Le problème, c'est qu'ensuite, quand tu veux mettre ces valeurs en session, tu fais appel à une variable $user qu'on sait pas d'où elle sort ;)
           $_SESSION['email']          = $user['email'];
       $_SESSION['idutilisateurs'] = $user['idutilisateurs'];
Du coup, tes variables sont bien crées en session, mais elles sont vides :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 388 Messages

28 nov. 2010, 10:24

cela marche nikel j'ai gardé mon $user et je les remplacé dans
 $user  = mysql_fetch_assoc($req);
.
J'ai testé chaque page pour voir si il rapatriée bien dans la session l'id et l'email et cela marche bien.
Je te remercie pour ton aide