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

PHP & Base de données Discussion :

PDO ne prend pas en compte les argument des requête préparer !


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Par défaut PDO ne prend pas en compte les argument des requête préparer !
    Bonjour a tous ,
    je suis planté face a un problème indétectable depuis des jours alors que j'ai une bonne connaissance de mysql et php et du coup je me tourne vers vous pour me sauvé !
    j'ai une base de données qui comporte une table "etudiants" avec les colonnes "num_etu","nom_etu","date_naiss","sexe"" ou l'objectif est que j'affiche la table de ma base via une requête préparé mais surtout que je puissent utilisé des variable via "GET" ou "POST" sur les requête SQL, voici mon code :

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
     
     
    <?php
     
     
     
        try{$bdd = new PDO('mysql:host=localhost;dbname=base_etudiants;charset=utf8', 'root', '');}
        catch(Exception $e){die('Erreur : '.$e->getMessage());} 
     
            $element = $_GET['tri']; //on récupère une variable via l'URL
            $req = $bdd->prepare( ' SELECT * FROM etudiants ORDER BY :element 	 '); // organisation du resultat selon la variable element
            $req->execute(  array('element' => $element) );
     
     
     
    	echo 
     
    	      '<html><body><table  border="1" cellspacing="0" bordercolor="#222" id="list" style="text-align:center",
    		    <tr>
    	         <th>',htmlspecialchars('num_etu'), '</th>
    	         <th>',htmlspecialchars('nom_etu'),    '</th>
    			 <th>',htmlspecialchars('date_naiss') ,      '</th>
                 <th>',htmlspecialchars('sexe') ,      '</th>												  
    	        </tr> ';
        while ($donnees = $req->fetch())
            {
              echo   
                 '<tr>',
    		        '<td>',htmlspecialchars($donnees['num_etu']) ,'</td>',
    			    '<td>',htmlspecialchars($donnees['nom_etu']), '</td>', 
    		        '<td>',htmlspecialchars($donnees['date_naiss'])  , '</td>',  
                    '<td>',htmlspecialchars($donnees['sexe'])  , '</td>', 													 
    		        '</tr>';
            }           
        echo '</table></body></html>';
     
        $req->closeCursor();
     
    ?>


    alors le code est correct quand je n'utilise pas d'argument et que je met diretement par exemple, mais des que j'utilise une variable exterieure, mysql ne la prend pas en compte et m'affiche la table de ma base sans l'organisé selon le champs imposé par la variable bien que je met cette adresse :
    http://localhost/tp/afficher_etu_tri1.php?tri=sexe
    j'ai même crée un formulaire avec une methose GET et puis POST mais rien, j'ai même verifié que la variable venue de GET ou POST arrivé bien a mon script en l'affichant avec un print , j'ai même mis le $_GET[tri] dans le "execute" mais rien, ce qui est bizzar c'est que je n'est même pas une erreur ! j'ai aussi tenter le "?" au lieu du :element ...... merci pour votre aide !
    j'obtient toujours le résultat suivant :
    Nom : qsl.png
Affichages : 318
Taille : 56,2 Ko

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 21
    Par défaut information de plus
    aprés quelque manipulation, j'ai remarqué que cette methode fonctionne parfaitement sur des variable utilisé pour la clause "where" c'est quand c'est pour "ORDER BY" que ca fonctionne pas

  3. #3
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    1) Il vaut mieux éviter la guerre des étoiles !

    2) Un code indenté et aéré est plus agréable à lire et à déboguer.

    Essayez comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $element = $_GET['tri']; //on récupère une variable via l'URL
    $sql = "
    	SELECT * /* Il vaudrait mieux les colonnes nécessaires et pas étoile ! */
    	FROM etudiants 
    	ORDER BY :element
    ";
    $req = $bdd->prepare($sql); // organisation du resultat selon la variable element
    $req->bindParam(':element', $element, PDO::PARAM_STR);
    $req->execute();
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Par défaut
    On ne peut pas mettre des identifiants (nom de base, table, colonne) en paramètre.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 814
    Billets dans le blog
    14
    Par défaut
    Arf ! C'est vrai que ce n'est pas une valeur texte mais un nom de colonne !

    Alors comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql = "
    	SELECT /* les colonnes nécessaires et pas étoile ! */
    	FROM etudiants 
    	ORDER BY $element
    ";
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [DATEDIFF] Ne prend pas en compte les "dates incluse".
    Par GarsDuCalvados dans le forum Langage SQL
    Réponses: 2
    Dernier message: 12/06/2008, 15h47
  2. Réponses: 1
    Dernier message: 28/05/2008, 16h11
  3. Réponses: 2
    Dernier message: 29/03/2008, 13h04
  4. Requete Update ne prend pas en compte les champs paramétrés?
    Par Oceliane dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/06/2007, 22h34
  5. Réponses: 1
    Dernier message: 13/02/2007, 16h53

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