prob de classement de champ

prob de classement de champ - SQL/NoSQL - Programmation

Marsh Posté le 07-09-2006 à 13:21:24    

Bon, je me décide enfin à faire appel à vous !
Voilou mon problème :
 
J'ai une BDD qui s'appelle "mediatheque"
Avec des champs : titre, auteur, editeur , etc
 
J'ai créé une 1ère page contenant ce script avec un menu déroulant:
 
<form method="post" action="mediatheque1.php"> (médiatheque 1 étant la cible)
<p>Classer par
<select name="choix">
  <option value="choix1">Titre</option>
    <option value="choix2">Thème</option>
    <option value="choix3">Auteur</option>
    <option value="choix5">Support</option>
    <option value="choix6">Editeur</option>
    <option value="choix7">Année</option>
</select>
<input type="submit" value="Valider" />
</p>  
</form>
 
jusque là tout va bien  :)  
 
Ce que je voudrais, c'est qu'à partir de mon menu déroulant le visiteur puisse choisir le classement alphabétique par titre, auteur , etc ;)  
J'ai essayé plein de script différent à base de if/else et de switch mais rien ne marche
 
page mediatheque1 :
 
<?php
$choix = $_POST['choix'];
{
echo $choix;
}
?>
 :)  pour transmettre et vérifier le transfère (jusque là ça marche)
 
if ($choix == "choix1" )
<?php
mysql_connect("URL", "Login", "pwd" );
mysql_select_db("login" );
$reponse = mysql_query("SELECT * FROM mediatheque ORDER BY titre" );
while ($donnees = mysql_fetch_array ($reponse));
?>
{
echo $donnees['titre'];
echo $donnees['auteur'];
echo $donnees['theme'];
echo $donnees['editeur'];
echo $donnees['annee'];
}
<?php
mysql_close();
?>
 
elseif ($choix == "choix2" )
<?php
mysql_connect("URL", "Login", "pwd" );
mysql_select_db("Login" );
$reponse = mysql_query("SELECT * FROM mediatheque ORDER BY auteur" );
while ($donnees = mysql_fetch_array ($reponse));
?>
{
echo $donnees['titre'];
echo $donnees['auteur'];
echo $donnees['theme'];
echo $donnees['editeur'];
echo $donnees['annee'];
}
<?php
mysql_close();
?>
 
etc, jusqu'à la fin des choix  :)  
ceci est un des nombreux scripts que j'ai testé et qui bien évidement ne fonctionne pas :(  
Il y a certainement des choses qui vont vous sauter aux yeux et vous horrifier
Mais là je sèche
 
Par avance merci
 
 
 

Reply

Marsh Posté le 07-09-2006 à 13:21:24   

Reply

Marsh Posté le 07-09-2006 à 13:56:52    

Bon, là, deja, y a un truc qui me choque :D  
while ($donnees = mysql_fetch_array ($reponse));  
?>  
{  
echo $donnees['titre'];  
echo $donnees['auteur'];  
echo $donnees['theme'];  
echo $donnees['editeur'];  
echo $donnees['annee'];  
}

<?php  
mysql_close();  
?>
Pourquoi tu sors de la section PHP alors que tu fais des appels à une fonction PHP ? C'est toujours du code [:proy]
 
 
Il y a autre chose qui pose problème : le ";" à la fin de la ligne du while. Ca marque la fin de l'instruction donc, le bloc entre {} qui suit n'est pas rattaché au while(). En fait, PHP exécute d'abord while ($donnees = mysql_fetch_array ($reponse));, c'est à dire qu'il lit tous les enregistrements sans rien en faire. Et ensuite seulement il rentre (une seule fois, donc) dans le bloc entre {} :pt1cable:


Message édité par mrbebert le 07-09-2006 à 14:25:31
Reply

Marsh Posté le 07-09-2006 à 14:22:13    

Sinon, pour la réception, je verrais plutôt une organisation un peu différente. A part l'ordre de tri, le traitement est le même. Donc, c'est dommage d'avoir plein de lignes de code qui, en fait, font la même chose.

<?php  
 
$choix = $_POST['choix'];  
 
# peut être une petite vérif du paramètre ici
 
 
# connexion
mysql_connect("URL", "Login", "pwd" );  
mysql_select_db("login" );  
 
 
# construction de la requete
$req = "SELECT * FROM mediatheque";
if ($choix == "choix1" ) {
  $req .= " ORDER BY titre ASC";
} elseif ($choix == "choix2" ) {
  $req .= " ORDER BY auteur ASC";
}
# ici, un "case" serait mieux, mais je connais plus la syntaxe
 
 
# execution de la requete et verification
$query = mysql_query($req);
if (! $query) { # erreur d'execution
  die("fouyaya, ca a plante ! : " . mysql_error());
}
 
 
# parcours des enregistrement
# la, va falloir faire un peu de mise en page ...
while ($donnees = mysql_fetch_array ($reponse)) {  
  echo $donnees['titre'];
  echo $donnees['auteur'];
  echo $donnees['theme'];
  echo $donnees['editeur'];
  echo $donnees['annee'];
}  
 
 
# fini
mysql_close();
?>

Reply

Marsh Posté le 07-09-2006 à 19:41:00    

Effectivement ton script est plus simple :)  
je me suis empressé de le tester en rentrant du TAF
Ce qui donne au final ça :
 
<?php
$choix = $_POST['choix'];
{
echo $choix;
}
?>
 
<?php  
$choix = $_POST['choix'];  
mysql_connect("URL", "LOGIN", "PWD" );  
mysql_select_db("LOGIN" );  
 
$req = "SELECT * FROM mediatheque";  
 
if ($choix == "choix1" )
{  
  $req .= " ORDER BY titre ASC";  
}  
 
elseif ($choix == "choix2" )  
{  
  $req .= " ORDER BY auteur ASC";  
}  
 
elseif ($choix == "choix3" )  
{  
  $req .= " ORDER BY theme ASC";  
}  
 
elseif ($choix == "choix4" )  
{  
  $req .= " ORDER BY editeur ASC";  
}  
 
elseif ($choix == "choix5" )  
{  
  $req .= " ORDER BY annee ASC";  
}  
 
$query = mysql_query($req);  
 
if (! $query) { # erreur d'execution  
  die("fouyaya, ca a plante ! : " . mysql_error());  
}  
 
while ($donnees = mysql_fetch_array ($reponse)) {  
  echo $donnees['titre'];  
  echo $donnees['auteur'];  
  echo $donnees['theme'];  
  echo $donnees['editeur'];  
  echo $donnees['annee'];  
}  
 
mysql_close();  
?>
 
Bon c'est vrai j'avoue je ne me suis pas foulé, j'ai juste recopié pour tester, je sais, j'ai honte :ange:  
 
Par contre il m'affiche : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/105/ blablabla............ :??:  
Sur la ligne en gras dans le script
 
J'ai essayé en faisant plusieurs modifications mais pas mieux  :(  
 

Reply

Marsh Posté le 07-09-2006 à 19:56:46    

$query = mysql_query($req);  
...
 while ($donnees = mysql_fetch_array ($reponse)) {
 
forcément :o


Message édité par mrbebert le 07-09-2006 à 19:56:57
Reply

Marsh Posté le 07-09-2006 à 21:20:42    

pfffffff............... :pfff:  
effectivement
Bon ça ne marche pas mieux :??: , j'essaye avec switch

Reply

Marsh Posté le 07-09-2006 à 21:29:30    

Bon voici le script avec switch :
 
<?php
$choix = $_POST['choix'];
{
echo $choix;
}
?>
 
<?php  
$choix = $_POST['choix'];  
mysql_connect("URL", "Login", "pwd" );  
mysql_select_db("login" );  
 
$req = "SELECT * FROM mediatheque";  
 
switch ($note) {
 
case choix1:
$req .= " ORDER BY titre ASC";
break;
 
case choix2:
$req .= " ORDER BY auteur ASC";  
break;
 
case choix3:
$req .= " ORDER BY theme ASC";  
break;
 
case choix4:
$req .= " ORDER BY editeur ASC";
break;
 
case choix5:
$req .= " ORDER BY annee ASC";
break;
}
 
while ($donnees = mysql_fetch_array ($reponse)) { :heink:  
  echo $donnees['titre'];  
  echo $donnees['auteur'];  
  echo $donnees['theme'];  
  echo $donnees['editeur'];  
  echo $donnees['annee'];  
}  
 
mysql_close();  
?>
 
Et toujours ce :
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /mnt/105/blablabla ........
Toujours sur la même ligne  :heink:  
 
au fait ! excellent ce : $req .= " ORDER BY titre ASC";  :love:  
 

Reply

Marsh Posté le 07-09-2006 à 22:18:19    

- il sort d'où le "$note" (dans le switch) :??:  
- elle est exécutée où, au juste, la requête ? :whistle:

Reply

Marsh Posté le 07-09-2006 à 22:19:56    

ouaips y a pas de mysql_query

Reply

Marsh Posté le 07-09-2006 à 23:10:48    

désolé pour le $note
 
Ok j'avoue !!! vous m'avez démasqué ! Je suis un débutant ! :jap:  
Il y a 1mois  je ne savais même pas taper une ligne de PHP   :)  
 
bon maintenant je sais que je tourne autour de la bonne réponse (enfin j'imagine)
 
<?php
$choix = $_POST['choix'];
{
echo $choix;
}
?>
 
 
<?php
$choix = $_POST['choix'];
{
echo $choix;
}
?>
 
<?php  
$choix = $_POST['choix'];  
mysql_connect("URL", "Login", "pwd" );  
mysql_select_db("login" );
 
$req = "SELECT * FROM mediatheque";  
 
switch ($choix) {
 
case choix1:
$req .= " ORDER BY titre ASC";
$query = mysql_query($req);
while ($donnees = mysql_fetch_array ($reponse)) {
  echo $donnees['titre'];  
  echo $donnees['auteur'];  
  echo $donnees['theme'];  
  echo $donnees['editeur'];  
  echo $donnees['annee'];  
}  
break;
 
case choix2:
$req .= " ORDER BY auteur ASC";  
$query = mysql_query($req);
while ($donnees = mysql_fetch_array ($reponse)) {
  echo $donnees['titre'];  
  echo $donnees['auteur'];  
  echo $donnees['theme'];  
  echo $donnees['editeur'];  
  echo $donnees['annee'];  
}  
break;
 
case choix3:
$req .= " ORDER BY theme ASC";  
$query = mysql_query($req);
while ($donnees = mysql_fetch_array ($reponse)) {
  echo $donnees['titre'];  
  echo $donnees['auteur'];  
  echo $donnees['theme'];  
  echo $donnees['editeur'];  
  echo $donnees['annee'];  
}  
break;
 
case choix4:
$req .= " ORDER BY editeur ASC";
$query = mysql_query($req);
while ($donnees = mysql_fetch_array ($reponse)) {
  echo $donnees['titre'];  
  echo $donnees['auteur'];  
  echo $donnees['theme'];  
  echo $donnees['editeur'];  
  echo $donnees['annee'];  
}  
break;
 
case choix5:
$req .= " ORDER BY annee ASC";
$query = mysql_query($req);
while ($donnees = mysql_fetch_array ($reponse)) {
  echo $donnees['titre'];  
  echo $donnees['auteur'];  
  echo $donnees['theme'];  
  echo $donnees['editeur'];  
  echo $donnees['annee'];  
}  
break;
 
}
 
mysql_close();  
?>
 
 
Pitié ! dites moi que je brûle  :(  
Je sais qu'il y a des truc qui ne colle pas (vu que ça ne marche pas)
je vois bien que mon $reponse bug, mais je sèche

Reply

Marsh Posté le 07-09-2006 à 23:10:48   

Reply

Marsh Posté le 07-09-2006 à 23:27:49    

non, là, tu refroidis :D  
 
Pourquoi tu remets des exécutions de requêtes dans chaque case ? C'est pas logique, c'est mieux de construire d'abord la requête (en faisant un switch pour générer la partie ORDER BY), mais ensuite faire un seul traitement pour l'exécution et le parcours des données [:proy]  
 
(et de mettre des echo un peu partout pour vérifier à chaque étape que tu as les bonnes valeurs et débugger au fur et à mesure plutot que d'espérer que tout va fonctionner d'un bloc :pt1cable: )

Reply

Marsh Posté le 08-09-2006 à 23:11:55    

J'ai vraiment du mal !!!   :(

Reply

Marsh Posté le 09-09-2006 à 01:34:40    

que signifi le "." dans "$req .=" ??? c'est pour différencier 2 variable $req ? :heink:  

Reply

Marsh Posté le 09-09-2006 à 02:04:48    

:D  Ca y est !!!! j'ai trouvé  :D  
Après des heures de tests  :pt1cable:  
Il y a certainement une méthode plus simple mais celle là marche   :sol:  
 
<?php
$choix = $_POST['choix'];
{
echo $choix;
}
?>
 
<?php
mysql_connect("url", "login", "pwd" );
mysql_select_db("login" );
 
if ($choix == "choix1" )
{
$reponse = mysql_query ("SELECT * FROM mediatheque ORDER BY titre ASC" );
}
 
elseif ($choix == "choix2" )
{
$reponse = mysql_query ("SELECT * FROM mediatheque ORDER BY theme ASC" );
}
 
elseif ($choix == "choix3" )
{
$reponse = mysql_query ("SELECT * FROM mediatheque ORDER BY auteur ASC" );
}
 
elseif ($choix == "choix5" )
{
$reponse = mysql_query ("SELECT * FROM mediatheque ORDER BY support ASC" );
}
 
elseif ($choix == "choix6" )
{
$reponse = mysql_query ("SELECT * FROM mediatheque ORDER BY editeur ASC" );
}
 
elseif ($choix == "choix7" )
{
$reponse = mysql_query ("SELECT * FROM mediatheque ORDER BY annee ASC" );
}
 
?>
 
<p>
<?php
while ($donnees = mysql_fetch_array($reponse))
{
?>
<?php echo $donnees['titre'];?><br/>
<?php echo $donnees['theme'];?><br/>
<?php echo $donnees['auteur'];?><br/>
<?php echo $donnees['detail'];?><br/>
<?php echo $donnees['support'];?><br/>
<?php echo $donnees['editeur'];?><br/>
<?php echo $donnees['annee'];?><br/>
</p>
 
<?php
}
mysql_close();
?>
 
 
Il ne me reste plus que la mise en page et hop !!!!!!  
je m'attaque aux formulaires !!! :(  
 
Merci pour tout

Reply

Marsh Posté le 11-09-2006 à 10:47:25    

sil20 a écrit :

que signifi le "." dans "$req .=" ??? c'est pour différencier 2 variable $req ? :heink:

Non, c'est juste la concaténation.
$a .= "coucou" est équivalent à : $a = $a . "coucou"
sauf qu'avec la 1ère notation, on voit mieux qu'on modifie la variable $a :)  

Reply

Sujets relatifs:

Leave a Replay

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