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

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : MySQL UPDATE - Problème de $_SESSION['id']

par Jackisback » 02 févr. 2009, 20:28

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

par Invité » 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 ...

par mere-teresa » 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 :-)

par Jackisback » 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 ...

par jojolapine » 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?

par Aureusms » 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

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

par Jackisback » 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.