Souci avec script [PHP] recherche prénoms
txiki
Messages postés
6596
Date d'inscription
Statut
Contributeur
Dernière intervention
-
txiki Messages postés 6596 Date d'inscription Statut Contributeur Dernière intervention -
txiki Messages postés 6596 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai encore des soucis avec un petit moteur de recherche pour mes prénoms basques.
Dans le lien ci-dessous, je tape "adele" (or je sais qu'il existe dans la table) dans les équivalents basques des prénoms féminins français et il me dit qu'il ne le trouve pas. ? ? ?. Même chose avec "Michel" (pour les équivalents masculins. De plus il peut y en avoir plusieurs, équivalent pour un prénom donné !
http://txiki.free.fr/index.php?page=Intro_Prenoms&lang=Fr
Ça fait plusieurs jours que je me casse la tête sans trouver la solution.
Voici une portion de code:
Quelqu'un pourrait-il me regarder/corriger ce code SVP ?
Merci infiniment d'avance.
Le bonheur est la seule chose que l'on peut donner sans l'avoir.
J'ai encore des soucis avec un petit moteur de recherche pour mes prénoms basques.
Dans le lien ci-dessous, je tape "adele" (or je sais qu'il existe dans la table) dans les équivalents basques des prénoms féminins français et il me dit qu'il ne le trouve pas. ? ? ?. Même chose avec "Michel" (pour les équivalents masculins. De plus il peut y en avoir plusieurs, équivalent pour un prénom donné !
http://txiki.free.fr/index.php?page=Intro_Prenoms&lang=Fr
Ça fait plusieurs jours que je me casse la tête sans trouver la solution.
Voici une portion de code:
<? require 'fonctions.php'; //====================== // connection à la DB //====================== $link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table if(isset($_POST['requete']) && $_POST['requete'] != NULL) // on vérifie d'abord l'existence du post et on vérifie aussi si la requete n'est pas vide. { // on créé une variable $requete pour faciliter l'écriture de la requete sql, // mais aussi pour empêcher ceux qui utiliseraient du Php ou du JS, avec la fonction htmlspecialchars(). $requete = htmlspecialchars($_POST['requete']); $query = mysql_query("SELECT * FROM prenomsfeminins WHERE id LIKE '%$requete%' ORDER BY id ASC") or die (mysql_error()); $nb_resultats = mysql_num_rows($query); // on compte 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 donne les résultats et le nombre de résultats ?> <table width='60%' border="1" align='center' cellpadding="6" cellspacing="0"> <tr><td> <h3> Résultats de la recherche: <em class="vert">(Prénoms féminins) </em></h3> <p class="red"><? echo $nb_resultats; // on affiche le nombre de résultats if($nb_resultats > 1) { echo ' résultats trouvés'; } else { echo ' résultat trouvé'; } // on vérifie le nombre de résultats pour orthographier correctement. ?> </p> <? while($donnees = mysql_fetch_array($select)) // on fait un while pour afficher le prénom trouvé, ainsi que l'id qui permettra de faire le lien vers la page de la catégorie { ?> <a href="Detail_Prenom.php?id=<? echo $donnees['id']; ?>"><? echo $donnees['Prenom']; ?></a><br/> <!-- page du détail prénom --> <? } // fin de la boucle ?>
Quelqu'un pourrait-il me regarder/corriger ce code SVP ?
Merci infiniment d'avance.
Le bonheur est la seule chose que l'on peut donner sans l'avoir.
A voir également:
- Souci avec script [PHP] recherche prénoms
- Script vidéo youtube - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Mas script - Accueil - Windows
- Recherche photo - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms - Forum Excel
7 réponses
Au fait !
Je ne sais pas comment utiliser l'expression régulière permettant de taper tout en minuscule, initiale en majuscule et le reste en minuscule, caractères accentué, y compris la tilde (htmlspecialcharacters ?). On ne doit pas pouvoir entrer des prénoms composés.
Merci encore !
Je ne sais pas comment utiliser l'expression régulière permettant de taper tout en minuscule, initiale en majuscule et le reste en minuscule, caractères accentué, y compris la tilde (htmlspecialcharacters ?). On ne doit pas pouvoir entrer des prénoms composés.
Merci encore !
Pour répondre à ta question, il faut un peu plus que le code, un extract de la base de données serait pratique également.
Autre chose, d'un point de vue sécurité, la protection des données reçues par formulaire faite par la ligne :
$requete = htmlspecialchars($_POST['requete']);
N'est pas suffisante pour permettre l'insertion dans une requête de base de données.
Lire par exemple : https://fr.wikipedia.org/wiki/Injection_SQL
La solution propre et nette est d'utiliser la fonction : mysql_real_escape_string
Autre chose, d'un point de vue sécurité, la protection des données reçues par formulaire faite par la ligne :
$requete = htmlspecialchars($_POST['requete']);
N'est pas suffisante pour permettre l'insertion dans une requête de base de données.
Lire par exemple : https://fr.wikipedia.org/wiki/Injection_SQL
La solution propre et nette est d'utiliser la fonction : mysql_real_escape_string
Merci OlgarK,
Bon je verrai pour la sécurité plus tard, quand j'aurais réglé l'affichage de l'équivalent basque d'un prénom français. Voici la première ligne de la table:
Je ne sais pas si c'est suffisant mais je ne suis pas très fort en PHP. Alors les scripts commentés m'aident bien.
Le bonheur est la seule chose que l'on peut donner sans l'avoir.
Bon je verrai pour la sécurité plus tard, quand j'aurais réglé l'affichage de l'équivalent basque d'un prénom français. Voici la première ligne de la table:
-- phpMyAdmin SQL Dump -- version 2.6.1 -- https://www.phpmyadmin.net/ -- -- Serveur: localhost -- Généré le : Samedi 11 Octobre 2008 à 13:28 -- Version du serveur: 4.1.9 -- Version de PHP: 4.3.10 -- -- Base de données: `txiki` -- -- -------------------------------------------------------- -- -- Structure de la table `prenomsfeminins` -- DROP TABLE IF EXISTS `prenomsfeminins`; CREATE TABLE `prenomsfeminins` ( `ID` int(11) NOT NULL auto_increment, `Lettre` char(1) character set latin1 collate latin1_general_ci NOT NULL default '', `Prenom` varchar(30) character set latin1 collate latin1_general_ci NOT NULL default '', `Origine` text character set latin1 collate latin1_general_ci NOT NULL, `Ephemeride` varchar(16) collate latin1_general_cs default NULL, `FrenchName` varchar(40) collate latin1_general_cs default NULL, PRIMARY KEY (`ID`), UNIQUE KEY `Prenom` (`Prenom`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_cs AUTO_INCREMENT=1251 ; -- -- Contenu de la table `prenomsfeminins` -- INSERT INTO `prenomsfeminins` (`ID`, `Lettre`, `Prenom`, `Origine`, `Ephemeride`, `FrenchName`) VALUES (1, 'A', 'Abantza', 'Invocation mariale dans la localité de Barrón (Alava / Araba). Jusqu''au XIXe l''ermitage se trouvait situé au centre de ce village. Actuellement, en revanche, l''unique relique qui reste de la vierge (Andramari) du XVIIe est conservée dans l''église paroissiale. Elle est sortie le jour précédent la Saint Jean pour bénir les champs.', NULL, NULL);
Je ne sais pas si c'est suffisant mais je ne suis pas très fort en PHP. Alors les scripts commentés m'aident bien.
Le bonheur est la seule chose que l'on peut donner sans l'avoir.
Tout s'éclaire :)
La ligne suivante :
$query = mysql_query("SELECT * FROM prenomsfeminins WHERE id LIKE '%$requete%' ORDER BY id ASC") or die (mysql_error());
recherche si l'ID est identique à "adele".
Transforme la en :
$query = mysql_query("SELECT * FROM prenomsfeminins WHERE Prenom LIKE '%$requete%' ORDER BY id ASC") or die (mysql_error());
Et dors la nuit, ça évite ce genre d'erreurs ;)
La ligne suivante :
$query = mysql_query("SELECT * FROM prenomsfeminins WHERE id LIKE '%$requete%' ORDER BY id ASC") or die (mysql_error());
recherche si l'ID est identique à "adele".
Transforme la en :
$query = mysql_query("SELECT * FROM prenomsfeminins WHERE Prenom LIKE '%$requete%' ORDER BY id ASC") or die (mysql_error());
Et dors la nuit, ça évite ce genre d'erreurs ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Désolé ! mais ça ne fonctionne toujours pas.
Je dois quand même préciser que j'utilise des variables de sessions et qu'habituellement les a href sont suivi de: index.php?page=Toto&lang=Fr or ici je n'ai pas ça, mais plutôt:
D'ailleurs voici le code de la page pour l'affichage des réponses (ce sera la même quelle que soit les catégories de recherches/
Je suis dans la nasse !
Le bonheur est la seule chose que l'on peut donner sans l'avoir.
Je dois quand même préciser que j'utilise des variables de sessions et qu'habituellement les a href sont suivi de: index.php?page=Toto&lang=Fr or ici je n'ai pas ça, mais plutôt:
?> <a href="Detail_Prenom.php?id=<? echo $donnees['id']; ?>"><? echo $donnees['Prenom']; ?></a><br/> <!-- page du détail prénom -->
D'ailleurs voici le code de la page pour l'affichage des réponses (ce sera la même quelle que soit les catégories de recherches/
<!-- ============ recherche des prénoms =============== --> <h1> Equivalent basque </h1> <? // ====================================== // On recupere la variable "id" correspondant au prénom choisi // ====================================== $requete = $_POST["requete"]; // on récupère la requete par la variable $_POST require 'fonctions.php'; //====================== // connection à la DB //====================== $link = mysql_pconnect ($host,$user,$pass) or die ('Erreur : '.mysql_error() ); // connection à la base mysql_select_db($db) or die ('Impossible de se connecter à la base'); // sélection de la table //============================================== // requête SQL qui affiche l'équivalent basque correspondant au lien cliqué //============================================== $select = "select * FROM prenomsfeminins WHERE id='$id'"; // On selectionne seulement la ligne qui correspond au prénom choisi $result = mysql_query($select) or die ('Erreur : '.mysql_error() ); $row= mysql_fetch_row($result); // mysql_fetch_row génère un tableau correspondant a la ligne selectionnée de la BDD // Les informations sont accessibles par $row["FrenchName"], $row["prenom"], $row[Origine]... // ================================= // Affichage de la fiche dans un tablea&u dynamique // ================================= echo "<table width='65%' bgcolor='#FFFFFF' border='1' cellspacing='0' cellpadding='4' align='center'>\n"; // première ligne on affiche le titre "Equivalent basque" echo "<tr text-align='center' padding='3px'>"; echo "<td bgcolor='#7F9DB9'><h2> Equivalent basque </h2></td>"; echo "</tr>\n"; // lecture et affichage des résultats. echo "<tr bgcolor='#FFA54A' text-align='center'>"; echo "<td width='50%' bgcolor='#F0F0F0'><strong>Prénom français: </strong>" .$row["FrenchName"]."</strong></td>"; // première ligne pour le prénom français echo "<tr>"; echo "<td width='50%' bgcolor='#F0F0F0'><strong>Equivalent basque: </strong>" .$row["Prenom"]."</td>"; // seconde ligne pour son équivalent basque echo "</tr>\n"; echo "<tr>"; echo "<td width='50%' bgcolor='#F0F0F0'><strong>Origine: </strong>" .$row["Origine"]."</td>"; // troisième ligne pour l'origine du prénom basque echo "</tr>\n"; echo "</table>\n"; // fin du tableau. mysql_close(); ?> <p> </p> </body> </html>
Je suis dans la nasse !
Le bonheur est la seule chose que l'on peut donner sans l'avoir.