MySQL UPDATE - Problème de $_SESSION['id']

Eléphant du PHP | 122 Messages

01 févr. 2009, 22:32

Bonsoir,

J'ai une page qui affiche les infos du membre:
<?php if (!session_id()) session_start();?>

<div id = "profils">
	<form action = "../formulaire/inscription/profil_maj.php" method = "post">
<fieldset>
       <legend>Mon profil sur Avenir-Acier</legend> <!-- Titre du fieldset -->

<fieldset><legend>MES INFORMATIONS PERSONNELLES</legend>

	<p> <label for="inscr_prenom">Mon prénom :</label><br />
	<input type="text" name="inscr_prenom" id="inscr_prenom" value="<?php echo $coordonnees['inscr_prenom'];?>"/>
	</p>

	<p> <label for="inscr_nom_famille">Mon nom :</label><br />
	<input type="text" name="inscr_nom_famille" id="inscr_nom_famille" value="<?php echo stripslashes($coordonnees['inscr_nom_famille']);?>"/> </p>

	<p> <label for="inscr_sexe">Je suis :</label><br />
       <select name="inscr_sexe" id="inscr_sexe" value="<?php echo stripslashes($coordonnees['inscr_sexe']);?>">
		   <option value="Homme">Un homme</option>
           <option value="Femme">Une femme</option>
       </select>
   </p>

	<p> <label for="inscr_lieu">J'habite :</label><br />
       <select name="inscr_lieu" id="inscr_lieu" value="<?php echo stripslashes($coordonnees['inscr_lieu']);?>">
			<optgroup label="Europe">
               <option value="allemagne">Allemagne</option>
			</optgroup>
       </select>
   </p>

<p> <label for="date_de_naissance">Ma date de naissance :</label><br />       
		<select name="jour_de_naissance" id="jour_de_naissance" value="<?php echo stripslashes($coordonnees['inscr_lieu']);?>">
               <option value="1">1</option>
			   </select>
		<select name="mois_de_naissance" id="mois_de_naissance" value="<?php echo stripslashes($coordonnees['inscr_lieu']);?>">
               <option value="1">Janvier</option>
			   </select>
		<select name="annee_de_naissance" id="annee_de_naissance" value="<?php echo stripslashes($coordonnees['inscr_lieu']);?>">
               <option value="1930">1930</option>
               <option value="1931">1931</option>
		</select>
</p>
</fieldset>

<fieldset><legend>MES INFORMATIONS DE CONNEXION</legend>

	<p> <label for="inscr_pass">Votre mot de passe actuel:</label><br />
	<input type="password" name="inscr_pass" id="inscr_pass" value="<?php echo stripslashes($coordonnees['inscr_pass']);?>" /> </p>
	
	<p> <label for="inscr_pass_new">Voici mon nouveau mot de passe :</label><br />
	<input type="password" name="inscr_pass_new" id="inscr_pass_new" /> </p>
	
	<p> <label for="inscr_pass_new_verif">Vérification du nouveau mot de passe :</label><br />
	<input type="password" name="inscr_pass_new_verif" id="inscr_pass_new_verif" /> </p>
</fieldset>

<fieldset><legend>MES INFORMATIONS VIRTUELLES</legend> <!-- Titre du fieldset -->

		<p> <label for="inscr_website">Site web ou blog :</label><br />
		<input type="text" name="inscr_website" id="inscr_website" value="<?php echo stripslashes($coordonnees['inscr_website']);?>"/> </p>

		<p> <label for="inscr_email">Email :</label><br />
		<input type="text" name="inscr_email" id="inscr_email" value="<?php echo stripslashes($coordonnees['inscr_email']);?>"/> </p>

		<p> <label for="inscr_email_2">Retapez votre email :</label><br />
		<input type="text" name="inscr_email_2" id="inscr_email_2"/> </p>
		
		<p> <label for="inscr_msn">MSN Messenger :</label><br />
		<input type="text" name="inscr_msn" id="inscr_msn" value="<?php echo stripslashes($coordonnees['inscr_msn']);?>"/> </p>

</fieldset>

	<p><input type="submit" value="Mettre à jour mon profil" id = "valider"></p>
	</form></p>
	</fieldset></p>
</fieldset>
<div id = "message">
</div>
</p>
Et puis j'ai cette page qui traite le formulaire d'avant:
<?php
//Cette fonction doit être appelée avant tout code html
error_reporting(E_ALL);
session_start();

// On se prépare à se connecter à la BDD
$hostname = "";
$database = "";
$username = "";
$password = "";
 
$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());

if (!$connection) { die('Connexion impossible : ' . mysql_error());}
//echo 'Connexion réussie';

// Connexion à la base
mysql_select_db($database, $connection);
?>

<?php
//On récupère les infos du membre
       $requete1 = mysql_query("SELECT * FROM membre WHERE id='".$_SESSION['id']."'");
	   if ($data1 = mysql_fetch_assoc($requete1))
       {
       //On affiche rien (c'est juste pour la suite des operations)
}
       echo $data1; //Test d'affichage des variables

//Récupération des variables du formulaire envoyé en POST

$i = 0;
$id=intval($_SESSION['id']);
$prenom = mysql_real_escape_string($_POST['inscr_prenom']);
$nom_famille = mysql_real_escape_string($_POST['inscr_nom_famille']);
$sexe = mysql_real_escape_string($_POST['inscr_sexe']);
$lieu = mysql_real_escape_string($_POST['inscr_lieu']);
$pass = mysql_real_escape_string($_POST['inscr_pass_new']);
$pass_confirm = mysql_real_escape_string($_POST['inscr_pass_new_verif']);
$website = mysql_real_escape_string($_POST['inscr_website']);
$email = mysql_real_escape_string($_POST['inscr_email']);
$msn = mysql_real_escape_string($_POST['inscr_msn']);

//Vérification du mdp
if ($pass != $pass_confirm || empty($pass_confirm) || empty($pass))
{
$mdp_erreur = "Votre mot de passe et votre confirmation diffèrent ou sont vides";
$i++;
}

//Vérification de l'adresse email

//Il faut que l'adresse email n'ait jamais été utilisée (sauf si elle n'a pas été modifiée)
if (strtolower($data1['inscr_email']) != strtolower($email))
{
        $nombremail = mysql_result(mysql_query("SELECT count(*) FROM membre WHERE inscr_email = '".$email."' AND id = $id"), 0);

        if ($nombremail!= 0)
        {
        $email_erreur1 = "Votre adresse email est déjà utilisée par un membre";
        $i++;
        }

        //On vérifie la forme maintenant
        if (!preg_match("#^[a-z0-9A-Z._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email))
        {
        $email_erreur2 = "Votre nouvelle adresse E-Mail n'a pas un format valide";
        $i++;
        }
}
//Vérification de l'adrese msn
if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $msn) && !empty($msn))
{
$msn_erreur = "Votre nouvelle adresse MSN n'a pas un format valide";
$i++;
}

if ($i == 0) // Si $i est vide, il n'y a pas d'erreur
{
        //On modifie la table
 
        mysql_query("UPDATE membre SET
		inscr_prenom='$prenom',
		inscr_nom_famille='$nom_famille',
		inscr_sexe='$sexe',
		inscr_lieu='$lieu',
		inscr_pass='$pass',
		inscr_website='$website',
		inscr_email='$email',
		inscr_msn='$msn'
		WHERE id=$id") or die (mysql_error());
}
else
{
        echo'<h1>Modification interrompue</h1>';
        echo'<p>Une ou plusieurs erreurs se sont produites pendant la modification du profil</p>';
        echo'<p>'.$mdp_erreur.'</p>';
        echo'<p>'.$email_erreur1.'</p>';
        echo'<p>'.$email_erreur2.'</p>';
        echo'<p>'.$msn_erreur.'</p>';
}
?>
Quand je clique sur mettre à jour le profil il m'affiche ces deux erreurs:
Notice: Undefined index: id in /mnt/web2/htdocs/formulaire/inscription/profil_maj.php on line 23

Notice: Undefined index: id in /mnt/web2/htdocs/formulaire/inscription/profil_maj.php on line 33
Voici les lignes 23 et 33:
//On récupère les infos du membre
       $requete1 = mysql_query("SELECT * FROM membre WHERE id='".$_SESSION['id']."'");
$id=intval($_SESSION['id']);
Donc si vous avez une idée sur le problème ...

J'ai passé l'après-midi dessus alors là j'en peux plus ....

D'avance merci beaucoup.

ViPHP
ViPHP | 1996 Messages

01 févr. 2009, 23:22

Où mets tu $_SESSION['id'] = quelque chose ?

je veux dire que ton message d'erreur indique que $_SESSION['id'] n'a pas été créé donc pas de
<?php
$_SESSION['id'] = "";
?>
Si tu l'a créé dans une autre page d'identification, vérifie que la session est bien démarrée sur l'autre pas avec session_start() et que les cookies soient bien activé (pour transmettre l'identifiant de session) ou que l'identifiant de session passe par l'URL si les cookies sont désativés
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

ViPHP
ViPHP | 3607 Messages

01 févr. 2009, 23:26

Bonsoir,
php t'indique que l'entrée 'id' du tableau de session n'existe pas...
Donc où et comment initialises-tu cette donnée?

Eléphant du PHP | 122 Messages

02 févr. 2009, 00:18

J'ai modifier ce bout de script:
<?php
//On récupère les infos du membre
$requete1 = mysql_query("SELECT id FROM membre WHERE inscr_pseudo='".$_SESSION['inscr_pseudo']."'") or die(mysql_error());  # debug;

//Puis on boucle le tout pour tout afficher
while($row = mysql_fetch_row($requete1)) {

//var_dump($row);  # debug
}

//Test d'affichage des variables
echo 'coucou1';
var_dump($row);  # debug
echo 'coucou2';?>

J'ai rajouté le WHILE et les ECHOS et il m'affiche ce resultat:

Code : Tout sélectionner

coucou1bool(false) coucou2
---------EDIT---------

Bon je laisse tomber pour ce soir ... je crois que je suis entrain de faire plus de dégâts qu'autre chose ...

Voici le dernier code que j'ai modifié ...

<?php
//Cette fonction doit être appelée avant tout code html
error_reporting(E_ALL);
session_start();

// On se connecte à la BDD
mysql_connect("", "", "");
mysql_select_db("");

// On fait la requête pour afficher la liste des news
$requete_membre = mysql_query("SELECT * FROM membre WHERE inscr_pseudo='".$_SESSION['inscr_pseudo']."'") or die(mysql_error());  # debug;

//Puis on boucle le tout pour tout afficher
while($liste_membre = mysql_fetch_array($requete_membre)) 
{ 
    echo $liste_membre['id'];
}
?>

<?php
//Cette fonction doit être appelée avant tout code html
//error_reporting(E_ALL);
//session_start();

// On se prépare à se connecter à la BDD
//$hostname = "";
//$database = "";
//$username = "";
//$password = "";
 
//$connection = mysql_connect($hostname, $username, $password) or die(mysql_error());

//if (!$connection) { die('Connexion impossible : ' . mysql_error());}
//echo 'Connexion réussie';

// Connexion à la base
//mysql_select_db($database, $connection);
?>

<?php
//On récupère les infos du membre
$requete1 = mysql_query("SELECT id FROM membre WHERE inscr_pseudo='".$_SESSION['inscr_pseudo']."'") or die(mysql_error());  # debug;

//Puis on boucle le tout pour tout afficher
while($row = mysql_fetch_row($requete1)) {

//var_dump($row);  # debug


	   if ($data1 = mysql_fetch_assoc($requete1))
       {
	   }

//Test d'affichage des variables
echo 'coucou1';
var_dump($row);  # debug
echo 'coucou2';
}
//Récupération des variables du formulaire envoyé en POST

$i = 0;
$id=intval($liste_membre['id']);
$prenom = mysql_real_escape_string($_POST['inscr_prenom']);
$nom_famille = mysql_real_escape_string($_POST['inscr_nom_famille']);
$sexe = mysql_real_escape_string($_POST['inscr_sexe']);
$lieu = mysql_real_escape_string($_POST['inscr_lieu']);
$pass = mysql_real_escape_string($_POST['inscr_pass_new']);
$pass_confirm = mysql_real_escape_string($_POST['inscr_pass_new_verif']);
$website = mysql_real_escape_string($_POST['inscr_website']);
$email = mysql_real_escape_string($_POST['inscr_email']);
$msn = mysql_real_escape_string($_POST['inscr_msn']);

//Vérification du mdp
if ($pass != $pass_confirm || empty($pass_confirm) || empty($pass))
{
$mdp_erreur = "Votre mot de passe et votre confirmation diffèrent ou sont vides";
$i++;
}

//Vérification de l'adresse email

//Il faut que l'adresse email n'ait jamais été utilisée (sauf si elle n'a pas été modifiée)
if (strtolower($data1['inscr_email']) != strtolower($email))
{
        $nombremail = mysql_result(mysql_query("SELECT count(*) FROM membre WHERE inscr_email = '".$email."' AND id = $id"), 0);

        if ($nombremail!= 0)
        {
        $email_erreur1 = "Votre adresse email est déjà utilisée par un membre";
        $i++;
        }

        //On vérifie la forme maintenant
        if (!preg_match("#^[a-z0-9A-Z._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $email) || empty($email))
        {
        $email_erreur2 = "Votre nouvelle adresse E-Mail n'a pas un format valide";
        $i++;
        }
}
//Vérification de l'adrese msn
if (!preg_match("#^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$#", $msn) && !empty($msn))
{
$msn_erreur = "Votre nouvelle adresse MSN n'a pas un format valide";
$i++;
}

if ($i == 0) // Si $i est vide, il n'y a pas d'erreur
{
        //On modifie la table
 
        mysql_query("UPDATE membre SET
		inscr_prenom='$prenom',
		inscr_nom_famille='$nom_famille',
		inscr_sexe='$sexe',
		inscr_lieu='$lieu',
		inscr_pass='$pass',
		inscr_website='$website',
		inscr_email='$email',
		inscr_msn='$msn'
		WHERE id=$id") or die (mysql_error());
}
else
{
        echo'<h1>Modification interrompue</h1>';
        echo'<p>Une ou plusieurs erreurs se sont produites pendant la modification du profil</p>';
        echo'<p>'.$mdp_erreur.'</p>';
        echo'<p>'.$email_erreur1.'</p>';
        echo'<p>'.$email_erreur2.'</p>';
        echo'<p>'.$msn_erreur.'</p>';
}
?>

Je sais qu'il y a des fonctions en double mais bon ...

Maintenant avec ce code il me retourne ce message:

4 coucou1array(1) { [0]=>  string(1) "4" } coucou2

Donc il affiche ID coucou1 le ARRAY puis coucou2 ...

Donc là ca fonctionne en partie mais il y a encore des choses à revoir ...

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 févr. 2009, 12:15

Les erreurs de type NOTICE sont non-bloquantes pour tes scripts, mais elles te forcent (si tu en tiens compte) à être le plus rigoureux possible, et donc à rendre tes scripts de meilleure qualité et avec une meilleure compatibilité.

Dans ton cas, il suffit, comme l'ont dit les autres de mettre
$_SESSION['id'] = 0; avant de remplir la variable ou d'utiliser le test if(isset($_SESSION['id'])){ //lecture de la variable} avant d'accéder au contenu :-)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Invité
Invité n'ayant pas de compte PHPfrance

02 févr. 2009, 13:39

Ok alors je vais essayer ça ...

Je le mets juste après session_start(); et je vais voir ce que ça donne ...

Eléphant du PHP | 122 Messages

02 févr. 2009, 20:28

J'ai modifié le champ id en inscr_id ce sera plus simple je pense ...