Problème modification profil membre !

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2007, 16:36

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

Eléphant du PHP | 445 Messages

11 janv. 2007, 16:38

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)
LLDC
Ulti

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 janv. 2007, 16:39

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 :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2007, 16:46

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 :(

Eléphant du PHP | 445 Messages

11 janv. 2007, 16:48

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); 

?>
Modifié en dernier par Ultim4T0m le 11 janv. 2007, 17:37, modifié 2 fois.
LLDC
Ulti

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2007, 16:50

Je sélectionne par rapport au pseudo !

Eléphant du PHP | 445 Messages

11 janv. 2007, 17:41

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']) ?
LLDC
Ulti

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2007, 18:14

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 :?:

Eléphant du PHP | 445 Messages

11 janv. 2007, 18:34

Question idiote. Le champ de session, c'est `pseudo` ou il porte un autre nom ?
LLDC
Ulti

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2007, 18:39

Je sélectionne toujours au pseudo !

Eléphant du PHP | 445 Messages

11 janv. 2007, 19:02

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
LLDC
Ulti

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 janv. 2007, 19:02

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 :))
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2007, 19:15

Alors là , je comprend rien !

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

Eléphant du PHP | 445 Messages

11 janv. 2007, 19:19

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'] ?
LLDC
Ulti

Invité
Invité n'ayant pas de compte PHPfrance

11 janv. 2007, 19:25

En général, je ne met pas $_session mais seulement echo $pseudo !