Liste alphabétique et appel à la base mysql

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Liste alphabétique et appel à la base mysql

par raptor » 05 mars 2007, 20:01

nan c'est que chu con en fait...
if (preg_match('/^[[:alnum:]]{1}$/',$_GET["lettre"])) {
   ton traitement avec affichage et tout....
} 

mal réveillé et tout tout à l'heure...

par winzip » 05 mars 2007, 18:06

J'ai "chippoté" un peu en rajoutant un ^ juste avant le ' dans le code, d'apres ce que j'ai lu sur google ce sont des délimiteurs non alpha-numérique qui doivent encadrer le début et la fin, c'est bien ça ?

par winzip » 05 mars 2007, 17:55

Voilà j'ai testé ( copy/coller de ton code )

Le message d'erreur est : Warning : preg_match()
[function.preg_match]:
No ending delimiter '^' found in list.php line..... :cry:

Help moi

par winzip » 05 mars 2007, 17:45

Je te remercie de ton aide raptor, j'apprécie !
Je teste ça dès que possible et pour l'erreur je t'afficherai les détails
Merci encore

par raptor » 05 mars 2007, 15:41

Elle dit quoi l'erreur ?

Pour ton code :
mysql_pconnect($serveur, $utilisateur , $motDePasse)
    or die("Impossible de se connecter au serveur de bases de données.");
 mysql_select_db($base)
    or die("Base de données non trouvée.");     

if (preg_match('^[[:alnum:]]{1}$',$_GET["lettre"])) {

$requete = mysql_query("SELECT * FROM tarifs WHERE PAYS LIKE '".$_GET['lettre']."%'order by PAYS asc");
if (mysql_num_rows($requete)>0) {
  while ($ligne = mysql_fetch_array($requete)) {
     print "<tr>
     <td>".$ligne["PAYS"]."</td>
     <td>".$ligne["PRIX"]."</td>
     </tr>"; 
  }
} else { echo "Aucun enregistrement trouv&eacute;"; }
}

}
mysql_close(); 

par winzip » 05 mars 2007, 15:35

J'ai enlevé le / mais j'ai toujours un message d'erreur mais ce n'est pas grave je n'utiliserai pas cette fonction pour le moment car je n'y comprend pas grand chose :oops:

Par contre comment afficher 'aucun enregistrement trouvé' quand on clique sur la lettre x ??? :wink:

par raptor » 05 mars 2007, 15:17

Erf oui, enleve le /, c'est une erreur de ma part.

par winzip » 05 mars 2007, 15:09

ok merci , par contre quand j'insère cette ligne :
if (preg_match('/^[[:alnum:]]{1}$',$_GET["lettre"])) {
ton traitement avec affichage et tout....
}
J'ai un message d'erreur : no ending delimiter '/' found in line...

Voici mon code :

Code : Tout sélectionner

mysql_pconnect($serveur, $utilisateur , $motDePasse) or die("Impossible de se connecter au serveur de bases de données."); mysql_select_db($base) or die("Base de données non trouvée."); if (preg_match('/^[[:alnum:]]{1}$',$_GET["lettre"])) { $requete = mysql_query("SELECT * FROM tarifs WHERE PAYS LIKE '".$_GET['lettre']."%'order by PAYS asc"); while ($ligne = mysql_fetch_array($requete)) { print "<tr> <td>".$ligne["PAYS"]."</td> <td>".$ligne["PRIX"]."</td> </tr>"; } } mysql_close(); ?>

Merci

par raptor » 05 mars 2007, 14:47

raptor je dois placer cette ligne ou dans mon fichier list.php ?
merci encore :D

P.S : j'ai lu quelque part : Je conseil de bien tester ce que tu vas recevoir dans $_GET['letter'] : un utilisateur malveillant pourrais mettre autre chose que A ou B ou C, ...

Qu'est ce ça veut dire ?
Ca veut dire qu'il pourrait envoyer des portions de requetes par la variable letter de l'url, et faire ce qu'on appelle une injection SQL.

Je te conseille de lire différentes infos la dessus que tu pourras trouver via google ;)

par raptor » 05 mars 2007, 14:46

Ou encore :
if (preg_match('/^[[:alnum:]]{1}$',$_GET["lettre"])) {
   ton traitement avec affichage et tout....
}

par winzip » 05 mars 2007, 14:43

raptor je dois placer cette ligne ou dans mon fichier list.php ?
merci encore :D

P.S : j'ai lu quelque part : Je conseil de bien tester ce que tu vas recevoir dans $_GET['letter'] : un utilisateur malveillant pourrais mettre autre chose que A ou B ou C, ...

Qu'est ce ça veut dire ?

par raptor » 05 mars 2007, 14:37

$_GET["lettre"] = preg_replace("`[^a-zA-Z0-9]`"," ",$_GET["lettre"]);
Tu supprimes ainsi tous les caractères non alpha numerique de ta chaine $_GET, au cas ou.

par winzip » 05 mars 2007, 14:32

Super merci pour votre aide précieuse, ça marche !!!! :D je suis trop content car vous m'avez bien aidé, je m'arrachais les cheveux :)

il est également conseillé de faire une vérification de $_GET["lettre"] avant d'effectuer la requete.
Par contre est ce que tu pourrais m'éclairer sur cette vérification car je ne vois vraiment pas ?

Merci encore

par raptor » 05 mars 2007, 14:26

Donne ton code et le message d'erreur

par winzip » 05 mars 2007, 14:06

Merci beaucoup pour vos réponses, vraiment je commençais à désespérer...
Je suis assez débutant et je ne capte pas tous ... Pour l'instant j'ai une page list.php :
$requete = mysql_query("SELECT * FROM liste WHERE Pays LIKE 'lettre%'"); // demande tous les pays commençant par la lettre
while ($ligne = mysql_fetch_array($requete)) {
   print "<tr>
   <td>".$ligne["Pays"]."</td>
   <td>".$ligne["Prix"]."</td>
   </tr>"; 
Qu'est ce que je dois modifier dans ce fichier list.php ??
J'ai bien ajouté la ligne comme vous m'avez dit :
"SELECT * FROM ta_table WHERE ton_champ LIKE '".$_GET['alp']."%'";
Mais j'ai un message d'erreur, après le LIKE je pense qu'il y a une erreur

Merci pour votre aide