problème mise a jour bdd par $id

Eléphanteau du PHP | 17 Messages

12 janv. 2011, 16:55

bonjour,
j'ai modifié une page qui au départ permet a mes membres de mettre a jour leur propre profil en récupérant leur variable session car je voudrai l'utiliser dans l'administration pour modifier aussi leur profil....

j'ai donc modifier les informations suivante :

j'ai rajouté cette partie pour récupérer l'id du membre :
if (empty($_GET["id"])) header("location: index.php");
$id=$_GET['id'];
et remplacé :
if(mysql_query('update membre set pseudo="'.$pseudo.'", pass="'.$pass.'", email="'.$email.'", att="'.$att.'", def="'.$def.'", habilite="'.$habilite.'", attaque="'.$attaque.'", defense="'.$defense.'" where pseudo="'.$_SESSION['pseudo'].'"'))
par :
if(mysql_query('update membre set pseudo="'.$pseudo.'", pass="'.$pass.'", email="'.$email.'", att="'.$att.'", def="'.$def.'", habilite="'.$habilite.'", attaque="'.$attaque.'", defense="'.$defense.'" where id=$id'))
ainsi que :
$dnn = mysql_fetch_array(mysql_query('select pseudo,pass,email,att,def,habilite,attaque,defense from membre where pseudo="'.$_SESSION['pseudo'].'"'));
par :
$dnn = mysql_fetch_array(mysql_query("select * from membre where id=$id;"));
j'arrive sur ma page profil.php avec un lien sous la forme http://localhost/admin/profil.php?id=65 ( ou 65 est l'id d'un membre )
jusque là tout va bien car ma page s'affiche normalement et les données du membre sont récupérées correctement car elles s'affichent bien dans le formulaire....

par contre quand je modifie des valeurs dans le formulaire et que je valide, les nouvelles infos ne sont pas inscrites dans la bdd et j'ai le message suivant :
"Une erreur est survenue lors des modifications."
je ne trouve pas mon erreur et j'ai un doute sur le where id=$id

le code complet de ma page profil.php :
<?php
include ('../mysqlcnn.php');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Administration de <?php echo TITRE_SITE; ?></title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <link rel="stylesheet" media="screen" type="text/css" href="design.css" />
   </head>

<body>

	<div align="center">
	<div id="banniere">
	
	</div>
	</div>
<?php 
include ('includes/menu.php');
 ?>


<div id="corps">
<h2>
<center>
Page de mise à jour de votre profil et statistiques
<div id="tableau">

<hr>
<?php

if (empty($_GET["id"])) header("location: index.php");
//$id = intval($_GET['id']);
$id=$_GET['id']; 
//On verifie si lutilisateur est connecte
if(isset($_SESSION['pseudo']))
{
	//On verifie si le formulaire a ete envoye
	if(isset($_POST['pseudo'], $_POST['pass'], $_POST['passverif'], $_POST['email'], $_POST['att'], $_POST['def'], $_POST['habilite'], $_POST['attaque'], $_POST['defense']))
	{
		//On verifie si le mot de passe et celui de la verification sont identiques
		if($_POST['pass']==$_POST['passverif'])
		{
			//On verifie si le mot de passe a 6 caracteres ou plus
			if(strlen($_POST['pass'])>=6)
			{
				//On enleve lechappement si get_magic_quotes_gpc est active
				if(get_magic_quotes_gpc())
				{
					$_POST['pseudo'] = stripslashes($_POST['pseudo']);
					$_POST['pass'] = stripslashes($_POST['pass']);
					$_POST['email'] = stripslashes($_POST['email']);
					$_POST['att'] = stripslashes($_POST['att']);
					$_POST['def'] = stripslashes($_POST['def']);
					$_POST['habilite'] = stripslashes($_POST['habilite']);
					$_POST['attaque'] = stripslashes($_POST['attaque']);
					$_POST['defense'] = stripslashes($_POST['defense']);
				}
				//On verifie si lemail est valide
				if(preg_match('#^(([a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+\.?)*[a-z0-9!\#$%&\\\'*+/=?^_`{|}~-]+)@(([a-z0-9-_]+\.?)*[a-z0-9-_]+)\.[a-z]{2,}$#i',$_POST['email']))
				{
					//On echape les variables pour pouvoir les mettre dans une requette SQL
					$pseudo = mysql_real_escape_string($_POST['pseudo']);
				    $pass = mysql_real_escape_string($_POST['pass']);
					$email = mysql_real_escape_string($_POST['email']);
					$att = mysql_real_escape_string($_POST['att']);
					$def = mysql_real_escape_string($_POST['def']);
					$habilite = mysql_real_escape_string($_POST['habilite']);
					$attaque = mysql_real_escape_string($_POST['attaque']);
					$defense = mysql_real_escape_string($_POST['defense']);


						//On modifie les informations de lutilisateur avec les nouvelles
						// if(mysql_query('update membre set pseudo="'.$pseudo.'", pass="'.$pass.'", email="'.$email.'", att="'.$att.'", def="'.$def.'", habilite="'.$habilite.'", attaque="'.$attaque.'", defense="'.$defense.'" where pseudo="'.$_SESSION['pseudo'].'"'))
						 if(mysql_query('update membre set pseudo="'.$pseudo.'", pass="'.$pass.'", email="'.$email.'", att="'.$att.'", def="'.$def.'", habilite="'.$habilite.'", attaque="'.$attaque.'", defense="'.$defense.'" where id=$id'))

						{
							//Si ca a fonctionne, on naffiche pas le formulaire
							$form = false;
							//On supprime la session pseudo au cas ou il aurait modifie son pseudo
							unset($_SESSION['pseudo']);
		?>
		<center>
		Vos informations ont bien &eacute;t&eacute; modifif&eacute;e. Vous devez vous reconnecter.<br />
		<a href="connection.php">Se connecter</a>
		</center>
		<?php
						}
						else
						{
							//Sinon on dit quil y a eu une erreur
							$form = true;
							$message = 'Une erreur est survenue lors des modifications.';
						}

				}
				else
				{
					//Sinon, on dit que lemail nest pas valide
					$form = true;
					$message = 'L\'email que vous avez entr&eacute; n\'est pas valide.';
				}
			}
			else
			{
				//Sinon, on dit que le mot de passe nest pas assez long
				$form = true;
				$message = 'Le mot de passe que vous avez entr&eacute; contien moins de 6 caract&egrave;res.';
			}
		}
		else
		{
			//Sinon, on dit que les mots de passes ne sont pas identiques
			$form = true;
			$message = 'Les mot de passe que vous avez entr&eacute; ne sont pas identiques.';
		}
	}
	else
	{
		$form = true;
	}
	if($form)
	{
		//On affiche un message sil y a lieu
		if(isset($message))
		{
			echo '<strong>'.$message.'</strong>';
		}
		//Si le formulaire a deja ete envoye on recupere les donnes que lutilisateur avait deja insere
		if(isset($_POST['pseudo'],$_POST['pass'],$_POST['email']))
		{
			$pseudo = htmlentities($_POST['pseudo']);
			if($_POST['pass']==$_POST['passverif'])
			{
				$pass = htmlentities($_POST['pass']);
			}
			else
			{
				$pass = '';
			}
			$email = htmlentities($_POST['email']);
			$att = htmlentities($_POST['att']);
			$def = htmlentities($_POST['def']);
			$habilite = htmlentities($_POST['habilite']);
		}
		else
		{
			//Sinon, on affiche les donnes a partir de la base de donnee
			// $dnn = mysql_fetch_array(mysql_query('select pseudo,pass,email,att,def,habilite,attaque,defense from membre where pseudo="'.$_SESSION['pseudo'].'"'));
			$dnn = mysql_fetch_array(mysql_query("select * from membre where id=$id;"));
			$pseudo = htmlentities($dnn['pseudo']);
			$pass = htmlentities($dnn['pass']);
			$email = htmlentities($dnn['email']);
			$att = htmlentities($dnn['att']);
			$def = htmlentities($dnn['def']);
			$habilite = htmlentities($dnn['habilite']);
			$attaque = htmlentities($dnn['attaque']);
			$defense = htmlentities($dnn['defense']);
		}
		//On affiche le formulaire
?>

<center>

<form action="profil.php?id=<?php echo $id;?>" method="post">
Vous pouvez modifier vos informations:<br />
Nom d'utilisateur:<input type="text" name="pseudo" value="<?php echo $pseudo; ?>" /><br />
Mot de passe(6 caract&egrave;res min.):<input type="password" name="pass" value="<?php echo $pass; ?>" /><br />
Mot de passe(v&eacute;rification):<input type="password" name="passverif" value="<?php echo $pass; ?>" /><br />
Email:<input type="text" name="email" value="<?php echo $email; ?>" /><br />
total points d'attaque :<input type="text" name="att" value="<?php echo $att; ?>" /><br />
total points de défense :<input type="text" name="def" value="<?php echo $def; ?>" /><br />
Nombre de formation en habilité :<input type="text" name="habilite" value="<?php echo $habilite; ?>" /><br />
Nombre de formation en attaque :<input type="text" name="attaque" value="<?php echo $attaque; ?>" /><br />
Nombre de formation en défense :<input type="text" name="defense" value="<?php echo $defense; ?>" /><br />
<input type="submit" value="Envoyer" />
</form>
</center>

<?php
	}
}
else
{
?>
<center>
La connection est obligatoire pour acceder à cette page.<br />
<a href="connection.php">se connecter</a>
</center>
<?php
}
?>

</div>
<br />
<div id="tableau">
</div>
<br />
<br />
<a href="<?php echo URL_SCRIPT; ?>/contact.php">contacter le webmaster</a>
</center>
</h2>
</div>

</body>
</html>





mysqlcnn.php contient les infos pour la connexion à la bdd....

ViPHP
ViPHP | 3607 Messages

12 janv. 2011, 17:32

Essaye ce code et tu verras ton erreur:
<?php

echo 'update membre set pseudo="'.$pseudo.'", pass="'.$pass.'", email="'.$email.'", att="'.$att.'", def="'.$def.'", habilite="'.$habilite.'", attaque="'.$attaque.'", defense="'.$defense.'" where id=$id';

Eléphanteau du PHP | 17 Messages

12 janv. 2011, 18:02

merci pour ta réponse rapide , je viens de suivre ton conseil et
le résultat est le suivant :

Code : Tout sélectionner

update membre set clodo="essai", pass="123456", email="[email protected]", att="108", def="110", habilite="100", attaque="120", defense="105" where id=$id
le problème vient donc bien de la variable $id qui ne prend pas la valeur de l'id et je comprends pas pourquoi !!!! elle est pourtant bien récupérée en haut de page et valide vu que j'ai une redirection sur l'index si pas reconnue et que mon formulaire est bien rempli avec les données du membre :evil:

une idée ?????

ViPHP
ViPHP | 3607 Messages

12 janv. 2011, 18:06

Alors deuxième test (c'est pour apprendre hein ;) )
<?php

var_dump(
    $id ,
    'update membre set pseudo="'.$pseudo.'", pass="'.$pass.'", email="'.$email.'", att="'.$att.'", def="'.$def.'", habilite="'.$habilite.'", attaque="'.$attaque.'", defense="'.$defense.'" where id=$id'
);
Tu verras qu'effectivement ta variable $id devrait être bien remplie... Mais c'est la manière de t'en servir qui ne va pas :)
un petit lien (ça à pas l'air terrible m'enfin) : http://www.generationphp.net/cours/concatenation/

Eléphanteau du PHP | 17 Messages

12 janv. 2011, 18:27

if(mysql_query('update membre set pseudo="'.$pseudo.'", pass="'.$pass.'", email="'.$email.'", att="'.$att.'", def="'.$def.'", habilite="'.$habilite.'", attaque="'.$attaque.'", defense="'.$defense.'" where id="'.$id.'"'))
c bon ça marche avec çà !!!! =D>

Eléphanteau du PHP | 17 Messages

12 janv. 2011, 18:29

merci jojolapine pour les petites astuces qui vont bien :mrgreen: