Précédent   Forum des professionnels en informatique > PHP > Langage > Syntaxe
Syntaxe Forum d'entraide sur la syntaxe de PHP et la POO. Avant de poster -> FAQ syntaxe, Cours d'initiation et cours de POO
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 30/12/2010, 10h43   #1
Membre du Club
 
Inscription : octobre 2006
Messages : 386
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 386
Points : 65
Points : 65
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 :
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 :
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 :
EHPAD/GEST_DOSSIER/pdf_dossier_resume.php?num_dossier=44&table=archiver
J'ai :
Code :
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
GarsDuCalvados est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 10h52   #2
Membre éclairé
 
Avatar de BornBanane
 
Homme
Ingénieur développement logiciels
Inscription : mars 2007
Messages : 274
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mars 2007
Messages : 274
Points : 350
Points : 350
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 :
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']);
}
__________________
Smiley de Plomb 2009
Anciennement FrancoisIT
BornBanane est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2010, 10h56   #3
Membre du Club
 
Inscription : octobre 2006
Messages : 386
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 386
Points : 65
Points : 65
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 :
echo ' <a href="GEST_DOSSIER/pdf_dossier_resume.php?num_dossier='.$num_index.'&table='.$tech.'" target="_blank">Consulter PDF</a>';
GarsDuCalvados est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/12/2010, 11h49   #4
Membre éclairé
 
Avatar de BornBanane
 
Homme
Ingénieur développement logiciels
Inscription : mars 2007
Messages : 274
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mars 2007
Messages : 274
Points : 350
Points : 350
Est-ce que tu peux nous montrer une portion du code HTML généré avec le problème ?
__________________
Smiley de Plomb 2009
Anciennement FrancoisIT
BornBanane est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2010, 12h02   #5
Membre régulier
 
Inscription : avril 2009
Messages : 83
Détails du profil
Informations forums :
Inscription : avril 2009
Messages : 83
Points : 96
Points : 96
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 :
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
anthony89 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2010, 12h54   #6
Membre éclairé
 
Avatar de BornBanane
 
Homme
Ingénieur développement logiciels
Inscription : mars 2007
Messages : 274
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : mars 2007
Messages : 274
Points : 350
Points : 350
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
__________________
Smiley de Plomb 2009
Anciennement FrancoisIT
BornBanane est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/12/2010, 15h30   #7
Membre du Club
 
Inscription : octobre 2006
Messages : 386
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 386
Points : 65
Points : 65
Bonjour,

Avec ceette ligen c'est pareil :
Code :
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 :
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 :
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 :
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 :
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
GarsDuCalvados est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 11h08   #8
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 702
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 702
Points : 3 271
Points : 3 271
Salut

Code :
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 :
1
2
 
echo '<a href="GEST_DOSSIER/pdf_dossier_resume.php?num_dossier='.$_SESSION['num_index'].'&table='.$_SESSION['tech'].'" target=_blank>Consulter PDF</a>';
Citation:
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).
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 03/01/2011, 16h09   #9
Membre du Club
 
Inscription : octobre 2006
Messages : 386
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 386
Points : 65
Points : 65
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 :
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
GarsDuCalvados est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 16h16   #10
Membre du Club
 
Inscription : octobre 2006
Messages : 386
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 386
Points : 65
Points : 65
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
GarsDuCalvados est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 16h20   #11
Membre du Club
 
Inscription : octobre 2006
Messages : 386
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 386
Points : 65
Points : 65
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 :
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.
GarsDuCalvados est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2011, 17h20   #12
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
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 :
1
2
3
4
5
 
<?php
    $url = '...';
?>
<a href="<?php echo $url ?>" target="_blank">Consulter PDF</a>
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2011, 08h16   #13
Membre du Club
 
Inscription : octobre 2006
Messages : 386
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 386
Points : 65
Points : 65
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
GarsDuCalvados est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 08h28   #14
Membre du Club
 
Inscription : octobre 2006
Messages : 386
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 386
Points : 65
Points : 65
Bonjour,

voici ce que celà donne.



Code :
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
GarsDuCalvados est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2011, 10h08   #15
Modérateur
 
Inscription : septembre 2010
Messages : 7 101
Détails du profil
Informations forums :
Inscription : septembre 2010
Messages : 7 101
Points : 8 466
Points : 8 466
mais quand tu cliques c'est bon ? la c'est le navigateur qui limite le nombre de caractères
__________________
http://blog.stealth35.com/
stealth35 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2011, 10h56   #16
Expert Confirmé
 
Avatar de RunCodePhp
 
Inscription : janvier 2010
Messages : 2 702
Détails du profil
Informations personnelles :
Localisation : Réunion

Informations forums :
Inscription : janvier 2010
Messages : 2 702
Points : 3 271
Points : 3 271
Citation:
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 ?
__________________
Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]
RunCodePhp est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2011, 14h02   #17
Membre du Club
 
Inscription : octobre 2006
Messages : 386
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 386
Points : 65
Points : 65
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 :
$_SESSION['url'] ="GEST_DOSSIER/pdf_dossier_resume.php";
soit
Code :
$_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 :
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
GarsDuCalvados est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h30.


 
 
 
 
Partenaires

Hébergement Web