rechercher dans mySql

rechercher dans mySql - PHP - Programmation

Marsh Posté le 16-04-2004 à 20:24:49    

http://membres.lycos.fr/enseignantbelge/recherche.htm
Je vous explique mon problème :  
 
J'ai un base de données Mysql qui fonctionne et dans laquelle les utilisateurs peuvent poster des documents et des données ...  
Le problème c que je n'arrive pas à écrire le script pour qu'ils puissent lire les données qui s'y trouvent ...  
 
J'ai déjà posté sur d'autres forums, mais personne n'a réussi à me répondre ... Je me tourne donc vers les spécialistes  :sol:  
 
Qqn pourrait-il m'avancer un bout de code pour m'aider ... Ce que j'ai fait sent le caca et personne n'a réussi à me le corriger.  :sweat:  
 
 :pt1cable:  :pt1cable:  
 
Quelqu'un pourrait-il m'aider ...  
 
 


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 16-04-2004 à 20:24:49   

Reply

Marsh Posté le 16-04-2004 à 20:46:05    

Sachant que les codes complets ne sont que rarement fournis (doux euphémisme :D), qu'est ce qui bloque plus exactement dans ton script ? (ou qu'est ce que tu as déjà fait :D)

Reply

Marsh Posté le 16-04-2004 à 20:49:41    

Merci d'y regarder, en sachant que je trouve ça foireux ne serait-ce que concernant le select (vu que c un select multiple et que j'écris elseif).
Par ailleurs, si vous me donniez un bout de réponse ne serait-ce que pour un des select, ça me donnerait déjà de quoi travailler un peu  
 
 
 
<?php
 
$db = mysql_connect("localhost","enseignantbelge","" ) or die (mysql_error());
mysql_select_db("enseignantbelge_db",$db) or die (mysql_error());
 
$search = $_GET['enseignement'];
 
if($search == general){
$se = general;
}elseif($search == technique){
$se = technique;
}
 
$search = $_GET['degre'];
if ($search == premier) {
$se1 = premier;
}
elseif ($search == deuxieme) {
$se1 = deuxieme;
}
elseif ($search == troisieme) {
$se1 = troisieme;
}
 
$search = $_GET['fiche'];
if ($search == fiche1) {
$se2 = fiche1;
}
elseif ($search == fiche2) {
$se2 = fiche2;
}
elseif ($search == fiche3) {
$se2 = fiche3;
}
elseif ($search == fiche4) {
$se2 = fiche4;
}
elseif($search == fiche5) {
$se2 = fiche5;
}
elseif($search == fiche6) {
$se2 = fiche6;
}
 
$req = mysql_query("SELECT * from uploads where 'enseignement'=$se AND 'degre'=$se1 AND 'fiche'=se2" );
 
 
echo '<table border="1" cellpadding="1" cellspacing="1" align="center">\n' ;
echo'<tr>
<td><div align="center">descriptif</div></td>
<td><div align="center">nom</div></td>
<td><div align="center">prenom</div></td>
<td><div align="center">enseignement</div></td>
<td><div align="center">degre</div></td>
<td><div align="center">fiche</div></td>
</tr>' ;
 
while( $result = mysql_fetch_array( $req ) )
{
echo'<tr>\n' ;
echo "<td><div align=\"center\">".$result["descriptif"]."</div></td>\n" ;
echo "<td><div align=\"center\">".$result["nom"]."</div></td>\n"  ;
echo "<td><div align=\"center\">".$result["prenom"]."</div></td>\n" ;
echo "<td><div align=\"center\">".$result["enseignement"]."</div></td>\n"  ;
echo "<td><div align=\"center\">".$result["degre"]."</div></td>\n"  ;
echo "<td><div align=\"center\">".$result["fiche"]."</div></td>\n"  ;
echo "</tr>\n"  ;
}
echo'</table><br>\n' ;
?>


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 16-04-2004 à 21:00:24    

Bon, bon, bon :)
 
Alors, tes affectations sont toutes fausses, tu veux affecter des chaines de caractères donc la valeur doit être entre " ou ' :)
 
Ensuite, te casse pas trop la tête, en voyant ton code mettre

Code :
  1. $se = $_GET['enseignement'];
  2. $se1 = $_GET['degre'];
  3. $se2 = $_GET['fiche'];


à la place de tout les if doit fonctionner aussi bien :)
 
et la requête s'écrit plutôt

Code :
  1. $req = mysql_query("SELECT * from uploads where enseignement='$se' AND degre='$se1' AND fiche='se2'" );


 
(avec les ' autour de la valeur des champs et pas autour du nom, sauf cas exceptionnels qui méritent souvent la pendaison :D)

Reply

Marsh Posté le 16-04-2004 à 21:11:44    

ouh la je comprends pas tout ... tu peux me la refaire ? :)
Je vais reprendre les choses dans le désordre :  
- pour la requête g bien compris ...  
- par contre le : "à la place de tout les if doit fonctionner aussi bien" me laisse perplexe ... Tu peux m'expliquer  
- tu veux dire que je dois changer tous mes  
if ($search == fiche1) {  
$se2 = fiche1;      
en  
if ($search == 'fiche1') {  
$se2 = 'fiche1'; ????


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 16-04-2004 à 21:13:03    

[...] J'ai validé trop vite :) Le dernier tiret concernant la première remarque "tu veux affecter des chaines de caractères donc la valeur doit être entre " ou '"


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 16-04-2004 à 21:23:57    

naceroth a écrit :

Bon, bon, bon :)
 
Ensuite, te casse pas trop la tête, en voyant ton code mettre

Code :
  1. $se = $_GET['enseignement'];
  2. $se1 = $_GET['degre'];
  3. $se2 = $_GET['fiche'];


à la place de tout les if doit fonctionner aussi bien :)
 
 


 
Perso, je prefere la methode de nizouille, qui est exprimé un peu maladroitement mais qui evite la possibilité a qqu'un de pouvoir injecter du code SQL dans la requete.
 
par exemple
si je surf sur qqchose comme page.php?search=toto'%20AND%20'1'='1
 
la requete deviendra alors
SELECT * from uploads where search='toto' AND '1'='1' AND degre='$se1' AND fiche='se2'
 
ca semble pas critique dans ton cas mais autant garder une bonne habitude :)
d'une maniere générale, il faut mieux éviter d'utiliser les entrées venant de l'exterieur directement dans les requetes SQL et conditions critiques, il vaut mieux passer par un tampon qui s'assure du contenu.
 

Code :
  1. $search = $_GET['enseignement'];
  2. $se='indéfini';
  3. if($search == 'general') $se = 'general';
  4. if($search == 'technique') $se = 'technique';


Message édité par nico168 le 16-04-2004 à 21:27:02
Reply

Marsh Posté le 16-04-2004 à 21:25:54    

utilise des switch() a la place de tes if


Message édité par Profil supprimé le 16-04-2004 à 21:26:10
Reply

Marsh Posté le 16-04-2004 à 21:28:09    

nizouille a écrit :


- par contre le : "à la place de tout les if doit fonctionner aussi bien" me laisse perplexe ... Tu peux m'expliquer  


 
Bien sûr. :)
 
On ne va prendre que le premier test, tu es d'accord qu'il pourrait s'écrire

Code :
  1. f($search == 'general'){
  2. $se = $search; // puisque $search vaut 'general'
  3. }elseif($search == 'technique'){
  4. $se = $search; // puisque $search vaut 'technique'
  5. }


 
Comme tu n'a pas un else seul qui traiterait les autres cas, on pourrait résumer ça en  

Code :
  1. $se = $search // puisque $search vaut soir 'general' soit 'technique'


 
Hors, $search = $_GET['enseignement'], on peut donc écrire  

Code :
  1. $se = $_GET['enseignement']


 
l'info c'est comme les maths, on simplife autant que possible :D

Citation :

- tu veux dire que je dois changer tous mes  
if ($search == fiche1) {  
$se2 = fiche1;      
en  
if ($search == 'fiche1') {  
$se2 = 'fiche1'; ????


 
Oui :)
fiche1 pour lui c'est une constante (qu'on définit avec l'instruction define)
'fiche1' c'est une chaine de caractère :)
 
(merci aux puristes de ne pas me dire "oui mais là ce sera pareil, je le sais, mais autant coder proprement dès le début)

Reply

Marsh Posté le 16-04-2004 à 21:34:26    

nico168 a écrit :


 
Perso, je prefere la methode de nizouille, qui est exprimé un peu maladroitement mais qui evite la possibilité a qqu'un de pouvoir injecter du code SQL dans la requete.


 
Oui oui, d'accord avec tout ça, tu remarqueras que je n'ai pas non plus envisager la possibilité que $_GET ne soit pas défini, que je ne traitais pas les données du form etc etc etc  ;)
 
Je savais qu'un puriste me tomberait dessus, ils sont vraiment partout :D  

Reply

Marsh Posté le 16-04-2004 à 21:34:26   

Reply

Marsh Posté le 16-04-2004 à 23:46:28    

Pour la requète SQL:
 

Code :
  1. $req = mysql_query("SELECT * FROM `uploads` WHERE `enseignement`='$se' AND `degre`='$se1' AND `fiche`='se2'" );


Voilà, met en majuscules ce qui n'est pasd des données ou des tables ;-) et met le nom des tables/colonnes entre `et non entre guillement ! Les guillements c'est pour les données.
Voilà ;)

Reply

Marsh Posté le 17-04-2004 à 07:54:49    

c'est quoi l'intérêt des backquote (`) et quote (') dans une requête SQL ?
 
je les utilise jamais, le $ suffit pour voir de quoi on parle ...

Reply

Marsh Posté le 17-04-2004 à 10:19:34    

et pourn le select multiple de 'fiche', il doit qd même y avoir une autre solution que des elseIf ... vu que j'aimerais que l'utilisateur puisse tout sélectionner ou une, ou quatre ...  
Je vais réecrire tout ça en tenant compte des remarques (en essayant) et je poste ça ce soir ... Vous me corrigerez ? :)
Merci


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 17-04-2004 à 18:51:04    

Beegee a écrit :

c'est quoi l'intérêt des backquote (`) et quote (') dans une requête SQL ?


 
C'est pour ceux qui cherchent les problèmes en donnant aux champs ou aux tables de noms réservés (comme date par exemple)

Reply

Marsh Posté le 17-04-2004 à 19:27:08    

je vois :D
 
donc ça me servira pas ;)

Reply

Marsh Posté le 17-04-2004 à 19:37:18    

Enfin, les backquotes hein, les quotes normales indiques que le champs contient du texte :D

Reply

Marsh Posté le 17-04-2004 à 19:47:44    

bah oui :D

Reply

Marsh Posté le 17-04-2004 à 21:35:53    

:( Aaaaaaaaaaaaarrhgh
 
IL me semble avoir tenu compte de vos remarques ...  
Bon voici mon code renouvelé :  
 
<?php  
 
$db = mysql_connect("localhost","enseignantbelge","" ) or die (mysql_error());  
mysql_select_db("enseignantbelge_db",$db) or die (mysql_error());  
 
 $search = $_GET['enseignement'];  
  $se='indéfini';  
  if($search == 'general') $se = 'general';  
    if($search == 'technique') $se = 'technique';  
       
 
 $search = $_GET['degre'];  
  $se1='indéfini';  
  if($search == 'premier') $se1 = 'premier';  
    if($search == 'deuxieme') $se1 = 'deuxieme';  
      if($search == 'troisieme') $se1 = 'troisieme';  
 
 $search = $_GET['fiche'];  
  $se2='indéfini';  
  if($search == 'fiche1') $se1 = 'fiche1';  
    if($search == 'fiche2') $se1 = 'fiche2';  
      if($search == 'fiche3') $se1 = 'fiche3';  
  if($search == 'fiche4') $se1 = 'fiche4';
  if($search == 'fiche5') $se1 = 'fiche5';
   if($search == 'fiche6') $se1 = 'fiche6';
 
$req = mysql_query("SELECT * from uploads where enseignement='$se' AND degre='$se1' AND fiche='se2'" );  
 
 
echo '<table border="1" cellpadding="1" cellspacing="1" align="center">\n' ;  
echo'<tr>  
<td><div align="center">descriptif</div></td>  
<td><div align="center">nom</div></td>  
<td><div align="center">prenom</div></td>  
<td><div align="center">enseignement</div></td>  
<td><div align="center">degre</div></td>  
<td><div align="center">fiche</div></td>  
</tr>' ;  
 
while( $result = mysql_fetch_array( $req ) )  
{  
echo'<tr>\n' ;  
echo "<td><div align=\"center\">".$result["descriptif"]."</div></td>\n" ;  
echo "<td><div align=\"center\">".$result["nom"]."</div></td>\n"  ;  
echo "<td><div align=\"center\">".$result["prenom"]."</div></td>\n" ;  
echo "<td><div align=\"center\">".$result["enseignement"]."</div></td>\n"  ;  
echo "<td><div align=\"center\">".$result["degre"]."</div></td>\n"  ;  
echo "<td><div align=\"center\">".$result["fiche"]."</div></td>\n"  ;  
echo "</tr>\n"  ;  
}  
echo'</table><br>\n' ;  
?>  
 
Voici  mon formulaire de recherche (on sait jamais que ça vienne de là ... :  
 
 
<html>
<head>
<title>choix du fichier à envoyer</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
 
<body>
<form method="post" action="search.php">  
  <tr>  
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;</td>
  </tr>
  <tr>  
    <td align="center"> <p align="center">&nbsp;</p>
      <p align="center"><strong>Afficher les s&eacute;quences </strong></p>
      <table width="50%" border="0" cellspacing="0" cellpadding="0">
        <tr>  
          <td width="57%">pour un enseignement de type</td>
          <td width="43%"><select name="enseignement">
              <option value="general">Général / Transition</option>
              <option value="technique">Technique / Professionnel</option>
            </select></td>
        </tr>
        <tr>  
          <td>&agrave; des &eacute;l&egrave;ves du </td>
          <td><select name="degre">
              <option value="premier">Premier degré</option>
              <option value="deuxieme">Deuxième degré</option>
              <option value="troisieme">Troisième degré</option>
            </select></td>
        </tr>
        <tr>  
          <td>et d&eacute;veloppant les comp&eacute;tences de la </td>
          <td><select name="fiche">
              <option value="fiche1">fiche 1</option>
              <option value="fiche2">fiche 2</option>
              <option value="fiche3">fiche 3</option>
              <option value="fiche4">fiche 4</option>
              <option value="fiche5">fiche 5</option>
              <option value="fiche6">fiche 6</option>
            </select></td>
        </tr>
   
        <tr>  
          <td colspan="2"><div align="center">
              <input type="submit" name="recherche" value="Rechercher dans la base de donn&eacute;es">
            </div></td>
        </tr>
      </table>
      <p align="right">&nbsp;</p></td>
    <td align="center"><p align="center">&nbsp;
    <td align="center">&nbsp;</td>
    <td align="center">&nbsp;
    <td align="center"><p align="center"><br>
      </p>
      </td>
    <td align="center">&nbsp;</td>
  </tr>
  <div align="left"></div>
</form>
<p>&nbsp;</p></body>
</html>
 
 
 
Que faire (j'ai résolu la question du select multiple en ne la posant plus :), pcq apparemment ça complique la donne ... ). Allez voir le résultat sur la page web (voir lien sur le premier post), ça aidera peut-être ... snif snif  
 
je comprends pooo  :heink:  :fou:  


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 17-04-2004 à 21:52:31    

Ben déjà, ton formulaire balance les données en POST, ton script recherche du GET, ça va pas le faire :)

Reply

Marsh Posté le 17-04-2004 à 22:07:07    

Arg l'erreur grosse comme un camion :)
je dois donc bien mettre mon formulaire en get  


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 17-04-2004 à 22:11:18    

Soit tu mets ton formulaire en get soit le script en post, au choix :)

Reply

Marsh Posté le 17-04-2004 à 22:11:53    

je viens de changer mais que nenni ...  
C pas possible quoi ...  
C donc à ce point difficile de récupérer des données sur mysql ?? Je décourage .... snif snif ..


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 17-04-2004 à 22:46:13    

Non, c'est pas plus dur sous mysql que sous un autre sgbd.
 
Tu es certain que la requête renvoie un résultat ?

Reply

Marsh Posté le 17-04-2004 à 22:48:40    

la requête me renvoie ça :  
\n descriptif nom prenom enseignement degre fiche  
 
\n


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 17-04-2004 à 22:49:28    

On connait pas les structures Case Switch ici :o

Reply

Marsh Posté le 17-04-2004 à 22:51:19    

tu peux expliquer ... (avec des exemples concrets ? )
 
PS C'est super sympa à vous de m'aider ...


---------------
ressources pédagogiques et préparations de cours pour l'enseignement - Actualité de l'enseignement - [url=http://www.enseignons.be/forum/index.php]
Reply

Marsh Posté le 17-04-2004 à 22:52:35    

nizouille a écrit :

la requête me renvoie ça :  
descriptif nom prenom enseignement degre fiche  


 
Non, ça c'est que php te renvoie, je te demande si mysql renvoit des résultats (donc est ce qu'en exécutant une requête sous phpmyadmin tu as un résultat ?)

Reply

Marsh Posté le 17-04-2004 à 22:58:04    

1/ pour faire un saut à la ligne dans un echo, il faut fermer l'apostrophe et concatener avec "\n"
2/ T'as pris le temps de remplir ta base au moins? [:ddr555]
3/euh...

Reply

Marsh Posté le 17-04-2004 à 23:02:53    

En tous cas, si t'as rempli ta base, soit elle a une sale gueule, soit elle est pas adapté à ton code et ça marchera pas ([:ddr555]²)

Reply

Marsh Posté le 17-04-2004 à 23:03:49    

Master p a écrit :

1/ pour faire un saut à la ligne dans un echo, il faut fermer l'apostrophe et concatener avec "\n"


 
apparemment non, je passe tout le temps à la ligne sans le faire et ça marche :D

Reply

Marsh Posté le 17-04-2004 à 23:17:24    

je serais toi, j'agirais directement sur le SELECT de l'appel
par exemple:


$select ="SELECT * from uploads where enseigement="'.$_POST['enseignement']."' AND degre='".$_POST['degre']."' AND fiche='".$_POST['degre']."'";
$req = mysql_query("$select" );  


1/ Explique moi c'est quoi ton problème avec les $_POST :
Dans tes variables $_GET, c'est le vide, puisque tout est dans $_POST
(cf doc php), donc forcément pas de reponse qui correspond à ta recherche (qui est vide)
2/ Rajoute des cas où on peut ne pas choisir une des options par exemple, je t'ai maché le travail...
3/ Fais chier, j'ai pas envie de travailler
4/ Boycottons les case switch (c tous des payday)
5/ T'as codé comme un porc  :D  

Reply

Marsh Posté le 17-04-2004 à 23:18:17    

Beegee a écrit :


 
apparemment non, je passe tout le temps à la ligne sans le faire et ça marche :D

???
 
edit : Dans le cas où tu utilises des ' dans ces echo
et puis d'abord toi t'es pas nizouille


Message édité par Master p le 17-04-2004 à 23:20:50
Reply

Marsh Posté le 18-04-2004 à 10:01:26    

lol en fait j'avais pas compris ta phrase comme il faut ... je croyais que tu précisais qu'il faut fermer les quote ou guillemets avant de passer à la ligne dans un echo ;)
 
Ca, ça marche, non ?  
 

Code :
  1. echo "toto\n
  2.       titi\n
  3.       tata";

Reply

Marsh Posté le 18-04-2004 à 10:12:08    

Résultat:

toto
 
titi
 
tata

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed