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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 43
    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
    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 averti
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 43
    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
    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 averti
    Inscrit en
    Février 2009
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 43
    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
    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

+ 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