Page 1 sur 2

requête mysql...

Posté : 10 févr. 2006, 15:03
par jojolapine
bonjour à tous, ma question pourrait se trouver dans la partie mysql, mais je me sert de php pour faire ma requête alors je pose la question içi:
J'ai une page où je propose aux utilisateurs de changer leurs données et options, la voici, ça ça marche, j'envoi ensuite les données du formulaire à modif_action.php que voici (en simplifié, y a plusieurs champs modifiés mais bon...
<?php
session_start();
if (isset($_SESSION['user'])!=TRUE){
	echo "<p align=\"center\"><font size=\"6\" color=\"red\"><blink>Vous n'êtes pas authentifié!!!</blink></font></p>";
	echo "<p align=\"center\"><font size=\"4\">Vous ne pouvez donc pas accéder à cette page</font></p>";
	echo "<a href=\"concerts_benevoles.php\">Retour</a>";
} else {
	$connexion=mysql_connect("localhost","root","");
	$db=mysql_query("CREATE DATABASE bobine");
	$db=mysql_select_db("bobine",$connexion);
	$nom=$_POST['chnom'];
	if ( $nom!=$_SESSION['nom']){
		$insertion=mysql_query("UPDATE user SET 'nom='.$nom.' WHERE nom= '.$_SESSION['nom'].'");
		$_SESSION['nom']=$nom;
	}
	mysql_close();
	header('Location: user.php');
}
?>
je sais que le problème ne viens pas du passage de donnée avec la mérhode POST, puisque ma variable SESSION est bien mise à jour comme il faut, mais pas la bdd...
si vous pourviez me réécrire ma requête?

Posté : 10 févr. 2006, 15:07
par charabia
Tu as un tit mélange de " et ' qui posent souci. Essaies ça :
$insertion=mysql_query("UPDATE user SET nom='".$nom."' WHERE nom='".$_SESSION['nom']."'");

Posté : 10 févr. 2006, 15:11
par jojolapine
je viens de faire un test, ça marche à une chose près, si j'ai deux personnes qui ont le même nom de famille, ça remplace les deux, alors comment je peut faire pour faire un update en précisant l'id?

Posté : 10 févr. 2006, 15:19
par charabia
Pas testé, mais ça marche si après le WHERE tu rajoutes un AND id=X ?

Sinon pourquoi ne pas te baser sur l'ID qui est unique pour faire ton update ? à la place de la session ?

Posté : 10 févr. 2006, 15:30
par jojolapine
j'ai essayer plusieurs chose avec ta piste, rien ne marche...voici ce que j'ai fait:
$miseajour=mysql_query("UPDATE user SET nom='".$nom."' WHERE nom='".$_SESSION['nom']."' AND id=".$_SESSION['id']."");
$miseajour=mysql_query("UPDATE user SET nom='".$nom."' WHERE nom='".$_SESSION['nom']."' AND id='".$_SESSION['id']."'");
$miseajour=mysql_query("UPDATE user SET nom='".$nom."' WHERE  id='".$_SESSION['id']."'");
$miseajour=mysql_query("UPDATE user SET nom='".$nom."' WHERE  id='.$_SESSION['id'].'");
Que faire...? :cry:

Posté : 10 févr. 2006, 15:33
par charabia
Assures toi déjà que $_SESSION['id'] existe et te donne une valeur. Si c'est le cas, la bonne syntaxe est :
$miseajour=mysql_query("UPDATE user SET nom='".$nom."' WHERE id=".$_SESSION['id']."");

Posté : 10 févr. 2006, 15:40
par jojolapine
lorsque je fait un echo $_SESSION['id'], le résultat est : 0, ce qui est normal puisque je modifi le premier membre de la liste...

Posté : 10 févr. 2006, 15:42
par charabia
Bé en fait là tout dépend de ce que tu veux modifier. Il faut que tu te bases sur l'ID, le champ de la base pour pointer dessus.

Dans ton formulaire, passe en champ HIDDEN l'ID en question et tu récupères avec WHERE id=".$_POST['id']."

Posté : 10 févr. 2006, 15:45
par jojolapine
je suis prit d'un doute, le nom='"..."', ce nom correspond bien au nom da ma colonne, si je veu changer le prenom, je fait
$miseajour=mysql_query("UPDATE user SET prenom='".$mavariable."' WHERE id=".$_SESSION['id']."");

Posté : 10 févr. 2006, 15:47
par charabia
Oui c'est bien ça ;)

Posté : 10 févr. 2006, 15:48
par jojolapine
l'id je la récupère lors de l'identification de l'utilisateur: voici mon code:
<?php      /*pass.php*/
session_start();
$util=$_POST['utilisateur'];
$motpass=$_POST['pass'];
//requête MySql
$connexion=mysql_connect("localhost","root","");
$db=mysql_select_db("bobine",$connexion);
$resultat=mysql_query("select * from user",$connexion);
$nb=mysql_num_rows($resultat);
for ($i=0;$i<$nb;$i++){
	$pseudo=mysql_result($resultat,$i,"pseudo");
	if ($pseudo==$util){
		$pass=mysql_result($resultat,$i,"password");
		if ($pass==$motpass){
			$_SESSION['id']=$i;
			$_SESSION['user']=$util;
			$_SESSION['password']=$pass;
			$_SESSION['nom']=mysql_result($resultat,$i,"nom");
			$_SESSION['prenom']=mysql_result($resultat,$i,"prenom");
			$_SESSION['email']=mysql_result($resultat,$i,"email");
			$_SESSION['tel']=mysql_result($resultat,$i,"tel");
			$_SESSION['quartier']=mysql_result($resultat,$i,"quartier");
			$_SESSION['ville']=mysql_result($resultat,$i,"ville");
			$_SESSION['codepostal']=mysql_result($resultat,$i,"codepostal");
			$_SESSION['montrer_email']=mysql_result($resultat,$i,"montrer_email");
			$_SESSION['montrer_tel']=mysql_result($resultat,$i,"montrer_tel");
			$_SESSION['montrer_adresse']=mysql_result($resultat,$i,"montrer_adresse");
			$_SESSION['droit_voirdate']=mysql_result($resultat,$i,"droit_voirdate");
			$_SESSION['droit_sinscrire']=mysql_result($resultat,$i,"droit_sinscrire");
			$_SESSION['droit_ajoutdate']=mysql_result($resultat,$i,"droit_ajoutdate");
			$_SESSION['droit_ajoututil']=mysql_result($resultat,$i,"droit_ajoututil");
			$_SESSION['droit_ajoutcrenaux']=mysql_result($resultat,$i,"droit_ajoutcrenaux");
			mysql_close();
			if (isset($_SESSION['erreur'])==TRUE){
				unset($_SESSION['erreur']);
			}
			break;
		} else {
			$_SESSION['erreur']="Le mot de passe que vous avez saisi est incorrect";
			if (isset($_SESSION['user'])==TRUE){
				unset($_SESSION['user']);
			}
			if (isset($_SESSION['id'])==TRUE){
				unset($_SESSION['id']);
			}
		}
	} else {
		$_SESSION['erreur']="le nom d'utilisateur n'éxiste pas";
		if (isset($_SESSION['user'])==TRUE){
			unset($_SESSION['user']);
		}
		if (isset($_SESSION['id'])==TRUE){
				unset($_SESSION['id']);
		}
	}
}
header('Location: concerts_benevoles.php');
?>
donc l'id est bien là dans ma variable $_SESSIOn['id'] (je vois pas pourquoi une de mes variables session amrcherai pas alors que les autres oui)...

Posté : 10 févr. 2006, 15:56
par charabia
Si tu as bien la valeur de l'ID récupéré alors tu peux faire :
$miseajour=mysql_query("UPDATE user SET prenom='".$mavariable."' WHERE id=".$_SESSION['id']."");
Pour tester avant de faire le UPDATE, affiche juste la session ID pour plusieurs choix pour voir si ça change ou pas.

Posté : 10 févr. 2006, 16:02
par jojolapine
décidément, quand ça veut pas.... :evil:
je viens de vérifier avec la deuxième personne inscrite, et l'id devient 1, je suppose donc que de se côter là tout va bien...
et sinon je pourrait pas faire ave REPLACE? (je croit que j'ai déja vu ça quelque part)...

Posté : 10 févr. 2006, 16:37
par charabia
Déjà pour tester si ta requête fonctionne, fait là directement dans phpMyAdmin pour voir si la modification est prise en compte.

Posté : 10 févr. 2006, 16:46
par jojolapine
Bon t'avais raison, ça vient de la requête, quand je test dans mysql:
l'erreur est qu'il ne connait pas le champ id:

Code : Tout sélectionner

UPDATE user SET nom='dupond' WHERE ID=1
est-ce que quelqun connait la requête sql exacte pour spécifier en fonction de l'id et non pas remplacer tout les champs qui ont telle valeur?