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 :

[Système] passages de variables par URL


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 80
    Points : 48
    Points
    48
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <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 : Sélectionner tout - Visualiser dans une fenêtre à part
    echo 'RF : '.$reqFinale;
    ne produit rien. Je récupère comme d'habitude toute variable passée par URL :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $RF = $_GET['RF'];
    												$valTri = $_GET['tri'];
    Je ne vois pas l'origine du problème
    Merci d'avance.

  2. #2
    Membre chevronné Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Points : 2 227
    Points
    2 227
    Par défaut
    Si tu faisais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href="results_bis.php?tri=nom&tri=nom">Tri par nom</a>
    Et dans ton controleur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 --

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    80
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 80
    Points : 48
    Points
    48
    Par défaut
    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 : 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
    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 ...

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    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 ...

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    209
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 209
    Points : 167
    Points
    167
    Par défaut
    ...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.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2008
    Messages
    1 576
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 1 576
    Points : 2 440
    Points
    2 440
    Par défaut
    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.

Discussions similaires

  1. Passage de variables par URL
    Par dré kam dans le forum Langage
    Réponses: 2
    Dernier message: 01/12/2011, 18h08
  2. Réponses: 2
    Dernier message: 29/10/2010, 12h11
  3. [JSTL] Passage de variable par URL
    Par pingu dans le forum Taglibs
    Réponses: 2
    Dernier message: 28/03/2009, 14h11
  4. Passage de variables par l'URL
    Par leFred dans le forum Langage
    Réponses: 7
    Dernier message: 20/11/2008, 14h17
  5. Passage de variable par methode post ?
    Par oazar dans le forum Flash
    Réponses: 33
    Dernier message: 16/10/2003, 17h03

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