Précédent   Forum des professionnels en informatique > PHP > Langage > Fonctions
Fonctions Forum d'entraide sur les fonctions PHP. Avant de poster -> FAQ fonctions et Sources diverses
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 15/05/2008, 09h25   #1
Candidat au titre de Membre du Club
 
Étudiant
Inscription : février 2006
Messages : 76
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 76
Points : 14
Points : 14
Envoyer un message via MSN à kev42100
Par défaut [Système] passages de variables par URL

Bonjour à tous,

J'ai réalisé un formulaire et suivant les champs remplis, cela forme une requête MySQL et génère des résultats sous la forme :

Réponse X :

Nom :
Adresse :
Métier :
Ville :


J'ai mis en place un système de tri. Ainsi on peut choisir le tri par nom, tri par ville, etc...
En cliquant sur un des liens :

Code :
<a href="results_bis.php?tri=nom&RF=<?php echo $reqFinale;?>">Tri par nom</a>
Cela recharge la page en indiquant le type de tri et je renvoie aussi une partie de ma requête SQL qui est contenue dans la variable $reqFinale.

Le problème est le suivant : cela fonctionne une fois, le tri s'effectue bien mais si de nouveau j'effectue un nouveau tri, la variable $reqFinale ne se transmet plus ; un
Code :
echo 'RF : '.$reqFinale;
ne produit rien. Je récupère comme d'habitude toute variable passée par URL :

Code :
1
2
$RF = $_GET['RF'];
												$valTri = $_GET['tri'];
Je ne vois pas l'origine du problème
Merci d'avance.
kev42100 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 10h07   #2
Modérateur
 
Avatar de Er3van
 
Homme Clément
Architecte Logiciel
Inscription : avril 2008
Messages : 1 370
Détails du profil
Informations personnelles :
Nom : Homme Clément
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : Architecte Logiciel
Secteur : Industrie

Informations forums :
Inscription : avril 2008
Messages : 1 370
Points : 2 093
Points : 2 093
Si tu faisais

Code :
1
2
 
$reqFinale = $_GET['RF'] ;
Ca irait vachement mieux !


Mais ne jamais faire confiance à ce qui vient de l'extérieure !
Passer une requête par l'url est très dangereux.
Utilise plutôt des variables.

Code :
<a href="results_bis.php?tri=nom&tri=nom">Tri par nom</a>
Et dans ton controleur :

Code :
1
2
3
 
if ( isset($_GET['tri']) && htmlentities($_GET['tri']) == 'nom' )
          $reqFinale = 'SELECT * FROM maTable ORDER by name' ;
Selon les tris que tu veux faire, tu peux aussi organisé ça selon un switch.
Code :
1
2
3
4
5
6
7
8
9
 
if ( isset($_GET['tri']) ) {
         $monTri = htmlentities($_GET['tri']) ;
         switch ( $monTri ) {
                case 'nom' : 
                           $reqFinale = 'SELECT * FROM maTable ORDER by name' ;
                           break ;
         }
}
__________________
One minute was enough, Tyler said, a person had to work hard for it, but a minute of perfection was worth the effort. A moment was the most you could ever expect from perfection.

-- Chuck Palahniuk, Fight Club, Chapter 3 --
Er3van est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/05/2008, 10h43   #3
Candidat au titre de Membre du Club
 
Étudiant
Inscription : février 2006
Messages : 76
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 76
Points : 14
Points : 14
Envoyer un message via MSN à kev42100
Merci pour ta réponse.
Je suis obligé de passer ma requête finale par URL ... Ce n'est pas toute ma requête (SELECT etc...).

Voici un bout de code qui s'exécute si un critère de tri a été défini :

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
27
28
29
30
 
//Si tri par nom  
												if ($valTri == "nom")
													$valTri = "PERSONNE.PER_NOM";
 
												//Si tri par métier
												if ($valTri == "fct")
													$valTri = "FONCTION.FON_LIB";
 
 
 
													$reponse = mysql_query(" SELECT distinct
																		   PERSONNE.PER_NOM as 'Nom_de_la_personne',
																		   PERSONNE.PER_PRE as 'Prenom_de_la_personne',
																		   FONCTION.FON_LIB as 'Libelle_de_la_fonction',
																		   ORGANISME.ORG_NOM as 'Nom_de_l_organisme',
																		   ORGANISME.ORG_ADR as 'Adresse_de_l_organisme',
																		   ORGANISME.ORG_CP as 'Code_postal_de_l_organisme',
																		   ORGANISME.ORG_VIL as 'Ville_de_l_organisme',
																		   ORGANISME.ORG_TEL as 'Tel_de_l_organisme',
																		   PERSONNE.PER_EMAIL as 'Email_de_la_personne'
 
																		   FROM triplet
 
																		   INNER JOIN PERSONNE on TRIPLET.TRI_PER_CLE=PERSONNE.PER_CLE
																		   INNER JOIN ORGANISME on TRIPLET.TRI_ORG_CLE=ORGANISME.ORG_CLE
																		   INNER JOIN FONCTION on TRIPLET.TRI_FON_CLE=FONCTION.FON_CLE
 
																		   WHERE $valRF 
																		   ORDER BY $valTri ASC") or die(mysql_error());
$valRF remplace $RF .

Mais bon, ce passage de $valRF par URL ne fonctionne qu'une fois ... Il part où lors du second passage ...
kev42100 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2008, 10h50   #4
Membre régulier
 
Inscription : décembre 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 166
Points : 83
Points : 83
Envoyer un message via MSN à omdafer Envoyer un message via Skype™ à omdafer
Bonjours,
comme dit Rr3van passer une requête SQL par une methode GET est très dangereux.
Cela veux dire que tu peux laisser exécuté un scipt php depuis ta variable ou faire transmettre des requêtes SQL (tout dépend comment tu as codé ton script) qui va poluer ta base SQL.

PHP offre plein de possibilités, il y a toujours moyen de ne pas être obligé de passer tes requêtes SQL.
Si tu dois passer par plusieurs pages pour construire une requete complète.
Je te conseil de l'executer partielement à chaque page, il existe la requête "UPDATE" il me semble. Et transmettre l'id du champ à completer.

Un peu d'imagination ...
omdafer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2008, 10h58   #5
Membre régulier
 
Inscription : décembre 2006
Messages : 166
Détails du profil
Informations forums :
Inscription : décembre 2006
Messages : 166
Points : 83
Points : 83
Envoyer un message via MSN à omdafer Envoyer un message via Skype™ à omdafer
...En parlant d'imagination.

Au lieu de transmettre une requête par l'URL. Tu ne peux pas essayer de l'enregistrer sur une ta bdd et de la récuperer ensuite pour la completer?

Tu créer par exemple un table mesrequetes avec un champ texte pour ta requête, un id avec time(). Et tu transmet la valeur time par URL.

Il doit y avoir une infinité de solution inimaginable.
omdafer est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2008, 13h57   #6
Membre éclairé
 
Inscription : mai 2008
Messages : 359
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 359
Points : 397
Points : 397
et c'est comme ça que l'hébergeur vient te voir à la fin du mois en te disant qu'ils ne renouvellent pas ton abonnement parce que tu as abusé des ressources mysql mutualisées !
En supposant que le site est un tant soit peu fréquenté, bien sûr.
Tsilefy est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 16h53.


 
 
 
 
Partenaires

Hébergement Web