Moteur de recherche PHP [Résolu/Fermé]

Signaler
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
-
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
-
Bonjour à tous, je vous sollicite pour une petite aide

J'ai mon moteur de recherche :


<?
if(isset($_POST['requete']) && $_POST['requete'] != NULL) // on vérifie d'abord l'existence du POST et aussi si la requete n'est pas vide.
{
mysql_connect('localhost','root','');
mysql_select_db('test'); // on se connecte à MySQL. Je vous laisse remplacer les différentes informations pour adapter ce code à votre site.

$requete = htmlspecialchars($_POST['requete']); // on crée une variable $requete pour faciliter l'écriture de la requête SQL, mais aussi pour empêcher les éventuels malins qui utiliseraient du PHP ou du JS, avec la fonction htmlspecialchars().
$query = mysql_query("SELECT * FROM recherche WHERE entreprise LIKE '%$requete%' ORDER BY id DESC") or die (mysql_error()); // la requête, que vous devez maintenant comprendre <img title=";)" alt=";)" src="../../bundles/tinymce/vendor/tiny_mce/plugins/emotions/img/clin.png">
$nb_resultats = mysql_num_rows($query); // on utilise la fonction mysql_num_rows pour compter les résultats pour vérifier par après
if($nb_resultats != 0) // si le nombre de résultats est supérieur à 0, on continue
{
// maintenant, on va afficher les résultats et la page qui les donne ainsi que leur nombre, avec un peu de code HTML pour faciliter la tâche.
?>
<h3>Résultats de votre recherche.</h3>
<p>Nous avons trouvé <? echo $nb_resultats; // on affiche le nombre de résultats
if($nb_resultats > 1) { echo 'résultats'; } else { echo 'résultat'; } // on vérifie le nombre de résultats pour orthographier correctement.
?>
dans notre base de données. Voici les fonctions que nous avons trouvées :<br/>
<br/>
<?
while($donnees = mysql_fetch_array($query)) // on fait un while pour afficher la liste des fonctions trouvées, ainsi que l'id qui permettra de faire le lien vers la page de la fonction
{
?>
<a href="recherche.php?id=<? echo $donnees['id']; ?>"><? echo $donnees['entreprise']; ?></a><br/>
<?
} // fin de la boucle
?><br/>
<br/>
<a href="index.php">Faire une nouvelle recherche</a></p>
<?
} // Fini d'afficher les résultats ! Maintenant, nous allons afficher l'éventuelle erreur en cas d'échec de recherche et le formulaire.
else
{ // de nouveau, un peu de HTML
?>
<h3>Pas de résultats</h3>
<p>Nous n'avons trouvé aucun résultat pour votre requête "<? echo $_POST['requete']; ?>". <a href="rechercher.php">Réessayez</a> avec autre chose.</p>
<?
}// Fini d'afficher l'erreur <img title="^^" alt="^^" src="../../bundles/tinymce/vendor/tiny_mce/plugins/emotions/img/hihi.png">
mysql_close(); // on ferme mysql, on n'en a plus besoin
}
else
{ // et voilà le formulaire, en HTML de nouveau !
?>
<p>Vous allez faire une recherche dans notre base de données concernant les fonctions PHP. Tapez une requête pour réaliser une recherche.</p>
<form action="index.php" method="Post">
<input type="text" name="requete">
<input type="submit" value="Ok">
</form>
<?
}
// et voilà, c'est fini !
?>

Quand je recherche sur ma table "recherche" cela me sort bien la liste, mais ensuite le lien ne fonctionne pas et je ne sais pas pourquoi...

Si vous pouvez m'aidez.

Bien merci

5 réponses

Messages postés
4760
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
16 août 2020
1 078
Attention, les fonctions
mysql_*
sont obsolètes depuis PHP 5.5 et disparaitront dans les versions futures. Même si tu restes sur PHP <= 5.5, l'extension mysql atteste d'un mauvais design: il n'y a pas de requêtes préparées, favorisant la possibilité d'injection SQL. Passe à
PDO
ou au syntaxiquement plus proche
mysqli
.
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
255
Oui je sais bien, mais j'ai récupère se script sur le site du zéro (openclassrooms.com), je suis entrain de me monter un site juste pour moi, non ouvert au public.
Messages postés
4760
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
16 août 2020
1 078
Ah OK, si c'est juste pour apprendre à manipuler du SQL ça passe, mais prend en compte mon avertissement si tu développes un truc a part entière dans le futur :)
Messages postés
4760
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
16 août 2020
1 078
'lut
le lien ne fonctionne pas
Comment ça ne fonctionne pas? Normalement il pointe toujours vers
recherche.php?id=[ID]
donc le lien devrait fonctionner, après je ne sais pas si ta page recherche.php existe, ni ne sait ce qu'elle contient, mais si ça ne marche pas après que tu aies cliqué sur le lien, c'est dans le code de recherche.php qu'il faut chercher.
Messages postés
4760
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
16 août 2020
1 078
Bien dans ce cas il faut que tu mettes dans index.php (nom que je changerais d'ailleurs, index c'est censé être la "page d'accueil" du site ou dossier dans lequel il se trouve) le code nécessaire que vérifie l'existence de
$_GET['id']
, puis sorte les infos nécessaires depuis un
$id = intval($_GET['id']); // pas de risque d'injection: on aura toujours un nombre entier, jamais de chaine de caractères
$query = mysql_query("SELECT * FROM recherche WHERE id=$id") or die (mysql_error());
$nb_resultats = mysql_num_rows($query);
if ($nb_resultats == 0) {
    echo "non trouvé";
} else {
    $donnees = mysql_fetch_array($query); // oui, une seule fois: 1 id pour 1 ligne, pas +!
    echo "E-mail: ".$donnees['email']."<br>";
}
Ou un truc comme ça quoi
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
255
Ok, donc ce morceaux je l'insère ou ? Et oui débutant en PHP..
Messages postés
4760
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
16 août 2020
1 078
Tu l'insères là où le résultat (ici l'e-mail) est censé s'afficher
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
255
Le mail est censé s'afficher lorsuq'on clique sur le lien, donc à quel endroit sur mon code ? ^^
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
255
Ca fonctionne !!

Merci :D
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
255
Je vais d'abord le faire comme ça (si tu arrive a me dépanner avec grand plaisir) par la suite je vais le faire en PDO ;)