Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1422 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  rechercher dans mySql

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

rechercher dans mySql

n°701429
nizouille
Posté le 16-04-2004 à 20:24:49  profilanswer
 

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]
mood
Publicité
Posté le 16-04-2004 à 20:24:49  profilanswer
 

n°701441
naceroth
Posté le 16-04-2004 à 20:46:05  profilanswer
 

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)

n°701443
nizouille
Posté le 16-04-2004 à 20:49:41  profilanswer
 

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]
n°701450
naceroth
Posté le 16-04-2004 à 21:00:24  profilanswer
 

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)

n°701456
nizouille
Posté le 16-04-2004 à 21:11:44  profilanswer
 

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]
n°701458
nizouille
Posté le 16-04-2004 à 21:13:03  profilanswer
 

[...] 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]
n°701461
nico168
Posté le 16-04-2004 à 21:23:57  profilanswer
 

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
n°701462
Profil sup​primé
Posté le 16-04-2004 à 21:25:54  answer
 

utilise des switch() a la place de tes if


Message édité par Profil supprimé le 16-04-2004 à 21:26:10
n°701463
naceroth
Posté le 16-04-2004 à 21:28:09  profilanswer
 

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)

n°701465
naceroth
Posté le 16-04-2004 à 21:34:26  profilanswer
 

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  

mood
Publicité
Posté le 16-04-2004 à 21:34:26  profilanswer
 

n°701500
BondJames1
Ah ... Bah ca va alors !
Posté le 16-04-2004 à 23:46:28  profilanswer
 

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à ;)

n°701546
Beegee
Posté le 17-04-2004 à 07:54:49  profilanswer
 

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 ...

n°701559
nizouille
Posté le 17-04-2004 à 10:19:34  profilanswer
 

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]
n°701837
naceroth
Posté le 17-04-2004 à 18:51:04  profilanswer
 

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)

n°701851
Beegee
Posté le 17-04-2004 à 19:27:08  profilanswer
 

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

n°701856
naceroth
Posté le 17-04-2004 à 19:37:18  profilanswer
 

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

n°701861
Beegee
Posté le 17-04-2004 à 19:47:44  profilanswer
 

bah oui :D

n°701896
nizouille
Posté le 17-04-2004 à 21:35:53  profilanswer
 

:( 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]
n°701902
naceroth
Posté le 17-04-2004 à 21:52:31  profilanswer
 

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

n°701903
nizouille
Posté le 17-04-2004 à 22:07:07  profilanswer
 

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]
n°701905
naceroth
Posté le 17-04-2004 à 22:11:18  profilanswer
 

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

n°701906
nizouille
Posté le 17-04-2004 à 22:11:53  profilanswer
 

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]
n°701915
naceroth
Posté le 17-04-2004 à 22:46:13  profilanswer
 

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

n°701916
nizouille
Posté le 17-04-2004 à 22:48:40  profilanswer
 

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]
n°701918
Yana
Posté le 17-04-2004 à 22:49:28  profilanswer
 

On connait pas les structures Case Switch ici :o

n°701920
nizouille
Posté le 17-04-2004 à 22:51:19  profilanswer
 

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]
n°701921
naceroth
Posté le 17-04-2004 à 22:52:35  profilanswer
 

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 ?)

n°701924
Master p
My new cock ring :D
Posté le 17-04-2004 à 22:58:04  profilanswer
 

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...

n°701925
Master p
My new cock ring :D
Posté le 17-04-2004 à 23:02:53  profilanswer
 

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]²)

n°701926
Beegee
Posté le 17-04-2004 à 23:03:49  profilanswer
 

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

n°701931
Master p
My new cock ring :D
Posté le 17-04-2004 à 23:17:24  profilanswer
 

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  

n°701932
Master p
My new cock ring :D
Posté le 17-04-2004 à 23:18:17  profilanswer
 

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
n°702029
Beegee
Posté le 18-04-2004 à 10:01:26  profilanswer
 

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";

n°702032
Master p
My new cock ring :D
Posté le 18-04-2004 à 10:12:08  profilanswer
 

Résultat:

toto
 
titi
 
tata

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  rechercher dans mySql

 

Sujets relatifs
[MySql] transactions via commit[MySql] Procédure de sauvegarde d'une BD
Timestamp MySQL. qqchose m'échappe[MySQL] Comment optimiser une requête pourtant simple ? [c'était moi]
Verifier une table MySQL ... Et les résultats ...Java - Connexion MySQL
[PHP-MySQL] fonction rechercher en PHP dans la base SQLrechercher tout ce qui contient ce champ ? Mysql
rechercher tous les noms qui commence par 'ant' ! Cherch synthax mysql[mysql]requete de type arbre (rechercher n-peres]
Plus de sujets relatifs à : rechercher dans mySql


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR