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 :

comment modifier une requête sql quand un checkbox est checked ?


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 117
    Points : 47
    Points
    47
    Par défaut comment modifier une requête sql quand un checkbox est checked ?
    Bonjour:

    pouvez vous m'aider a trouver la solution a la situation suivante:

    j'ai des checkboxes , une fois un de ces checkboxes est ( chicked ), je devais faire un ajax call pour ramener les données de la BD correspondantes aux éléments Clickés (checkbox est checked)par l'utilisateur donc je crois qu'il faut trouver une solution dont laquelle chaque fois l'utilisateur click sur checkbox on va concaténer la précédente requête sql avec la nouvelle condition de checkbox.
    donc je n'ai trouvé que $_SESSION pour faire cette tache , mais je crois avoir lu qlq part que c'est a éviter cette technique qui consiste a enregistrer les noms de champs BD dans les variables $_SESSION pour les faire passer dans une requête.
    qu'est ce que vous pensez messieurs??
    merci


    voila 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
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
     <script>
    function getData(str, r) {
        if (str.length == 0) { 
            document.getElementById("showdata").innerHTML = "";
            return;
        } else {
            var xmlhttp = new XMLHttpRequest();
            xmlhttp.onreadystatechange = function() {
                if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
                    document.getElementById("showdata").innerHTML = xmlhttp.responseText;
                }
            }
            xmlhttp.open("GET", "getAll.php?q=" + str + "&r=" + r, true);
            xmlhttp.send();
        }
    }
    </script>
     
    <p><b>Contries</b></p>
    <div class="checkbox">
      <label><input type="checkbox" name="contries" value="1" onchange="getData( this.name, this.value)">spain  <span class="badge">(30 136)</span></label>
      <label><input type="checkbox" name="contries" value="2" onchange="getData( this.name, this.value)">italy  <span class="badge">(15 244)</span></label>
       <label><input type="checkbox" name="contries" value="3" onchange="getData( this.name, this.value)">norway <span class="badge">(13 885)</span></label>
     
    </div>
     
    <p><b>Diplomes</b></p>
    <div class="checkbox">
       <label><input type="checkbox" name="diplomes" value="1" onchange="getData(this.name, this.value)">a <span class="badge">(11 752)</span></label>
      <label><input type="checkbox" name="diplomes" value="2" onchange="getData( this.name, this.value)">b <span class="badge">(11 752)</span></label>
      <label><input type="checkbox" name="diplomes" value="3" onchange="getData( this.name, this.value)">c<span class="badge">(21 181)</span></label>
       <label><input type="checkbox" name="diplomes" value="4" onchange="getData( this.name, this.value)">d <span class="badge">(32 870)</span></label>
      <label><input type="checkbox" name="diplomes" value="5" onchange="getData( this.name, this.value)"> d <span class="badge">(794)</span></label>
     
     
    </div>
     
    <p><b>Ages</b></p>
    <div class="checkbox">
       <label><input type="checkbox" name="ages" value="1" onchange="getData( this.name, this.value)">20 - 30 years  <span class="badge">(11 752)</span></label>
      <label><input type="checkbox" name="ages" value="2" onchange="getData( this.name, this.value)">30 - 40 years  <span class="badge">(11 752)</span></label>
      <label><input type="checkbox" name="ages" value="3" onchange="getData( this.name, this.value)">40 - 50 years <span class="badge">(21 181)</span></label>
       <label><input type="checkbox" name="ages" value="4" onchange="getData( this.name, this.value)">50 - 60 years  <span class="badge">(32 870)</span></label>
      <label><input type="checkbox" name="ages" value="5" onchange="getData( this.name, this.value)"> > 60 years  <span class="badge">(794)</span></label>
     
     <div name='showdata'>
     
     
     
          </div>
    </div>
    getAll.php
    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
     
     
    <?php 
    if (session_status() == PHP_SESSION_NONE) {
        session_start();
    }
     
    $field = $_REQUEST["q"];
    $value = $_REQUEST["q"];
     
     
     
    if ($field !== "" && $value !== "") {
    	if(!isset($_SESSION['sql']) && empty($_SESSION['sql'])) {
    	$_SESSION['sql'] = "SELECT * FROM mytable  WHERE id > 0 ";
    	}else{
     
    		$_SESSION['sql'] .="AND $field = $value";
     
    	}
    	//$Db = PDO object et select() est ma function pour les selects
    	$hint = $this->Db->select($_SESSION['sql']);
    }
    ?>

  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
    Ce n'est pas de mettre des noms de colonne en session qui est gênant, c'est de mettre dans la requête des noms de colonne qui proviennent de l'utilisateur.
    C'est pareil pour la valeur : actuellement tu ne sécurises rien du tout, il faut utiliser une requête préparée.

    Pour les noms de colonne, tu peux avoir un tableau de correspondance :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $listColonnes = array('ages', 'diplomes', 'countries'); // countries et pas contries
     
    if (isset($_GET['q'], $_GET['r'])) {
         $field = $_GET['q'];
         if (isset($listColonnes[$field])) {
               //  ok la colonne est valide
         }
    }
    Sinon la logique de ton code n'est pas bonne : si tu coches deux valeurs pour la même colonne, tu obtiendras un AND au lieu d'un OR.

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2011
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Janvier 2011
    Messages : 117
    Points : 47
    Points
    47
    Par défaut merci
    Merci sabotage pour votre aide
    Concernant la sécurité des données je sais bien qu'il faut toujours filtrer et sécuriser les données venus de l'utilisateur , c'était un simple exemple ...
    Mon problème est comme vous le disiez est de la logique et les Sessions .
    Donc vous croiez que ce n'est pas gênant d'avoir les noms de colonnes dans des session ??

    Oui c'est vrai j'obtiendrais un AND au lieu d'un OR et j'ai constaté que j'obtiendrais aussi des données du la BD meme s'il y avait pas ce qui correspondent au condition checkbox chicked parce que il y'a la requête par default.
    Pouviez vous SVP m'aider a construire une bonne logique

Discussions similaires

  1. Réponses: 6
    Dernier message: 15/02/2007, 13h46
  2. Comment faire une requête SQL dans un datatable
    Par Passepoil dans le forum VB.NET
    Réponses: 2
    Dernier message: 05/02/2007, 20h24
  3. Modifier une Requête SQL
    Par CharleLéo dans le forum Bases de données
    Réponses: 5
    Dernier message: 04/02/2007, 13h27
  4. Comment stocker une requête sql dans une variable ?
    Par innova dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 26/10/2006, 10h01
  5. [SQL] Comment automatiser une requête SQL alimentée par un formulaire HTML?
    Par tse_tilky_moje_imja dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 29/06/2006, 23h46

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