Souci avec script [PHP] recherche prénoms
Fermé
txiki
Messages postés
3933
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
24 mars 2023
-
17 nov. 2008 à 15:42
txiki Messages postés 3933 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 24 mars 2023 - 17 nov. 2008 à 18:47
txiki Messages postés 3933 Date d'inscription mercredi 30 janvier 2002 Statut Contributeur Dernière intervention 24 mars 2023 - 17 nov. 2008 à 18:47
A voir également:
- Souci avec script [PHP] recherche prénoms
- Recherche musique - Guide
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms. quel mot est formé par les 6 premières lettres de la colonne code ? - Forum Bureautique
- Recherche par image - Guide
- Alert php ✓ - Forum PHP
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms - Forum Excel
7 réponses
txiki
Messages postés
3933
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
24 mars 2023
506
17 nov. 2008 à 15:46
17 nov. 2008 à 15:46
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
txiki
Messages postés
3933
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
24 mars 2023
506
17 nov. 2008 à 16:37
17 nov. 2008 à 16:37
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
txiki
Messages postés
3933
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
24 mars 2023
506
17 nov. 2008 à 17:33
17 nov. 2008 à 17:33
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.
txiki
Messages postés
3933
Date d'inscription
mercredi 30 janvier 2002
Statut
Contributeur
Dernière intervention
24 mars 2023
506
17 nov. 2008 à 18:47
17 nov. 2008 à 18:47
Désolé !
C'est ce qui avait avant et que j'ai modifié au tout dernier moment pour un ultime test. Mais ça ne fonctionne pas non plus.
C'est ce qui avait avant et que j'ai modifié au tout dernier moment pour un ultime test. Mais ça ne fonctionne pas non plus.