2009-08-12 9 views
0

Comment pouvez-vous obtenir les variables dans l'URL de la page suivante en PHP?Pour trouver la raison des variables GET manquantes dans PHP

L'utilisateur est à l'adresse

http://localhost/codes/index.php?ask_question&[email protected]&passhash_md5=202cb962ac59075b964b07152d234b70 

Il envoie une question et il va à l'adresse suivante où les variables ont perdu leurs valeurs pour une raison inconnue.

http://localhost/codes/index.php?question_sent&email=&passhash_md5= 

Le code suivant est le code handle_a_new_question.php.

$result = pg_prepare($dbconn, "query77", "INSERT INTO questions 
    (body, title, users_user_id) 
    VALUES ($1, $2, $3);"); 
$result = pg_execute($dbconn, "query77", array($body, $title, $user_id)); 

if(isset($result)) { 
    $header = ("Location: /codes/index.php?"                                       
     . "question_sent" 
     . "&" 
     . "email=" 
     . $_GET['email']    // this seems to be correct to me 
     . "&" 
     . "passhash_md5=" 
     . $_GET['passhash_md5']  // this seems to be correct to me too 
     ); 
    header($header); 
    } 

Voyez-vous une erreur dans le code?

Répondre

1

Essayez d'utiliser le gestionnaire de session à la place des variables GET . Il ajoute quelques touches à votre code mais vous évite beaucoup de headeaches, à mon point de vue.

+0

Si j'utilise des gestionnaires SESSION, je n'ai pas besoin d'assainir mes données dans $ _GET. Hmm - J'ai besoin d'étudier ça. –

1

Imprimez votre _GET $ et vérifier si vars sont vides avant de créer l'en-tête:

print_r($_GET); 

ou essayez avec

$_REQUEST['email'] 

au lieu de

$_GET['email'] 

Oh! et ne pas oublier d'ajouter

exit(); 

après:

header($header); 

Si vous faites quelque chose s'il n'y a pas valide $ result, par exemple:

if(isset($result)) { 
    $header = ("Location: /codes/index.php?"                                       
     . "question_sent" 
     . "&" 
     . "email=" 
     . $_GET['email']    // this seems to be correct to me 
     . "&" 
     . "passhash_md5=" 
     . $_GET['passhash_md5']  // this seems to be correct to me too 
     ); 
    header($header); 
    } 

    sendEmailToMe('FAILED!!'); 

est possible que « sendEmailToMe ('FAILED !!') "peut être exécuté, même si $ result est valide.

+0

Je n'ai jamais utilisé la commande 'exit();' avant. Je l'ai mis à la fin de mes gestionnaires et cela a empêché mes pages de fonctionner. Il ne provoque aucun conflit uniquement dans le fichier handle_a_new_question.php. –

+0

C'est une bonne pratique. – inakiabt

+0

Vos deux premières commandes ne me donnent que 'Array()'. –

1

Assurez-vous que les données sont envoyées par POST. Ainsi, il peut être récupéré comme ceci:

$_POST['email']

BTW:

  1. ne pas oublier de désinfecter les données avant de faire la redirection (il ne se fait pas dans votre exemple).
  2. ne pas oublier de "saler" votre hachage ou il peut être non sécurisé.
+0

Je ne comprends pas le point (1), puisque le code utilise pg_prepare qui est des instructions préparées. Cela devrait assainir les données. - Je suis novice alors n'hésitez pas à commenter. - (2): Je le ferai quand j'aurai d'abord mon code à travailler. –

+1

Vous devez HTTP/URL assainir les variables $ _GET avant de les utiliser dans votre entête() appel –

3

à quoi ressemble le code de formulaire? le problème est sur la page qui vous dirige vers la page question_sent, pas sur la page question_sente elle-même.

Vous êtes de passage ces variables le long dans les champs cachés ou dans l'action de la forme, par exemple

<form method="post" action="index.php?question_sent&email=<?php echo $_GET['email']?>&passhash_md5=<?php echo $_GET['passhash_md5']?>"> 

ou utilisez-vous des variables cachées

<form method="post" action="index.php?question_sent"> 
    <input type="hidden" name="email" value="<?php echo $_GET['email']?>" /> 
    <input type="hidden" name="passhash_md5" value="<?php echo $_GET['passhashmd5']?>" /> 
    ... 
</form> 

parce que l'un de ceux-ci devraient travailler, la vous pouvez d'abord récupérer vos variables de $ _GET la seconde, vous pouvez les récupérer à partir de $ _POST.

également pour les sessions utilisateur, vous devriez probablement le stockage de leurs informations de connexion dans un cookie, jetez un oeil à ce quand vous obtenez une chance

http://www.tizag.com/phpT/phpcookies.php

+0

Ceci est le code du formulaire: http://github.com/vilsu/codes/blob/cb4714b1fd4773e35d140c108ca1b152f90b9a3c/lomakkeet/lomake_ask_question.php –

+0

Je n'utilise pas de variables cachées. –

+0

vous devriez probablement utiliser des variables cachées. vous devez transmettre les variables email et passhash_md5 au script suivant en utilisant l'une de ces trois méthodes, par ordre de correction: 1. en utilisant les cookies 2. en utilisant des variables cachées dans le formulaire 3. dans l'attribut d'action de le formulaire lui-même –

Questions connexes