help ! *%$#@ de requêtes

s_e_b
Invité n'ayant pas de compte PHPfrance

24 mars 2006, 17:02

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+

Eléphanteau du PHP | 10 Messages

24 mars 2006, 17:03

je m'étais pas connecté...

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

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

24 mars 2006, 17:28

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

Eléphanteau du PHP | 10 Messages

24 mars 2006, 17:37

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

Eléphant du PHP | 440 Messages

24 mars 2006, 17:40

LA y a un pb de superglobals , ta variable n est pas $bidule mais $_GET['bidule']
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Eléphanteau du PHP | 10 Messages

24 mars 2006, 17:51

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 ?

Eléphant du PHP | 440 Messages

24 mars 2006, 17:56

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
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Eléphanteau du PHP | 10 Messages

24 mars 2006, 18:03

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 ?

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

24 mars 2006, 18:05

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'] : "";

Eléphanteau du PHP | 10 Messages

24 mars 2006, 18:22

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...

Eléphant du PHP | 440 Messages

24 mars 2006, 18:25

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
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Eléphanteau du PHP | 10 Messages

24 mars 2006, 18:30

: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

Eléphant du PHP | 440 Messages

24 mars 2006, 18:40

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 ...
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !

Eléphanteau du PHP | 10 Messages

24 mars 2006, 18:46

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

Eléphant du PHP | 440 Messages

24 mars 2006, 18:49

alors redirige comme ça pour essayer :
echo '<meta http-equiv="Refresh" content=0;URL="inscription.php?exist=e">';
C'est en faisant des erreurs et en osant demander de l'aide qu'on apprend ! Il n'est pas ridicule de ne pas savoir !