rechercher dans mySql - PHP - Programmation
Marsh Posté le 16-04-2004 à 20:46:05
Sachant que les codes complets ne sont que rarement fournis (doux euphémisme ), qu'est ce qui bloque plus exactement dans ton script ? (ou qu'est ce que tu as déjà fait )
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' ;
?>
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 :
|
à la place de tout les if doit fonctionner aussi bien
et la requête s'écrit plutôt
Code :
|
(avec les ' autour de la valeur des champs et pas autour du nom, sauf cas exceptionnels qui méritent souvent la pendaison )
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'; ????
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 '"
Marsh Posté le 16-04-2004 à 21:23:57
naceroth a écrit : Bon, bon, bon
|
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 :
|
Marsh Posté le 16-04-2004 à 21:25:54
utilise des switch() a la place de tes if
Marsh Posté le 16-04-2004 à 21:28:09
nizouille a écrit : |
Bien sûr.
On ne va prendre que le premier test, tu es d'accord qu'il pourrait s'écrire
Code :
|
Comme tu n'a pas un else seul qui traiterait les autres cas, on pourrait résumer ça en
Code :
|
Hors, $search = $_GET['enseignement'], on peut donc écrire
Code :
|
l'info c'est comme les maths, on simplife autant que possible
Citation : - tu veux dire que je dois changer tous mes |
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)
Marsh Posté le 16-04-2004 à 21:34:26
nico168 a écrit : |
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
Marsh Posté le 16-04-2004 à 23:46:28
Pour la requète SQL:
Code :
|
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à
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 ...
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
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)
Marsh Posté le 17-04-2004 à 19:37:18
Enfin, les backquotes hein, les quotes normales indiques que le champs contient du texte
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"> </td>
<td align="center"> </td>
</tr>
<tr>
<td align="center"> <p align="center"> </p>
<p align="center"><strong>Afficher les sé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>à des élè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éveloppant les compé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ées">
</div></td>
</tr>
</table>
<p align="right"> </p></td>
<td align="center"><p align="center">
<td align="center"> </td>
<td align="center">
<td align="center"><p align="center"><br>
</p>
</td>
<td align="center"> </td>
</tr>
<div align="left"></div>
</form>
<p> </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
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
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
Marsh Posté le 17-04-2004 à 22:11:18
Soit tu mets ton formulaire en get soit le script en post, au choix
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 ..
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 ?
Marsh Posté le 17-04-2004 à 22:48:40
la requête me renvoie ça :
\n descriptif nom prenom enseignement degre fiche
\n
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 ...
Marsh Posté le 17-04-2004 à 22:52:35
nizouille a écrit : la requête me renvoie ça : |
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 ?)
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?
3/euh...
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 (²)
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
Marsh Posté le 17-04-2004 à 23:17:24
je serais toi, j'agirais directement sur le SELECT de l'appel
par exemple:
|
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
Marsh Posté le 17-04-2004 à 23:18:17
Beegee a écrit : |
???
edit : Dans le cas où tu utilises des ' dans ces echo
et puis d'abord toi t'es pas nizouille
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 :
|
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
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.
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]