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 :

Probleme dans le passage des variables dans URL


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Points : 144
    Points
    144
    Par défaut Probleme dans le passage des variables dans URL
    Bonjour,

    J'ai un petit problème que je n'arrive pas à comprendre.

    Le contexte :

    J'ai 2 pages en PHP.
    La première permet de visualiser des dossiers dans un tableau.
    Dans ce tableau il y a une colonne qui permet en cliquant sur un lien d'orienter l'utilsiateur vers la deuxième page avec en passage de variable (méthode GET) des paramètres :
    - Le numéro du dossier
    - Le type de dossier (archiver ou dossiers)

    La deuxième page permet en récupérant les 2 variables par la méthode GET de générer un PDF qui affiche toutes les informations du dossier.


    Mon problème le voici : Il est sur le lien de la première page qui oriente vers la deuxième page.

    Voici le code qui génére le lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    // --- POUR ACCES PDF DOSSIER
    if((isset($_SESSION['num_index'])) && (isset($_SESSION['tech'])))
    {
    	echo $tech;
    	echo " <a href='GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=$num_index&table=$tech target=_blank>Consulter PDF</a>";
    	unset($_SESSION['num_index']);
    	unset($_SESSION['tech']);
    }
    Quand je passe le paramètre dossiers pour la variable table j'ai ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EHPAD/GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=44&table=dossiers
    Mais avec le paramètre archiver, j'ai un problème avec le paramètre table.
    Au lieu d'avoir ce lien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EHPAD/GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=44&table=archiver
    J'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EHPAD/GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=44&table=a
    Il me manque un bout du mot "archiver".
    Je n'arrive pas à comprendre pourquoi.

    Pouvez-vous m'aider à résoudre le problème?

    Merci d'avance pour votre aide,

    .Matt

  2. #2
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Est-ce que le "echo $tech" que tu met avant d'afficher le lien renvoie bien archiver ?

    Sinon je ferais une petite modification au niveau de l'echo du lien ( de plus tu n'avais pas complètement fermer l'attribut href) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    if((isset($_SESSION['num_index'])) && (isset($_SESSION['tech'])))
    {
    	echo $tech;
    	echo ' <a href="GEST_DOSSIER/pdf_dossier_resume.php?num_dossier='.$num_index.'&table='.$tech.'" target="_blank">Consulter PDF</a>';
    	unset($_SESSION['num_index']);
    	unset($_SESSION['tech']);
    }

  3. #3
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Points : 144
    Points
    144
    Par défaut
    Bonjour à toi,

    Oui j'avais mis le echo pour voir ce que retourne le $tech et il me renvoit bien "archiver" et non "a".

    .Matt

    EDIT :
    J'ai fais la modification comme tu as mis et je le même problème.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo ' <a href="GEST_DOSSIER/pdf_dossier_resume.php?num_dossier='.$num_index.'&table='.$tech.'" target="_blank">Consulter PDF</a>';

  4. #4
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Est-ce que tu peux nous montrer une portion du code HTML généré avec le problème ?

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 99
    Points : 127
    Points
    127
    Par défaut
    Bonjour,

    Il doit y avoir un caractère dans ta variable qui "casse" le code HTML.

    Je pense qu'il doit s'agir d'un "\r" ou autre chose du genre qui ne s'affiche pas à l'écran lorsque du fais un echo.

    tu peux essayer ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo " <a href='GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=$num_index&table=".trim($tech)."' target=_blank>Consulter PDF</a>";
    La fonction trim enlève tous les caractères superflus (doubles espaces, \r\n, etc.).

    Si malgré tout ca ne fonctionne pas, il ya un caractère dans ta variable.
    Il faudra isoler le problème en utilisant plusieurs techniques (htmlentities, utf8_encode, etc.).


    J'espère que tout ca pourra t'aider

  6. #6
    Membre averti Avatar de BornBanane
    Homme Profil pro
    dev
    Inscrit en
    Mars 2007
    Messages
    284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : dev

    Informations forums :
    Inscription : Mars 2007
    Messages : 284
    Points : 416
    Points
    416
    Par défaut
    Un copier coller du code source HTML, nous montrerais si ce qu'indique anthony89 se produit (ou quelque chose de similaire).

    En attente de ton retour.
    Courrage

  7. #7
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Points : 144
    Points
    144
    Par défaut
    Bonjour,

    Avec ceette ligen c'est pareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo " <a href='GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=$num_index&table=".trim($tech)."' target=_blank>Consulter PDF</a>";
    ça me met que "a" dans la variable $tech.

    Donc je m'explique sur le cheminement.

    L'affichage de ce lien ce fait lorsque j'archive un dossier.
    Mon fichier s'appele generer_archiver_dossier.php.

    Dans son code à la fin j'initialise les variables de session num_index et tech
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // --- DOSSIER ARCHIVER AVEC SUCCES - INDEX MESSAGE A AFFICHER
    $_SESSION['message_ope_index'] = 61;
    // --- PASSAGE DU NUMERO DE DOSSIER + TABLE A TAPER
    $_SESSION['num_index'] = $num_dossier;
    $_SESSION['tech'] = "archiver";
    Aprés celà dans ce même fichier j'ai un :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header("Location: operation_dossier.php");
    Celui-ci me redirige vers le tableau (operation_dossier.php) initial qui m'affiche la liste des dossiers existants avec des opérations qui peuvent être faites (suppression, modification, archivage ou consultation).

    Et en fait dans pratiquement toutes mes pages, j'ai ce bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // --- INSERTION DU FICHIER PHP D'AFFICHAGE DU MESSAGE D'OPERATION
    include("../php/affichage_message_ope.php");
    Celui ci me permet d'afficher un message à l'utilisateur en fonction d'une variable de session créé au même que celle du num_index et de tech.

    Et en fait c'est dans le fichier affichage_message_ope.php que ce trouve ce lien qui n'affiche pas archiver en entier.
    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
    // --- AFFICHAGE DU MESSAGE D'OPERATION	
    IF (ISSET($_SESSION['message_ope_index']))
    {
    	echo "<u>Message</u> : <b>"; echo $message_tab[$_SESSION['message_ope_index']]; 
    	// --- POUR ACCES PDF DOSSIER
    	if((isset($_SESSION['num_index'])) && (isset($_SESSION['tech'])))
    	{
    		// --- AFFICHAGE DU LIEN POUR CONSULTATION PDF
    		echo " <a href='GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=$num_index&table=$tech' target=_blank>Consulter PDF</a>";
    		// --- SUPPRESION DES VARIABLES DE SESSION AU CAS OU
    		unset($_SESSION['num_index']);
    		unset($_SESSION['tech']);
    	}
    	echo"</b>";
    	echo '<br /><br />';
    	// --- SUPPRESION DE LA VARIABLE DE SESSION
    	unset($_SESSION['message_ope_index']);
    }
    .Matt

  8. #8
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    	if((isset($_SESSION['num_index'])) && (isset($_SESSION['tech'])))
    	{
    		// --- AFFICHAGE DU LIEN POUR CONSULTATION PDF
    		echo " <a href='GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=$num_index&table=$tech' target=_blank>Consulter PDF</a>";
    		// --- SUPPRESION DES VARIABLES DE SESSION AU CAS OU
    		unset($_SESSION['num_index']);
    		unset($_SESSION['tech']);
    	}
    Par rapport à ce bout de code, le lien exploite de simples variables : $num_index et $tech.

    Théoriquement, ce sont les variables de sessions qu'il faudrait exploiter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo '<a href="GEST_DOSSIER/pdf_dossier_resume.php?num_dossier='.$_SESSION['num_index'].'&table='.$_SESSION['tech'].'" target=_blank>Consulter PDF</a>';
    Et en fait c'est dans le fichier affichage_message_ope.php que ce trouve ce lien qui n'affiche pas archiver en entier.
    Ca se peut qu'il y a une ou plusieurs erreurs Php, mais tu n'est pas au courant.
    Il serait bon de faire afficher ces messages d'erreurs, ça aide à comprendre, donc à corriger si tel est le cas.
    Voir la directive display_errors du php.ini, la mettre à On (au moins lorsqu'on code).

  9. #9
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Points : 144
    Points
    144
    Par défaut
    Bonjour à toi,

    En fait pour les variables $num_index et $tech, au dessus de mon IF j'ai une attribution de variables de sessions à ces variables :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // --- RECUPERATION DU NUMERO DE DOSSIER
    $num_index = $_SESSION['num_index'];
    $tech = $_SESSION['tech'];
    Pour le display_error, je ne peux pas le faire.

    .Matt

  10. #10
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Points : 144
    Points
    144
    Par défaut
    C'est dingue car ce bout de code est utilisé pour 2 type de dossier que ce soit du dossier en cours pour le type "dossier" et les dossiers archivés pour le type "archivé".

    Et donc par exemple quand je crée un dossier j'ai un message qui s'affiche en passant par le même bout de code et en mettant la variable $tech=dossier.

    Pour tester j'ai changé la valeur de la variable pour voir si ça fonctionnait avec archivé et là ça fonctionne parfaitement et le code est identique c'est à ne rien y comprendre.


    .Matt

  11. #11
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Points : 144
    Points
    144
    Par défaut
    Encore plus dingue, j'essaye de forcer la valeur $tech à "archiver" sans prendre en compte les variables de sessions et ça me bouffe la variable $tech dans l'url en ne me mettant que "a" et non "archiver" complet.

    .Matt

    EDIT :
    Même en mettant ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo " <a href='GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=$num_index&table=archiver' target=_blank>Consulter PDF</a>";
    Il me met ça en URL :
    GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=45&table=a

    EDIT 2:
    Même avec un autre mot que archiver, il me bouffe quand même tous les caractère sauf le premier.

  12. #12
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    pourquoi ne pas utiliser http_build_query
    et fait l'inverse le php dans le html c'est beaucoup plus claire, (regarde tout les quotes qu'il te manque)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    <?php
        $url = '...';
    ?>
    <a href="<?php echo $url ?>" target="_blank">Consulter PDF</a>

  13. #13
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Points : 144
    Points
    144
    Par défaut
    Bonjour à toi,

    ça revient au même.

    J'ai toujours la fin de mon URL qui est mangé quelque soit le mode de passage de l'URL.


    .Matt

  14. #14
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Points : 144
    Points
    144
    Par défaut
    Bonjour,

    voici ce que celà donne.



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // --- AFFICHAGE DU LIEN POUR CONSULTATION PDF
    echo " <a href='GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=$num_index&table=archiver' target=_blank>Consulter PDF</a>";
    $url = "GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=$num_index&table=archiver";
    echo "<br />";
    echo $url;
    Dans le echo $url, vous pouvez constater que la chaîne est bonne alors quand dans la barre d'état du navigateur lorsque l'on passe la souris sur l'url de "Consulter PDF" la fin de l'url est mangée.

    .Matt

  15. #15
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 727
    Points
    10 727
    Par défaut
    mais quand tu cliques c'est bon ? la c'est le navigateur qui limite le nombre de caractères

  16. #16
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    En fait pour les variables $num_index et $tech, au dessus de mon IF j'ai une attribution de variables de sessions à ces variables :
    Alors comment sont initialisée ces 2 variables à l'origine ?

    Tu devrais faire une peu de débuggage, comme afficher au moins ces données et ça, depuis le tout début, et ensuite voir comment elle évolues au fil des traitements (jusqu'au lien).
    Si ces données sont simplement initialisée, faire un simple echo de cette variable créer au départ.
    Si leurs contenus dépendent d'autres données telles que GET ou POST ou autres variables, alors faut faire de simples print_r($_GET) ou print_r($_POST) ou remonter à la source des variables.

    Même chose dans la page qui reçois ces données transmises via le lien (si elles ne sont pas conforment).

    Faut pas hésiter non plus à mettre un point d'arrêt (un exit) pour éviter les pièges.

    Bref, tout ça peu paraitre long, mais avec l'habitude c'est assez rapide, et à part de très rares cas particuliers, on arrive à savoir la ligne de code précise qui cause problème.


    A coté de ça, GET a une limite du nombre de caractère dans l'URL, mais je ne sais plus combien.
    Mais même question : Est juste un constat visuel ou est ce qu'une fois cliqué la donnée reçue est aussi tronquée ?
    Aussi, tu as 2 fois .../GEST_DOSSIER/GEST_DOSSIER/... dans l'URL, est ce normal ?

  17. #17
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    467
    Détails du profil
    Informations forums :
    Inscription : Octobre 2006
    Messages : 467
    Points : 144
    Points
    144
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Alors comment sont initialisée ces 2 variables à l'origine ?

    Tu devrais faire une peu de débuggage, comme afficher au moins ces données et ça, depuis le tout début, et ensuite voir comment elle évolues au fil des traitements (jusqu'au lien).
    Si ces données sont simplement initialisée, faire un simple echo de cette variable créer au départ.
    Si leurs contenus dépendent d'autres données telles que GET ou POST ou autres variables, alors faut faire de simples print_r($_GET) ou print_r($_POST) ou remonter à la source des variables.

    Même chose dans la page qui reçois ces données transmises via le lien (si elles ne sont pas conforment).

    Faut pas hésiter non plus à mettre un point d'arrêt (un exit) pour éviter les pièges.

    Bref, tout ça peu paraitre long, mais avec l'habitude c'est assez rapide, et à part de très rares cas particuliers, on arrive à savoir la ligne de code précise qui cause problème.


    A coté de ça, GET a une limite du nombre de caractère dans l'URL, mais je ne sais plus combien.
    Mais même question : Est juste un constat visuel ou est ce qu'une fois cliqué la donnée reçue est aussi tronquée ?
    Aussi, tu as 2 fois .../GEST_DOSSIER/GEST_DOSSIER/... dans l'URL, est ce normal ?
    ALORS LA TOI TU ES UN TUEUR!!!!!!

    Donc en effet, la piste du double GEST_DOSSIER, m'a permis de me rappeler que les fichiers qui appellent le fichier php ou il y a cette URL ne sont pas dans la même arborescence et donc vu que mon fichier operation_dossier.php et dans la même dossier que mon pdf_resume_dossier.php et que je passe GEST_DOSSIER/ dans l'url, normal qu'il me le mette en double et donc de par le fait de cet erreur et que donc la méthode get ne permet pas de faire des URL aussi longues que l'on souhaite ==> mon prolbème de la valeur de $tech coupée venait de là.

    Donc en variable de session j'ai rajouté une variable $_SESSION['url'] qui me permet de passer soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['url'] ="GEST_DOSSIER/pdf_dossier_resume.php";
    soit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_SESSION['url'] ="pdf_dossier_resume.php";
    En fonction de là ou se situe le fichier qui va inclure l'url et ensuite j'ai plus qu'à faire :
    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
     
    // --- RECUPERATION DU NUMERO DE DOSSIER
    $num_index = $_SESSION['num_index'];
    $tech = $_SESSION['tech'];
    $url = $_SESSION['url'];
     
     
    // --- AFFICHAGE DU MESSAGE D'OPERATION	
    IF (ISSET($_SESSION['message_ope_index']))
    {
    	echo "<u>Message</u> : <b>"; echo $message_tab[$_SESSION['message_ope_index']]; 
    	// --- POUR ACCES PDF DOSSIER
    	if((isset($_SESSION['num_index'])) && (isset($_SESSION['tech'])))
    	{
    		// --- AFFICHAGE DU LIEN POUR CONSULTATION PDF
    		echo " <a href='$url?num_dossier=$num_index&table=$tech' target=_blank>Consulter PDF</a>";
    		// --- SUPPRESION DES VARIABLES DE SESSION AU CAS OU
    		unset($_SESSION['num_index']);
    		unset($_SESSION['tech']);
    		unset($_SESSION['url']);
    	}
    	echo"</b>";
    	echo '<br /><br />';
    	// --- SUPPRESION DE LA VARIABLE DE SESSION
    	unset($_SESSION['message_ope_index']);
    }
    Et là NIQUEL ça marche du TONNERRE .


    MILLE MERCI A VOUS TOUS,


    .Matt

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 30/10/2013, 12h36
  2. [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, 15h31
  3. passage de variables dans l'url
    Par pimpmyride dans le forum Langage
    Réponses: 1
    Dernier message: 26/03/2006, 17h35
  4. Réponses: 4
    Dernier message: 30/12/2005, 12h07
  5. Réponses: 6
    Dernier message: 19/12/2005, 14h41

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