Page 1 sur 1

Rechercher dans une base de donnée

Posté : 12 sept. 2019, 17:16
par ravenelse
Voila mon probleme, je peux chercher et afficher ma base de donnée avec ce code, sauf que l'on me dit que c'est pas bien du tout de faire avec htmlspecialchars. Sauf que j'ai essayer d'autres choses et je n'arrive pas à afficher et rechercher dans ma base de donnée sans passer par ce code .
<?php

$bdd = new PDO('mysql:host=localhost;dbname=;charset=utf8','','');

$dossiers = $bdd->query('SELECT * FROM dossiers ORDER BY ID ');
if(isset($_GET['q']) AND !empty($_GET['q'])) {
   $q = htmlspecialchars($_GET['q']);
   $dossiers = $bdd->query('SELECT * FROM dossiers WHERE Langue  LIKE "%'.$q.'%" ORDER BY id '); 
   if($dossiers->rowCount() == 0) {
      $dossiers = $bdd->query('SELECT * FROM dossiers WHERE CONCAT(Langue, Modèles, Type, Nom, Lien) LIKE "%'.$q.'%" ORDER BY id ');
   }
}
?>
<div class="container">

</form><form method="GET">
   <input type="search" name="q" placeholder="Recherche..." style="width: 300px; height: 40px;"/>
   <input type="submit" value="Valider" style="width: 75px; height: 40px;" />
<?php if($dossiers->rowCount() > 0) { ?>
<table class="table table-striped " >
      <tr>
         <th >ID</th>
         <th >Langues</th>
         <th >Modèles </th>
         <th >Type </th>
        <th >Nom</th>
     <th >Lien</th>
          </tr>
           </thead>
   <?php while($a = $dossiers->fetch()) { ?>
      <tr >
        <td><?= $a['ID'] ?></td>
      <td><?= $a['Langue'] ?></td>
       <td><?= $a['Modèles'] ?></td>
       <td><?= $a['Type'] ?></td>
              <td><?= $a['Nom'] ?></td>       
                <td><?php echo ('<p><a href="'.$a['Lien'].'"target="_blank">'.$a['Lien'].' </a>'); ?> </td>

          <tr>

   <?php } ?>
   </ul>
<?php } else { ?>
Aucun résultat pour: <?= $q ?>...<br >Veuillez retenter une recherche ou retourner à <a href=""> la liste des données.</a>
<?php } ?>

Re: Rechercher dans une base de donnée

Posté : 12 sept. 2019, 23:16
par thehawk
le soucis est que tu es largement ouvert à l'injection SQL, imagine que je passe à ton URL : ?q=LIMIT 1; SELECT * FROM maSuperTable;

Je te conseil de regarder du coder des requêtes préparés afin d'évite ce futur soucis.

Re: Rechercher dans une base de donnée

Posté : 12 sept. 2019, 23:47
par or 1
ça donnerait :
SELECT * FROM dossiers WHERE Langue LIKE "%LIMIT 1; SELECT * FROM maSuperTable;%" ORDER BY id
pas d'injection.

si on met un " dans le q passé, le " est transformé en &quot; par htmlspecialchars, pas d'injection non plus.

ce qui n’empêche pas de suivre le conseil de mettre des requêtes préparées.

Re: Rechercher dans une base de donnée

Posté : 13 sept. 2019, 16:07
par mariongellar
les requêtes préparés sont un moyen de sécurisé encore ton code pas de variable directement dans la requête

Code : Tout sélectionner

$red = $bdd->prepare('SELECT DATE_FORMAT(rdv_livreur, "%H:%i") AS heure_rdv_livreur FROM client WHERE rdv_livreur LIKE ?'); $red->execute(array($debut_rdv."%")); // ICI TA VARIABLE while ($donnees = $red->fetch()) { }$red->closeCursor();