PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 20-08-2009 21:24:33

Thomas
Membre
Inscription : 11-06-2009
Messages : 15

Formulaire et $_GET

Voila je fais un moteur de recherche a partir d'un formulaire qui va regarder dans une base de données et affiche les résultats trouvés.

Voila le code :

<?php
   connectionbase();
   formulaire();
 if (isset($_GET['recherche']) && $_GET['recherche'] != NULL)
  {
    $recherche = strip_tags(trim(strtoupper(htmlentities($_GET['recherche'], ENT_QUOTES))));  
     $requete = mysql_real_escape_string($recherche);
    $requete = mysql_query("SELECT titre, annee, genre, motcle FROM films WHERE motcle LIKE '%$recherche%' ORDER BY titre ") or exit(mysql_error());
    $nb_resultats = mysql_num_rows($requete);
    if($nb_resultats != 0)
{

  echo '<p>Résultats de votre recherche.</p>';
          echo 'Il y a <b>'.$nb_resultats.'</b> :';
      if($nb_resultats > 1) { echo ' <b>résultats </b>'; } else { echo ' <b>résultat</b>'; }
        echo "<br></br><br></br>";
        while($resultat = mysql_fetch_assoc($requete))
      {
        echo ''.$resultat['titre'].' - '.$resultat['annee].' - '.$resultat['genre'].'' ;
        echo "<br></br>";
        }
     else
      {
        echo '<p>Pas de résultats</p>';
        echo '<p>Nous n\'avons trouvé aucun résultat pour la requête <b>'.$recherche.'</b>. Réessayez avec un autre terme.</p>';
       }
 mysql_free_result;
 fermerbase();
}
}

J'aimerais savoir si a partir des $_GET c'est (déjà) correct et assez sécurisé, sachant que le paramètre est passé en url en fonction de la recherche
J'ai utilisé mysql_real_escape_string, mais j'ai cru comprendre que ce n'est utilisé que quand on ajoute des données dans une base, c'est superflu ?

Hors ligne

#2 21-08-2009 08:01:27

Alnoss
Modérateur absent
Lieu : 06 - PACA
Inscription : 11-05-2009
Messages : 541
Site Web

Re : Formulaire et $_GET

Salut,

Comme tu dis, vu que c'est pour la recherche, si quelqu'un s'amuse à chercher [en modifiant ta variable du $_GET] et que cela ne correspond à rien dans ta base,  il arrivera sur la page "erreur 404" que tu auras bien évidement déjà défini wink

Par contre, ATTENTION s'il te prenait l'envie de stocker les mots que les gens recherchent pour optimiser le référencement interne de tes fiches... car là, il y aura stockage, donc RISQUES...


MERCI de lire le mode d'emploi avant de poster !!

Hors ligne

#3 21-08-2009 10:20:01

Thomas
Membre
Inscription : 11-06-2009
Messages : 15

Re : Formulaire et $_GET

C'est bien ce que je pensais, Merci bien ^^

Hors ligne

#4 21-08-2009 11:43:56

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Formulaire et $_GET

Salut,

Thomas a écrit :

J'ai utilisé mysql_real_escape_string, mais j'ai cru comprendre que ce n'est utilisé que quand on ajoute des données dans une base

Absolument pas, tu risque une injection SQL même avec un select.


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#5 21-08-2009 15:53:07

Thomas
Membre
Inscription : 11-06-2009
Messages : 15

Re : Formulaire et $_GET

mcAllan a écrit :

Salut,

Thomas a écrit :

J'ai utilisé mysql_real_escape_string, mais j'ai cru comprendre que ce n'est utilisé que quand on ajoute des données dans une base

Absolument pas, tu risque une injection SQL même avec un select.

Donc je le laisse.

Mais si je fais un simple affichage avec une requete sql je dois aussi l'utiliser ? Comment je peux securiser un peu plus ?

Hors ligne

#6 21-08-2009 16:47:34

mcAllan
Mowdérateur
Lieu : Châteaurenard en Provence
Inscription : 08-05-2009
Messages : 269

Re : Formulaire et $_GET

Du moment que tu fait une requête SQL tu dois la sécuriser.
mysql_real_escape_string convient très bien là.
Par contre tu fait :
$requete = mysql_real_escape_string($recherche);
Ne serai-ce pas plutôt :
$recherche = mysql_real_escape_string($recherche);
??


Promotion de PPOO : Programmation Propre Orientée Objet !!
Recommande AAO : Apéritif Avec Olives...
Glop, glop

Hors ligne

#7 21-08-2009 17:27:22

Thomas
Membre
Inscription : 11-06-2009
Messages : 15

Re : Formulaire et $_GET

mcAllan a écrit :

Du moment que tu fait une requête SQL tu dois la sécuriser.
mysql_real_escape_string convient très bien là.
Par contre tu fait :
$requete = mysql_real_escape_string($recherche);
Ne serai-ce pas plutôt :
$recherche = mysql_real_escape_string($recherche);
??

Oui parfaitement, je corrige ca, merci bien !

Hors ligne

#8 22-08-2009 13:19:46

Thomas
Membre
Inscription : 11-06-2009
Messages : 15

Re : Formulaire et $_GET

Dans un même genre d'idée j'aimerais afficher les mots clés d'un film sur chacune de mes pages (films), mais au lieu de recopier xx fois la même requete sur chacune de mes pages en ne changeant que l'id du film, j'aimerais savoir si c'est possible de faire :

- un array avec "l'id" du film, avec sa correspondance "lien"
et
- en fonction de la page adapter <b>une seule</b> requête

arrayfilms.php
Ex : ("SELECT id, titre, lien FROM films")
Je mets en array pour avoir
$array['id]['lien']
1 = films/Star-Wars.php
2 = films/Le-seigneurs-des-anneaux.php
....

Après j'execute la requete en fonction de l'id (qui changera, en fonction de la page)
("SELECT id, titre FROM films LEFT JOIN mot_association ON films.id = mot_association.films_id WHERE films.id=$array['id']

dans ma page Star-Wars.php
dire je suis dans la page Star-Wars.php donc l'id = 1
et executer la requete sql

En gros avoir le moins de code possible sur ma page film, mais surtout n'avoir <b>qu'une seule requete.</b>
Mais je me complique peut etre la tête, il y a peut être plus simple ? smile

Hors ligne

Pied de page des forums