prob de classement de champ - SQL/NoSQL - Programmation
Marsh Posté le 07-09-2006 à 13:56:52
Bon, là, deja, y a un truc qui me choque
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
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 {}
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 |
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
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
Marsh Posté le 07-09-2006 à 19:56:46
$query = mysql_query($req);
...
while ($donnees = mysql_fetch_array ($reponse)) {
forcément
Marsh Posté le 07-09-2006 à 21:20:42
pfffffff...............
effectivement
Bon ça ne marche pas mieux , j'essaye avec switch
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)) {
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
au fait ! excellent ce : $req .= " ORDER BY titre ASC";
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 ?
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 !
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
Marsh Posté le 07-09-2006 à 23:27:49
non, là, tu refroidis
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
(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 )
Marsh Posté le 09-09-2006 à 01:34:40
ReplyMarsh Posté le 09-09-2006 à 02:04:48
Ca y est !!!! j'ai trouvé
Après des heures de tests
Il y a certainement une méthode plus simple mais celle là marche
<?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
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 ? |
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
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