Moteur de recherche PHP

Résolu/Fermé
djsquinje
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
- 31 juil. 2014 à 11:38
djsquinje
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
- 31 juil. 2014 à 13:45
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

ElementW
Messages postés
4764
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 302
31 juil. 2014 à 11:45
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
.
0
djsquinje
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
271
31 juil. 2014 à 11:47
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.
0
ElementW
Messages postés
4764
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 302
31 juil. 2014 à 11:51
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 :)
0
ElementW
Messages postés
4764
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 302
31 juil. 2014 à 11:56
'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.
0
djsquinje
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
271
31 juil. 2014 à 12:01
rechercher.php n'existe pas je l'est renommer en index.php
0
djsquinje
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
271
31 juil. 2014 à 12:05
Ok j'ai modifier
recherche.php?id=[ID]
par
index.php?id=[ID]
.
Apres la recherche quand je clique sur l'un des liens cela me r'envois vers l'index.php alors que moi je voudrais qu'il affiche ce qu'il y à derrière (dans mon cas des adresse mail).
0
djsquinje
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
271
31 juil. 2014 à 12:08
Que je clique sur nouvelle recherche ou sur le lien trouver lors de ma recherche cela est la même chose...

Mon moteur me trouve des entreprises, lorsque je clique sur les liens trouver lors de ma recherche je veux par exemple je clique sur l'entreprise Google il me faut qu'il me sorte l'adresse mail de Google.

J'espère que tu à comprit.
0
ElementW
Messages postés
4764
Date d'inscription
dimanche 12 juin 2011
Statut
Contributeur
Dernière intervention
5 octobre 2021
1 302
31 juil. 2014 à 12:11
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
0
djsquinje
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
271
31 juil. 2014 à 12:15
Ok, donc ce morceaux je l'insère ou ? Et oui débutant en PHP..
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
djsquinje
Messages postés
736
Date d'inscription
lundi 19 janvier 2009
Statut
Membre
Dernière intervention
31 mai 2017
271
31 juil. 2014 à 12:00
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 ;)
0