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 + WHERE + AND et LIKE [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 830
    Par défaut variable + WHERE + AND et LIKE
    Bonjour.
    Voilà je cherche à récupérer dans une variable les valeurs saisies dans les champs d'un formulaire afin de l'utiliser avec les conditions WHERE, AND et LIKE.
    Voici le code qui fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach($_POST as $index=>$valeur){
    		if ($valeur <> null and $index!='inserer'){
    			echo $index.' LIKE \''.$valeur.'\' AND ';
    		}
    	}
    Voilà le retour :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    Nom LIKE 'V%' AND Prénom LIKE 's%' AND Code_postal LIKE '59%' AND
    Pour pouvoir l'utiliser correctement, comment supprimer le dernier AND.
    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $like_post = $index.' LIKE \''.$valeur.'\' AND ';
    	echo substr($like_post, 0, -4);
    Ça fonctionne pas.
    Avez-vous une solution, 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
    Ta méthode n'est pas bonne car elle ouvre toute possibilité aux injections SQL.
    Utilises-tu PDO ou mysqli ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 830
    Par défaut
    Bonjour sabotage.

    J'utilise PDO.

  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
    Une version sécurisée : on récolte uniquement ce qu'on attend et pas tout ce que l'utilisateur aurait pu saisir, le nom des colonnes est donné par l'application, les valeurs sont passées en paramètre.

    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
     
    $columns = array('Nom', 'Prenom', 'Code_postal');
    $where = array();
    $param = array();
     
    foreach ($columns as $name) {
            if (!empty($_POST[$name])) {
                 $where[] = $name . ' LIKE ? ';
                 $param[] = '%' . $_POST[$name] . '%';
            }
    }
     
    $sql = 'SELECT cequetuveux FROM tatable WHERE ' . implode(' AND ', $where);
    $sth = $pdo->prepare($sql);
    $sth->execute($param);
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 830
    Par défaut
    Bonjour sabotage.
    Une version sécurisée : on récolte uniquement ce qu'on attend et pas tout ce que l'utilisateur aurait pu saisir, le nom des colonnes est donné par l'application, les valeurs sont passées en paramètre.
    Ce que je cherche à faire, c'est récupérer ce que l'utilisateur a saisi dans un ou tous les champs du formulaire exemple :
    - …% ou %... ou %...%

    Pour filtrer et afficher la liste dans la même page avec ce type de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    foreach(as $row){
        echo "<tr>";
            echo "<td height=20> $row[id] </td><td> $row[nom] </td><td> $row[prenom] </td><td> $row[adresse] </td><td> $row[cp] </td><td> $row[telephone]<br></td>";
        echo "</tr>";
    }
    J'ai débuté récemment et pas tous compris, je vais essayer d'intégrer et tester ta solution.

    Mais à prime abord elle semble plus figée pour utiliser l'opérateur LIKE.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    830
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 830
    Par défaut
    Bonjour sabotage.

    Comme je le dis dans mon post précédent, je débute et pas tous compris, un peu d'indulgence svp.

    Voici mon code avec ta solution intégré, mais ça fonctionne pas.
    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
    <html>
    	<form action = "#" method = "post">
    		<input type="hidden" name="id" value=""/>
    		<input type="text" name="Nom" placeholder="nom" />
    		<input type="text" name="Prénom" placeholder="prenom" />
    		<input type="text" name="Adresse" placeholder="adresse" />
    		<input type="text" name="Code postal" placeholder="cp" />
    		<input type="text" name="Téléphone" placeholder="telephone" /><br>
    		<input style="width:110px;" type="submit" name="inserer" class="submit"/><br> 		
    	</form>			
     
    	<table BORDER="1">
    		<tr>
    			<th style="width:25px;height:25px;background-color:#CEE3F6;"> N° </th>
    			<th style="width:120px;background-color:#CEE3F6;"> Nom </th>
    			<th style="width:90px;background-color:#CEE3F6;"> Prénom </th>
    			<th style="width:200px;background-color:#CEE3F6;"> Adresse </th>
    			<th style="width:45px;background-color:#CEE3F6;"> CP </th>
    			<th style="width:80px;background-color:#CEE3F6;"> Téléphone </th>
    		</tr><br>
    <?php
    	// Connexion à la base de données
    	include'connect_infos_0.php';
     
    	$columns = array('nom', 'prenom', 'adresse', 'cp', 'telephone');
    	$where = array();
    	$param = array();
     
    	foreach ($columns as $name) {
    		if (!empty($_POST[$name])) {
    			 $where[] = $name . ' LIKE ? ';
    			 $param[] = '%' . $_POST[$name] . '%';
    		}
    	}
     
    	$sql = 'SELECT * FROM personnes WHERE ' . implode(' AND ', $where);
    	$sth = $bdd->prepare($sql);
    	$sth->execute($param);
     
    	foreach($sth as $row){
    		echo "<tr>";
    			echo "<td height=20> $row[id] </td><td> $row[nom] </td><td> $row[prenom] </td><td> $row[adresse] </td><td> $row[cp] </td><td> $row[telephone]<br></td>";
    		echo "</tr>";
    	}
    ?>
    </html>

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

Discussions similaires

  1. Erreur de compilation: SELECT WHERE AND
    Par cdarsac dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 14/09/2011, 09h35
  2. Réponses: 2
    Dernier message: 08/09/2009, 11h41
  3. Afiiché les conditions avec WHERE, and et or ?
    Par gastoncs dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/08/2009, 16h34
  4. Delete avec where .. and ..
    Par petitcatenaire dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/12/2008, 11h51
  5. requete SQL enchainant des "WHERE" / "AND"
    Par Loki83 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 20/10/2008, 14h26

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