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 :

Variable dans le WHERE d'une requête [PDO]


Sujet :

PHP & Base de données

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 23
    Points
    23
    Par défaut Variable dans le WHERE d'une requête
    Bonsoir. à tous,
    J'ai résolu une partie de mon problème coté Ajax,( Discussion coté AJAX ) mais un autre persiste coté serveur.
    Je ne sais pas comment mettre pour que cela fonctionne la variable $POST['choixbase'] pour que cela fonctionne avec ma partie AJAX.
    code PHP ci dessous, suivi de la partie Ajax.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $req = $bdd->prepare("SELECT casier FROM choixbase= :choixbase WHERE ref= :ref");
    // $req .= "choixbase LIKE :choixbase ";
    $req->bindParam( 'choixbase', $_POST['choixbase'], PDO::PARAM_STR);
    $req->bindValue( 'ref', $_POST['ref'], PDO::PARAM_STR );
    $req->execute();
    $resultat = $req->fetchAll();
    $resultat = $resultat['casier'];
    echo $resultat;
    $req->closeCursor();

    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
    $(document).ready(function(){
    			$("#qte").change(function () {
     
    				var ref = $("#ref").val();
    				var choixbase = $("#choixbase").val();
    	$.ajax({
    		url     : 'casier.php',
    		type    : 'POST',
    		data    : {"ref" :ref,"choixbase" :choixbase},
    		success: function(resultat) {
    		       <!--alert('ok'); -->
    		       $('#casiers').val(resultat);
    		     		}
    		,
    		error: function(resultat)
    		{
    			$('#casiers').val(resultat);
    			alert('error');
    		}
    	});
    });
    });
    Merci d'avance pour votre aide

  2. #2
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Utilise fetch() et pas fetchall()
    Et decide toi entre bindparam et bindvalue
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 23
    Points
    23
    Par défaut
    Effectivement, j'ai tous passés en bindvalue., et changé le fetch.
    Mais toujour une erreur.
    les post passe, j'ai controle avec firebug, mais j'ai cette erreur dans apache :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     PHP Fatal error:  Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''cherre' WHERE ref= 'NH073'' at line 1' in /media/www-dev/public/completion/casier.php:8\nStack trace:\n#0 /media/www-dev/public/completion/casier.php(8): PDOStatement->execute()\n#1 {main}\n  thrown in /media/www-dev/public/completion/casier.php on line 8, referer: http://127.0.0.1/public/completion/cde.php
    voici la ligne 8 en question
    Merci d'avance.

  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
    Points : 44 155
    Points
    44 155
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FROM choixbase= :choixbase
    La syntaxe est FROM nomdelatable, il n'y a pas de = dans l'histoire.
    Et le nom d'une base ne peut pas être un paramètre PDO.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 23
    Points
    23
    Par défaut
    Tu as surement raison mais comment doisje faire alors, j'ai beau chercher sur la toile je ne trouve rien.
    Merci d'avance

  6. #6
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Fait une liste blanche pour les tables autorisées et intégre les directement dans la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $allowed_table = array('xxxx', 'yyyy', 'zzzz');
    if (isset($_POST['choixbase']) && in_array($_POST['choixbase'], $allowed_table)) {
          $req = $bdd->prepare("SELECT casier FROM " .  $_POST['choixbase'] . " WHERE ref= :ref");
          $req->execute(array( ':ref'=>$_POST['ref']));
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 23
    Points
    23
    Par défaut
    Merci vraiment de te pencher sur mon problème.
    J'ai fait tes modifs
    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
    <?php
    require('shared.php');
     
    $allowed_table = array('xxxx', 'yyyy', 'zzzz');
    if (isset($_POST['choixbase']) && in_array($_POST['choixbase'], $allowed_table)) {
    $req = $bdd->prepare("SELECT casier FROM". $_POST['choixbase']. "WHERE ref = :ref");
     
    //$req->bindValue('choixbase', $_POST['choixbase']);
    //$req ->bindValue('ref', $_POST['ref'],PDO::PARAM_STR);
     
     
    $req->execute(array( ':ref'=>$_POST['ref']));
     
    $resultat = $req->fetch();
    }
    $resultat = $resultat['casier'];
    echo $resultat;
    //$req->closeCursor();   enlever sinon erreur
     
    ?>
    Plus d'erreur, mais rien ne s'affiche

  8. #8
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    j'ose esperer que tu as remplacé xxxx yyyy et zzzz par quelque chose ...
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 23
    Points
    23
    Par défaut
    Oui, j'avais copier le code mis de coté
    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
    $allowed_table = array('cherre', 'varades', 'gennes');
    if (isset($_POST['choixbase']) && in_array($_POST['choixbase'], $allowed_table)) {
    $req = $bdd->prepare("SELECT casier FROM".$_POST['choixbase']."WHERE ref=:ref");
     
    //$req->bindValue('choixbase', $_POST['choixbase']);
    //$req ->bindValue(1, $_POST['ref'],PDO::PARAM_STR);
     
     
    $req->execute(array('ref'=>($_POST['ref']));
     
    $resultat = $req->fetch();
    }
    $resultat = $resultat['casier'];
    echo $resultat;
    //$req->closeCursor();
    Mais j'ai toujours la meme erreur, le transfert de données mais des quotes autour de la valeur ref, d'ou l'erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    server version for the right syntax to use near 'ref='AGK2000'' at line
    Je ne trouve pas les paramètres me permettant de palier à ce problème.
    Merci d'avance encore une fois.

  10. #10
    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
    Points : 44 155
    Points
    44 155
    Par défaut
    Tu as mal recopié la requête, il manque les espaces.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 43
    Points : 23
    Points
    23
    Par défaut
    Oups, effectivement.
    Du coup cela marche nickel.
    Merci beaucoup.

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

Discussions similaires

  1. Utilisation des alias dans la clause WHERE d'une requête SELECT
    Par OursRêveur dans le forum MS SQL Server
    Réponses: 14
    Dernier message: 13/07/2013, 04h34
  2. [2012] Utiliser une variable dans un WHERE différent
    Par CrasherSEP dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 11/07/2013, 15h27
  3. Réponses: 8
    Dernier message: 16/06/2010, 12h32
  4. Réponses: 2
    Dernier message: 29/01/2007, 13h41
  5. Réponses: 9
    Dernier message: 05/07/2005, 08h37

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