Besoin d'aide pour un tout petit système pour un trombinoscope

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 : Besoin d'aide pour un tout petit système pour un trombinoscope

par Ryle » 05 mars 2008, 02:03

Un petit complément extrait des bonnes pratiques SQL disponible dans toutes les bonnes FAQ de phpfrance ;)
* Eviter le " SELECT * " :
Précisez le nom des champs que vous souhaitez récupérer pour éviter les risques d'erreur (lorsqu'un même nom se trouve dans plusieurs table), avoir des requêtes plus optimisées et un code php facilement maintenable.

Lister les champs en détail permet d'une part de ne récupérer que ce qui est nécessaire (inutile de ramener 12 champs mediumtext de 500Ko quand tout ce qui nous interesse c'est un id et un titre). De plus, le nombre de colonnes et l'ordre des champs pouvant avoir un impact sur le traitement qui va suivre (si l'on utilise mysql_fetch_row() par exemple), il est préférable de pouvoir les maîtriser.
Cela permet aussi de connaître les noms des colonnes retournés par la requête, et donc le noms des index utilisables.

par iclo » 05 mars 2008, 01:40

Salut,

Une raison de préférer lister les champs à récupérer, à la place de l'étoile, c'est d'éviter de rapatrier tous les champs d'une table, si l'on ne doit en utiliser que quelques un. Inutile de faire pédaler le serveur pour rien
C'est encore plus vrai dans le cas d'une requête sur plusieurs tables, où le nombre de champ explose.

par crash » 05 mars 2008, 01:01

pjl : Je ne vois pas en quoi gêne le SELECT * si il y a une 50 aines de champ utilisable, je ne vais pas m'amuser à tous les déclarer en inscrivant le nom de tous les champs dans la requête :?

En outre je ne pense pas que le SELECT * ai un trou de sécurité car tout le monde l'emploie d'après ce que j'ai "pu" voir.

En tout cas si tu as une information concernant un soucis avec le SELECT * je me coucherais moins "con" :-)

par pjl » 05 mars 2008, 00:39

Une remarque : évite le SELECT *
Dans ta requête, prend l'habitude de préciser les champs dont tu as réellement besoin :

Code : Tout sélectionner

SELECT champ1, champ3, champ4 FROM............

par crash » 04 mars 2008, 22:30

Lol Ryle pas mal l'humour :) c'est vrai que c'est assez simple en fait.

J'ai finalement réussis à faire ce que je souhaite grâce à votre aide et je vous en remercie voici donc la requête :
"SELECT * FROM membres WHERE pseudo LIKE '".$_GET['lettre']."%'"
Tout fonctionne parfaitement bien.

Cordialement.

par Ryle » 04 mars 2008, 21:40

Bah euh... t'y étais, mais là t'as visiblement préféré prendre le petit chemin plein de ronces à travers la forêt que l'autoroute qui s'étendait devant toi :)

Le SQL c'est pas dur, tu l'écris presque comme tu le parles :

"SELECT * FROM membres WHERE `pseudo`='".$_GET['lettre']."'"
<=>
Selectionne tout les champs de la table membres pour lesquels la colonne pseudo est égale à la valeur contenue dans $_GET['lettre'].

Or toi, ce que tu veux c'est :

Selectionne tout les champs de la table membres pour lesquels la colonne pseudo ressemble à la valeur contenue dans $_GET['lettre'], suivit de n'importe quoi.

Avec ça et nos explications précédentes, tu devrais pouvoir rattraper la départementale qui te ramenera sur la bonne route :)

par crash » 04 mars 2008, 20:56

merci de vos réponses j'ai tester celà :
"SELECT * FROM membres WHERE `pseudo`='".$_GET['lettre']."'"
ça n'a rien donner d'autre ...

je suis sur la bonne voie ou pas ? car là franchement c'est étrange ...

merci.

par Ryle » 04 mars 2008, 18:34

Déjà faut comprendre comment fonctionne le LIKE. La commande LIKE en SQL permet de rechercher une chaine dont on ne connait qu'une partie seulement. Afin d'identifier les parties inconnues, on utilise le caractère "%" (et pas l'étoile :x)

Ainsi LIKE 'T%' recherche toutes les chaines commençant par un 'T' et suivie de n'importe quoi.
De même '%T' recherchera les chaines commençant par n'importe quoi et se terminant pas 'T'.
Enfin '%T%' recherchera toutes les chaines contenant un 'T'

Maintenant et avec les conseils de d0m sur la façon d'introduire une variable dans ta requête, tu devrais parvenir assez facilement à la modifier de telle sorte qu'elle ne cherche pas ce qui commence par T, mais bien ce qui commence par la lettre spécifiée dans l'url ;)

Re: Besoin d'aide pour un tout petit système pour un trombin

par Bad_trips » 04 mars 2008, 18:11

SELECT * FROM membres WHERE pseudo LIKE 'T%'
Moi je crois qu'il faudrait modifier le like non ?
-->SELECT * FROM membres WHERE pseudo LIKE '*T*'

Biensur il faut adapter pour récupérer avec GET mais ça me semble pas trop mal.

par crash » 04 mars 2008, 17:42

Heu ...
"SELECT * FROM membres WHERE pseudo LIKE '".$_GET['lettre']."'"
Ou même POST ça ne fonctionne pas ... j'ai pas bien compris, tu peux me donner un exemple stp
?

Merci.

par d0m » 04 mars 2008, 17:21

Salut,

Premièrement, tu passes la lettre dans l'url de la page donc par méthode GET.
Tu pourras donc récupérer cette lettre à travers la variable $_GET['lettre']

Il suffit ensuite d'utiliser cette variable dans ta requête à la place de la lettre T.

Besoin d'aide pour un tout petit système pour un trombinosco

par crash » 04 mars 2008, 17:09

Bonjour,

je fais appel à vous concernant un petit soucis :
<?php
mysql_connect("********","******","*****");
mysql_select_db("trombi");
if(empty($_GET['lettre']))
{
echo "<table border=\"0\" cellspacing=\"2\" width=100%>";
echo "<tr><td style=\"text-align:center;\"><strong>Liste des fiches membres par lettre</strong></td></tr>";
echo "<tr><td><a href=\"index.php?page=fiche&lettre=#\">#</a> -";
echo "<a href=\"index.php?page=fiche&lettre=a\">A</a> -";
echo "<a href=\"index.php?page=fiche&lettre=b\">B</a> -";

echo "<a href=\"index.php?page=fiche&lettre=c\">C</a> -";
echo "<a href=\"index.php?page=fiche&lettre=d\">D</a> -";
echo "<a href=\"index.php?page=fiche&lettre=e\">E</a> -";
echo "<a href=\"index.php?page=fiche&lettre=f\">F</a> -";
echo "<a href=\"index.php?page=fiche&lettre=g\">G</a> -";
echo "<a href=\"index.php?page=fiche&lettre=h\">H</a> -";

echo "<a href=\"index.php?page=fiche&lettre=i\">I</a> -";
echo "<a href=\"index.php?page=fiche&lettre=j\">J</a> -";
echo "<a href=\"index.php?page=fiche&lettre=k\">K</a> -";
echo "<a href=\"index.php?page=fiche&lettre=l\">L</a> -";
echo "<a href=\"index.php?page=fiche&lettre=m\">M</a> <br>";
echo "<a href=\"index.php?page=fiche&lettre=n\">N</a> -";

echo "<a href=\"index.php?page=fiche&lettre=o\">O</a> -";
echo "<a href=\"index.php?page=fiche&lettre=p\">P</a> -";
echo "<a href=\"index.php?page=fiche&lettre=q\">Q</a> -";
echo "<a href=\"index.php?page=fiche&lettre=r\">R</a> -";
echo "<a href=\"index.php?page=fiche&lettre=s\">S</a> -";
echo "<a href=\"index.php?page=fiche&lettre=t\">T</a> -";

echo "<a href=\"index.php?page=fiche&lettre=u\">U</a> -";
echo "<a href=\"index.php?page=fiche&lettre=v\">V</a> -";
echo "<a href=\"index.php?page=fiche&lettre=w\">W</a> -";
echo "<a href=\"index.php?page=fiche&lettre=x\">X</a> -";
echo "<a href=\"index.php?page=fiche&lettre=y\">Y</a> -";
echo "<a href=\"index.php?page=fiche&lettre=z\">Z</a> -";
echo "</td></tr>";
echo "</table>";
}else {
echo "<table border=\"0\" cellspacing=\"2\" width=100%>";
$reponse =mysql_query("SELECT * FROM membres WHERE pseudo LIKE 'T%'") or die (mysql_error());
$val = mysql_fetch_array($reponse);
echo "<tr><td>Pseudo</td>";
echo "<td>".$val['pseudo']."</td>";
echo "</tr></table>";
}
?>
J'aurais pu optimiser le code afin de ne pas mettre plein d'echo mais le but n'est pas là ..

Enfait mon code fonctionne très bien mais ça m'affiche que les pseudos commençant par la lettre T logique :
SELECT * FROM membres WHERE pseudo LIKE 'T%'
Enfait j'aimerais modifier la requête afin qu'à chaque liens cliquer que ça affiche les pseudos en rapport avec la lettre.

Peut être qu'il y a autre chose que la requête à modifier, enfin j'aimerais bien être éclairer sur ce point là s'il vous plait.

En vous remerciant d'avance.

Bien Cordialement.