IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème d'envoie de variables dans une url


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut Problème d'envoie de variables dans une url
    Bonjour,

    J'ai un formulaire avec 6 entrées, il faut remplir plusieurs conditions avant que ces informations ne soient enregistrées. Entre autre, que tous les champs marqués d'un astérix (*) soient complétés.

    Si ce n'est pas le cas, le fichier send renvoie vers le formulaire avec dans l'url les informations déjà remplies pour que l'utilisateur n'ai pas à tout réécrire.

    Dans certains cas, il ne redirige pas correctement vers le formulaire, mais vers la page "index.php?". J'ai beau cherché je ne trouve pas l'erreur.

    Après de nombreux testes, je me suis rendu qu'il y a un problème que lorsqu'on rajoute des caractères spéciaux tels que "à", "ç", ... alors que j'ai déjà rajouté "htmlentities".

    Voici le code qui redirige vers le formulaire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    [...]
     
    $compte = addslashes(htmlentities($_POST['compte']));
    $adresse_1 = addslashes(htmlentities($_POST['adresse_1']));
    $adresse_2 = addslashes(htmlentities($_POST['adresse_2']));
    $adresse_3 = addslashes(htmlentities($_POST['adresse_3']));
    $montant = addslashes(htmlentities($_POST['montant']));
    $beneficiaire = addslashes(htmlentities($_POST['beneficiaire']));
    $communication = addslashes(htmlentities($_POST['communication']));
    $id_flux_financier = addslashes(htmlentities($_POST['id_flux_financier']));
     
    //Si ces variables ne sont pas vide
    if ($beneficiaire != NULL AND $montant != NULL AND $communication != NULL)
    {
     
    [...]
     
    }
    //Si on a pas remplit les champs marqués d'un astérix
    else
    {
    	$_SESSION['erreur'] = "Tous les champs marqués d'un astérix (*) n'ont pas été remplis ! Veuillez recommencer.";
    	?>
    		<meta http-equiv="refresh" content="0; url=index.php?page=membres/flux_financier/ajouter_flux_financier&amp;compte=<?php echo $compte; ?>&amp;adresse_1=<?php echo $adresse_1; ?>&amp;adresse_2=<?php echo $adresse_2; ?>&amp;adresse_3=<?php echo $adresse_3; ?>&amp;montant=<?php echo $montant; ?>&amp;beneficiaire=<?php echo $beneficiaire; ?>&amp;communication=<?php echo $communication; ?>">
    	<?php
    }
    D'avance merci pour vos réponses.

  2. #2
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    Si je ne m'abuse, un htmlentities retourne un truc du styme &#111;
    et toujours si je ne m'abuse, le symbole & dans une chaine adresse web signifie "parametre suivant" non !?
    Je crois qu'il y a une fonction PHP qui converti les caracteres speciaux en format %111 au lieu de &#111; pour les adresses web...
    J'ai rien testé, et je dit ça un peu au pif, mais ça vaut p'tet le coup de regarder non ?
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  3. #3
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par gloubi
    [...] un htmlentities retourne un truc du styme o [...]
    Je ne comprends pas ce que tu entends par "o". Pourrais tu préciser ?

    Citation Envoyé par gloubi
    [...] le symbole & dans une chaine adresse web signifie "parametre suivant" non !? [...]
    En effet, c'est pour ça que je l'ai écris dans le lien, comme tu peux le voir :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [...] <meta http-equiv="refresh" content="0; url=index.php?page=membres/flux_financier/ajouter_flux_financier&amp;compte=<?php echo $compte; ?>&amp;adresse_1=<?php echo $adresse_1; ?>&amp;adresse_2=<?php echo $adresse_2; ?>&amp;adresse_3=<?php echo $adresse_3; ?>&amp;montant=<?php echo $montant; ?>&amp;beneficiaire=<?php echo $beneficiaire; ?>&amp;communication=<?php echo $communication; ?>"> [...]
    Citation Envoyé par gloubi
    [...] Je crois qu'il y a une fonction PHP qui converti les caracteres speciaux en format %111 au lieu de o pour les adresses web... [...]
    J'ai cherché le format %111 ... mais il semblerait qu'il n'existe pas ... dans ce cas qu'entends tu par "%111" ?

  4. #4
    Membre confirmé
    Inscrit en
    Mai 2002
    Messages
    673
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 673
    Points : 624
    Points
    624
    Par défaut
    JE voulais dire du style : & # 1 1 1 ; donc remplace le "styme 0" par "style & # 1 1 1 ;".
    mais visiblement, le 111 que j'ai mis au hazard donne la lettre o lorsqu'il est interprété par ton explorateur (puisque je l'avais pas écrit sans les espace, donc il a été interprété !)...

    Ensuite, si t'as recherché %111, c'est sur que t'as pas du trouver grand chose, le %111 étant un exemple. Simplement, dans une adresse web, on ecrit pas les caracteres speciaux en html (& # 1 1 1 ; ), mais on utilise le caractere % puis le code ascii (je crois que c'est le code ascii), donc pour mon exemple, ça donnait %111...

    Enfin, la fonction qui fait ça et dont je me rappelai plus le nom est urlencode

    edit : et probablement que mon exemple est faut, car si ça se trouve c'est %XX, xx etant 2 chiffres en hexa
    Si vous avez un message d'erreur, n'oubliez pas de le lire, la réponse à votre problème est surement dedans !

  5. #5
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Merci pour tes réponses gloubi et les précisions que tu as apporté dans le dernier post.

    J'ai pris note de la fonction dont tu m'as parlé qui correspond à mes besoins. Cependant je prendrai une autre fonction :
    Rawurlencode.

    Car elle est identique à la tienne, mais en plus elle respecte certaines normes d'après ce que j'ai pu comprendre.

    J'ai donc rajouté rawurlencode dans le fichier send qui redirige vers le formulaire et qui fonctionne maintenant. Mais sans que j'ai a écrire rawurldecode, il me transforme directement le code en caractère lisible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_GET['adresse_1'];
    Dans ce cas vaut il mieux rajouter la fonction rawurldecode pour être sûr, ou au contraire autant laisser ça comme ça pour ne pas allourdir le code ?

  6. #6
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut pense à mettre le tag résolu
    Si j'ai bien compris, tu as trouvé la solution...

    Donc tu peux mettre le tag [Résolu]
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  7. #7
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Citation Envoyé par zyongh
    Si j'ai bien compris, tu as trouvé la solution...

    Donc tu peux mettre le tag [Résolu]
    En effet, j'ai trouvé la solution, mais comme je l'indique dans mon dernier post, cette solution m'apporte une question et j'attends d'avoir la réponse pour que l'ensemble du problème soit clôturé avant de mettre le tag résolu.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut si tu cherches la rapidité...
    Si tu hésites entre deux (bonnes) méthodes et que ton critère est la rapidité, tu peux profiler le code en benchmarquant au bon endroit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    include "Benchmark/Timer.php"
    $Bch = new Benchmark_Timer();
     
    ....
     
    $Bch->start();
    // la première façon de faire
    $Bch->Stop();
     
    echo "<pre>";
    var_dump($Bch->getProfiling());
    echo "</pre>";
    J'utilise var_dump() plutôt que print_r() car print_r() n'affiche que les informations visibles de la variables alors que var_dump() affiche toutes les propriétés publiques, protégées et privées de la variable.
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  9. #9
    Membre éprouvé
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Juin 2003
    Messages
    909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 909
    Points : 1 014
    Points
    1 014
    Par défaut une petite précision
    Ensuite tu fais de même avec la deuxième méthode.

    Quand il s'agit d'instructions diverses et complexes, tu peux aussi utiliser l'output buffering qui fait gagner pas mal de temps pour l'exécution d'un script.
    Business, Stratégie, Leadership
    Toujours à l'écoute du marché : Surtout en Suisse ! ;-)

  10. #10
    Membre habitué
    Avatar de xenos
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    400
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 400
    Points : 197
    Points
    197
    Par défaut
    Merci pour vos réponses zyongh et gloubi.

    Je vais donc pour finir utiliser : rawurlencode - rawurldecode.

    Encore merci et bon développement à tous.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. comment passer plus d'une variable dans une URL
    Par death_style dans le forum Langage
    Réponses: 2
    Dernier message: 06/12/2007, 22h57
  2. Réponses: 10
    Dernier message: 26/07/2007, 14h16
  3. [Javascript][get]Enlevez des variables dans une url
    Par bouba83 dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 08/12/2006, 14h31
  4. Réponses: 8
    Dernier message: 03/11/2006, 15h55
  5. inserer une variable dans une url
    Par elmoino dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/07/2006, 12h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo