Page 1 sur 2

Problème modification profil membre !

Posté : 11 janv. 2007, 16:36
par Invité
Bonjour,

Dans mon espace membre, le membre a la possibilité de modifier son profil (Mot de passe, email....)

Je vient de découvrir un petit problème !

En effet,lorsque il change son adresse email,le script vérifie que ce mail n'existe pas déja ! Mais si il ne fait aucune modification,cela lui dit que c'est email existe déja ==> Normal,puisque c'est la sienne !

Donc,comment je pourrait faire ?

Voici le code :
$reponse_mail=mysql_query("SELECT email FROM membres WHERE email='$email'") or die ('Erreur : '.mysql_error());
$count_mail=mysql_num_rows($reponse_mail);
if($count_mail == 1)
{
echo'Cet e-mail existe déjà';
include_once('bas.php');
exit();
Merci par avance

Posté : 11 janv. 2007, 16:38
par Ultim4T0m
Tu peux simplement vérifier si le mail passé en $_POST correspond au mail stocké dans ta table (en gros, tu les compares pour savoir si oui ou non une modification a été effectuée)

Posté : 11 janv. 2007, 16:39
par Ryle
Tu pourrais compléter la condition WHERE de ta requête avec un AND et préciser que l'identifiant doit être différent de celui de l'utilisateur connecté. Ainsi pas de risque de le comparer au sien :)

Posté : 11 janv. 2007, 16:46
par Invité
préciser que l'identifiant doit être différent de celui de l'utilisateur connecté. Ainsi pas de risque de le comparer au sien :)
Oui,cela serait bien !

Euh..comment on fait ? :lol:

parce que là,je vois pas :(

Posté : 11 janv. 2007, 16:48
par Ultim4T0m
Tout dépend de comment tu identifies ton membre...
Tu te bases sur quoi pour ta $_SESSION ?

Son nom, son mail, son id ?


Par exemple, pour $_SESSION['id'] :
<?php

$reponse_mail=mysql_query("SELECT email FROM membres WHERE email='".$email."' AND id!=".$_SESSION['id']) or die ('Erreur : '.mysql_error());

$count_mail=mysql_num_rows($reponse_mail); 

?>

Posté : 11 janv. 2007, 16:50
par Invité
Je sélectionne par rapport au pseudo !

Posté : 11 janv. 2007, 17:41
par Ultim4T0m
Peut-être comme ça alors :
<?php

$reponse_mail=mysql_query("SELECT email FROM membres WHERE email='".$email."' AND pseudo!='".$_SESSION['pseudo']."'") or die ('Erreur : '.mysql_error());

$count_mail=mysql_num_rows($reponse_mail); 

?>
D'ailleurs, une question me titille... Dans le cas d'un nombre, comme par exemple un id, il vaut mieux mettre ...$_SESSION['id']."") ou ...$_SESSION['id']) ?

Posté : 11 janv. 2007, 18:14
par Invité
Ca na pas l'air de fonctionner... :(

si je fait :

$reponse_mail=mysql_query("SELECT email FROM membres WHERE email='".$email."' AND pseudo!='".$_SESSION['pseudo']."'") or die ('Erreur : '.mysql_error()); 
$count_mail=mysql_num_rows($reponse_mail);
J'ai exactement le meme problème :?:

Posté : 11 janv. 2007, 18:34
par Ultim4T0m
Question idiote. Le champ de session, c'est `pseudo` ou il porte un autre nom ?

Posté : 11 janv. 2007, 18:39
par Invité
Je sélectionne toujours au pseudo !

Posté : 11 janv. 2007, 19:02
par Ultim4T0m
Hum, ça vient peut-être du fait qu'en SQL, on ne note pas != mais <> (il me semble pourtant que les deux fonctionnement)

Au passage, fait un echo de $_SESSION['pseudo'], on ne sait jamais

Posté : 11 janv. 2007, 19:02
par Ryle
D'ailleurs, une question me titille... Dans le cas d'un nombre, comme par exemple un id, il vaut mieux mettre ...$_SESSION['id']."") ou ...$_SESSION['id']) ?
Le ."" ajoute une chaine vide, ce qui dans ton sql (et en général) ne sert absolument à rien :) Le seul intérêt que tu pourrais avoir à faire ceci est la conversion implicite en chaine que cela engendre.

Si la question était relative aux apostrophes, il ne faut en effet pas en mettre dès lors que le champ visé est numérique. MySQL tolère que l'on mette des apostrophes autour des nombres et fait la conversion (dont il se serait très bien passé si on ne lui avait pas collé les ' ;))

Pour en revenir au sujet, vérifie/affiche la valeur dans ta session, vérifie la requête sql générée, joue la dans mysql, ...

(et pour les fois suivantes, je ne saurais trop que te conseiller d'utiliser des identifiants numériques plutôt que des chaines comme clé primaire de tes tables :))

Posté : 11 janv. 2007, 19:15
par Invité
Alors là , je comprend rien !

Si je fait ca :
SELECT email FROM membres WHERE email<=>'$email'"
Ca fonctionne ?

Posté : 11 janv. 2007, 19:19
par Ultim4T0m
Oula

L'opérateur <> en SQL correspond tout simplement au != de PHP

Ce que tu viens de faire n'a, d'une part, aucun sens, et ne te serais d'aucune utilité puisque toi, ce que tu veux, c'est voir si le mail entré est déjà présent dans la table membres.

En plus de ta vérification dans ton WHERE email='".$email."', nous te proposons de rajouter une condition, à savoir AND pseudo<>'".$_SESSION['pseudo']."'

As-tu fais un echo de $_SESSION['pseudo'] ?

Posté : 11 janv. 2007, 19:25
par Invité
En général, je ne met pas $_session mais seulement echo $pseudo !