Page 1 sur 2

help ! *%$#@ de requêtes

Posté : 24 mars 2006, 17:02
par s_e_b
Bonjour,

je débute en PHP et je fais donc mes toutes premières pages : page de login pour des utilisateurs inscrits en base de donnée et pages d'inscription pour les nouveaux...

J'ai donc une page inscription1 avec un formulaire :

Code : Tout sélectionner

<form name="form1" action="" method="POST"> Votre e-mail : <input name="email" type="text" class="Style5" id="email" size="25"> <br> Pseudo : <input name="pseudo" type="text" class="Style5" id="pseudo" size="25"> <br> Mot de passe : <input name="pwd1" type="password" class="Style5" id="password" size="25"> <br> Retapez le mot de passe : <input name="pwd2" type="password" class="Style5" id="password" size="25"> <br> <input type="button" name="Submit" value="Inscription" onClick="javascript:checkForm();"> <? if(substr(getenv("QUERY_STRING"),-1,1)=='e'){print("Cette adresse mail existe d&eacute;j&agrave; dans notre base de donn&eacute;es !!");} if(substr(getenv("QUERY_STRING"),-1,1)=='p'){print("Ce pseudo existe d&eacute;j&agrave; dans notre base de donn&eacute;es !!");} ?> </form>
Déjà sur cette page je suis obligé de passer par substr(getenv("QUERY_STRING"),-1,1) pour récupérer mon paramètre "exist" qui me dit si le mail ou le pseudo existe déjà.
si je fais if($exist=='e') il me répond qu'il ne connaît pas cette variable... est-ce normal ?

Ensuite je vous passe le javascript qui vérifie que tout est bien saisi avant d'envoyer le formulaire à la page suivante qui vérifie si il n'y a pas déjà un membre avec cet email ou ce pseudo :
<? 
$email = $_POST['email'];
$pseudo = $_POST['pseudo'];
$pwd = $_POST['pwd1'];

include("connexion.php");
// email existe déjà ?
$select = "SELECT ID_MEMBRE FROM MEMBRE WHERE EMAIL_MEMBRE = '$email'";
$result = mysql_query($select,$link) or die ('Impossible de se connecter à la base de données');
$total = mysql_num_rows($result);
// si on a récupéré un résultat on retourne à l'inscription.
if($total) {
	header('Location: inscription.php?exist=e');
}
// on libère le résultat
mysql_free_result($result);

// pseudo existe déjà ?
$select = "SELECT ID_MEMBRE FROM MEMBRE WHERE PSEUDO_MEMBRE = '$pseudo'";
$result = mysql_query($select,$link) or die ('Impossible de se connecter à la base de données');
$total = mysql_num_rows($result);
// si on a récupéré un résultat on retourne à l'inscription.
if($total) {
	header('Location: inscription.php?exist=p');
}
// on libère le résultat
mysql_free_result($result);

if(!get_magic_quotes_gpc())
{
  // si php n'est pas configuré pour le faire automatiquement, on ajoute des \ devant les '
  // deux raisons : autoriser d'ajouter des ', et sécuriser notre requete
  $pseudo = addslashes($pseudo);
}
$sql = "INSERT INTO MEMBRE (EMAIL_MEMBRE, PSEUDO_MEMBRE, PASSWORD_MEMBRE, DATE_INSCRIPTION, ADMIN, ACTIF) VALUES ('" . $email . "','" . $pseudo . "', NOW(), 0, 0)";
$res = mysql_query($sql);

$chaine = 'Location: inscription2.php?pseudo='.$pseudo.'&email='.$email;
header($chaine);

?>
Je fais des essais avec l'enregistrement test que j'ai mis dans ma base de données, et il passe tout droit vers ma page inscription2 alors que si je fais des 'echo' dans mon code, je vois bien qu'il a des résultats dans les 2 requêtes. Je comprends pas.
Et j'ai aussi dans inscription2 le même problème de querystring à savoir que j'ai bien mon url

Code : Tout sélectionner

http://127.0.0.1/SGEA/inscription2.php?pseudo=monpseudo&[email protected]
mais quand je veux faire afficher $pseudo il me met

Code : Tout sélectionner

Notice: Undefined variable: pseudo in c:\program files\easyphp1-8\www\sgea\inscription2.php on line 43
Bref j'ai deux soucis et si vous pouviez m'aider ça serait sympa.

a+

oups

Posté : 24 mars 2006, 17:03
par toutouyoutou
je m'étais pas connecté...

au passage : je suis en local sur ma machine avec easyphp1.8 et mysql

Posté : 24 mars 2006, 17:28
par Ryle
si je fais if($exist=='e') il me répond qu'il ne connaît pas cette variable... est-ce normal ?
Moui, ça me semble normal, vu que moi non plus je ne saurais pas à quoi correspond ta variable $exist... suffit juste de la déclarer avant :)
<? 
$exist = substr(getenv("QUERY_STRING"),-1,1);
if($exist=='e'){print("Cette adresse mail existe d&eacute;j&agrave; dans notre base de donn&eacute;es !!");} 
if($exist=='p'){print("Ce pseudo existe d&eacute;j&agrave; dans notre base de donn&eacute;es !!");}      
?> 
Pour le problème suivant, je ne suis pas certain que ce soit ça, mais lorsque tu fais suivre des données via un header, elles se retrouvent dans la varibale $_GET et non plus dans $_POST :)

Posté : 24 mars 2006, 17:37
par toutouyoutou
bah je croyais que quand on avait une URL du genre:

http://www.truc.fr/mapage.php?bidule=32

y'avait automatiquement une variable $bidule = 32 qui se déclarait !??


Alors je viens de tester cet état de fait, ça marche sur un hébergeur gratuit mais pas sur mon PC en local avec easyphp

qqun a une explication :?:

Sinon j'ai toujours mon problème de test par rapport au résultat de mes requêtes... pfff

Posté : 24 mars 2006, 17:40
par DarkBlue
LA y a un pb de superglobals , ta variable n est pas $bidule mais $_GET['bidule']

Posté : 24 mars 2006, 17:51
par toutouyoutou
d'accord...

et comment fait-on pour gérer l'exception si y'a pas de bidule dans la querystring ?
if($_GET['bidule']=='email'){print("Cette adresse mail existe d&eacute;j&agrave; dans notre base de donn&eacute;es !!");} 
Si dans mon URL j'ai pas de bidule=x je me retrouve avec un message d'erreur.
Comment faire ?

Posté : 24 mars 2006, 17:56
par DarkBlue
if($_GET['bidule']){
if ($_GET['bidule']=='email'){print("Cette adresse mail existe d&eacute;j&agrave; dans notre base de donn&eacute;es !!") ;}
else {echo 'Vous pouvez vous inscrire';}
}
tu verrifie d abbord qu elle existe et ensuite ce qu elle vaut

Posté : 24 mars 2006, 18:03
par toutouyoutou
ouais ben sur le if($_GET['bidule']) j'ai cette erreur lorsque de bidule il n'y a point :

Notice: Undefined index: bidule in c:\program files\easyphp1-8\www\sgea\inscription.php on line 117

aurais-je un problème de easyphp sur mon poste ?

Posté : 24 mars 2006, 18:05
par Ryle
Pour répondre à ta question sur pourquoi est ce que cela fonctionne chez l'hébergeur et pas chez toi, c'est parce qu'il s'agit simplement d'une question de paramétrage (généralement du à la version de php)

en effet, avant et par défaut $bidule te permettait de récupérer les valeur qu'elles soient passées en get, en post, via la session ou un cookie. Donc pour éviter la confusion et pour des raisons de sécurité ce paramètre (register_globals) a été désactivé par défaut.

Voir dans la faq pour plus d'info sur le sujet : http://www.phpfrance.com/forums/voir_sujet-48.php

Pour gérer l'exception tu peux suivre les conseils de darkblue, personnellement j'affecte une valeur vide quand il n'est pas défini :
// $bidule est égal, si $_GET['bidule'] est défini, à $_GET['bidule'], sinon à chaine vide.
$bidule = (isSet($_GET['bidule'])) ? $_GET['bidule'] : "";

Posté : 24 mars 2006, 18:22
par toutouyoutou
quelle que soit la méthode choisie pour gérer l'exception, j'ai systématiquement un message d'erreur si dans l'url je n'ai pas ma variable...

bon y'a sûrement autre chose qui m....

merci quand même pour toutes les réponses


Et pour ça, est-ce que ça vous semble correct :

$email = $_POST['email']; 

include("connexion.php"); 
// email existe déjà ? 
$select = "SELECT ID_MEMBRE FROM MEMBRE WHERE EMAIL_MEMBRE = '$email'"; 
$result = mysql_query($select,$link) or die ('Impossible de se connecter à la base de données'); 
$total = mysql_num_rows($result); 
// si on a récupéré un résultat on retourne à l'inscription. 
if($total) { 
    header('Location: inscription.php?exist=e'); 
} 
parceque là ça marche pas.

même si il y a un résultat à la requête, (je fais afficher $total , il vaut 1) eh ben il s'en fout il continue quand même...

Posté : 24 mars 2006, 18:25
par DarkBlue
Question bete : tu es sur que chez toi la variable s appelle bidule ? tu l as pas appelee comme ça juste sur le forum ?

sinon :
$select = "SELECT ID_MEMBRE FROM MEMBRE WHERE EMAIL_MEMBRE = '".$email."'";
Serait mieu

Posté : 24 mars 2006, 18:30
par toutouyoutou
:D je l'ai juste appelée comme ça sur le forum...

ok pour la syntaxe mais j'ai fait le test en mettant dans le formulaire l'email qui est déjà dans ma base de données, il trouve bien 1 résultat mais il s'en fout, il redirige pas vers inscription.php?exist=e

Posté : 24 mars 2006, 18:40
par DarkBlue
bah je vois pas trop le pb si ce n est que j utilise des " et pas des ' dans le header .....

t as pas de message d erreur ?
Remplace le header par echo 'Cool'; par exemple pour verifier qu on entre bien dans la condition mais je vois pas pourquoi ça veut pas ...

Posté : 24 mars 2006, 18:46
par toutouyoutou
résultat : cool

j'entre bien dans la condition, il trouve bien 1 résultat à la requête mais la redirection, il s'en fout royal.

j'ai essayé avec des " c'est pareil

Posté : 24 mars 2006, 18:49
par DarkBlue
alors redirige comme ça pour essayer :
echo '<meta http-equiv="Refresh" content=0;URL="inscription.php?exist=e">';