changer un ordre d'affichage

changer un ordre d'affichage - PHP - Programmation

Marsh Posté le 15-12-2009 à 22:05:52    

Bonjour,
 
J'affiche des photos (en php) suite à lecture de ma base.
Je voudrais modifier l'ordre d'affichage, sans avoir à intervenir directement sur la base.  
J'ai une table alb_photos qui comporte comme champs : id (l'identifiant), titre_album, soustitre.
Et une table photos avec : idph (identifiant unique), idliaison (ce qui relie à l'id de la table précédente), numero (qui permettra l'ordre d'affichage), lien (qui mène à la photo dans un fichier).
 
J'affiche donc une série de photos, numérotées. Les numéros sont issus du champ (numero).
 

Code :
  1. $id = $_GET["id"]; // issue après sélection de l'album photo à modifier l'ordre
  2. $requete="SELECT alb_photos.id, alb_photos.titre_album, alb_photos.soustitre, photos.idph, photos.idliaison, photos.numero, photos.lien
  3. FROM alb_photos LEFT JOIN photos ON alb_photos.id=photos.idliaison
  4. WHERE id = '$id' ";
  5. $result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );
  6. $idEncours = 0;
  7. while($row = mysql_fetch_array($result))
  8. {
  9. if ($idEnCours = $row['id'])
  10. {
  11. echo '<form action="maj_ordre_photos.php?idph='. $row['idph'] .'">';
  12. echo '<td><img border=0 height="50" src="' . $row['lien'] . '"><center>
  13.           <input name="numero" type="text" id="numero" value="'.$row['numero'] .'" size="1" maxlength="3"></center></td>';
  14. }
  15. else
  16. {
  17. echo '</tr></table></div>';
  18. }
  19. }
  20. echo '<div class="centrer">';
  21. echo '<input type="submit" value="Valider"><input type="button" name="lien" value="Annuler" onClick="self.location.href=\'aff_alb_photos.php\'">';
  22. echo '<input type="reset" value="Effacer les Modifications">';
  23. echo '</form>';
  24. echo '</div>';


 
De là, je peux modifier le ou les numéros affichés, puis clique sur "Valider".
 

Code :
  1. $link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
  2. mysql_select_db($db) or die ('Erreur :'.mysql_error());
  3.     $idph = $_POST["idph"];
  4.     $numero = $_POST["numero"];
  5.     $result=mysql_query("UPDATE photos SET numero='$numero' WHERE idph='$idph'" );


 
 
 Et ..... ça marche pô !!!!! Mon champ "numero", dans ma table n'a pas changé ......
Merci de m'aider à débugger .....  :pt1cable:

Reply

Marsh Posté le 15-12-2009 à 22:05:52   

Reply

Marsh Posté le 16-12-2009 à 09:40:39    

Je ne vois pas quoi dire d'autre que des conseils simples :
1- Afficher la requete en plus de l'executer.
2- Essayer la requete sous phpMyAdmin par ex.
3- Tester le code retour et gerer les erreurs d'update.
Rien que du classique...

Reply

Marsh Posté le 16-12-2009 à 10:43:51    

apprendre le SQL comme ça, tu découvriras la clause ORDER BY :/


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 16-12-2009 à 17:36:45    

Bonjour,  
 
Je suppose que mon problème vient d'ici :
 
echo '<form action="maj_ordre_photos.php?idph='. $row['idph'] .'">';
echo "<input type=hidden name=\"idph\" value=$idph>";
echo '<td><img border=0 height="50" src="' . $row['lien'] . '"><center>
          <input name="numero" type="text" id="numero" value="'.$row['numero'] .'" size="1" maxlength="3"></center></td>';

 
Car dans mon script de mise à jour, si je teste les variables réceptionnées, je ne reçoit pas idph, et pour le numero, je n'ai que celui de la dernière image affichée.
Et comme je ne maitrise pas trop bien les tableaux (Array) .....  :??:   :(

Reply

Marsh Posté le 16-12-2009 à 18:29:27    

1 - Sécurise les entrées POST en vérifiant que ce sont des nombres quand tu veux un nombre, ou utilise <a href="http://fr.php.net/mysql_real_escape_string">mysql_real_escape_string</a> quand tu veux une chaîne.
2 - Les guillemets autour des valeurs des attributs dans le html ne sont pas optionnels.
 
Quand t'auras changé ça ton code sera déjà moins 90's style et un peu plus sécurisé.
Ensuite, enlève les simples quote autour de tes noms de variables dans ta requête.
Et enfin, ton problème vient du fait que tu ne spécifies pas la méthode HTTP : donc, tout est envoyé en GET, alors que tu cherches à récupérer du POST.
Change ta balise form en :

Code :
  1. <form action="maj_ordre_photos.php" method="POST">


Message édité par Profil supprimé le 16-12-2009 à 18:29:51
Reply

Marsh Posté le 17-12-2009 à 11:02:38    

OK ! Merci Luc@s ! Mais ça marche toujours pô .....  :cry:  
 
Après plusieurs essais différents, voici ce que j'ai (là, j'ai affiché la série où je veux modifier l'ordre des photos. Sous chaques photos, son numéro issu de la bd que je voudrais changer et qui modifierait l'ordre d'affichage):
 

Code :
  1. echo '<form action="maj_ordre_photos.php?idph='. $row['idph'] .' & numero='. $row['numero'] .'"  method="POST">';
  2. echo '<input type=hidden name="idph" value="'.$row['idph'] .'">';
  3. echo '<td><img border=0 height="50" src="' . $row['lien'] . '"><center>
  4.           <input name="numero" type="text" id="numero" value="'.$row['numero'] .'" size="1" maxlength="3"></center></td>';


 
La mise à jour de la bd (après avoir modifié le numéro de l'image identifiée par idph) :
 

Code :
  1. $idph = $_POST["idph"];
  2.     $numero = $_POST["numero"];
  3.     $result=mysql_query("UPDATE photos SET numero='$numero' WHERE idph='$idph'" );


 
Si je fais, avant $result, echo '<pre>'; print_r($_POST); echo '</pre>';, je récupère l'idph de la dernière photo et son numéro. C'est tout ! Donc rien ne change .....  :fou:  
 

Reply

Marsh Posté le 17-12-2009 à 13:34:12    

petite astuce pour le coup du print_r
 

Code :
  1. echo '<pre>' . htmlentities(print_r($array, true)) . '</pre>';

Reply

Marsh Posté le 17-12-2009 à 14:29:41    

Avec ton astuce, j'ai une page blanche !!!!!
Avec la mienne, j'ai :  
Array
(
)

 
La requête dans phpMyadmin fonctionne. Mais pour le reste ...........  :cry:

Reply

Marsh Posté le 17-12-2009 à 14:54:04    

bizar t'as quelle version de php ?

Reply

Marsh Posté le 17-12-2009 à 15:07:23    

stealth35 a écrit :

bizar t'as quelle version de php ?


 
PHP 5.2.6

Reply

Marsh Posté le 17-12-2009 à 15:07:23   

Reply

Marsh Posté le 17-12-2009 à 15:09:18    

bizar, t'as bien mis  $_POST a la place de $array ?

Message cité 1 fois
Message édité par stealth35 le 17-12-2009 à 15:09:28
Reply

Marsh Posté le 17-12-2009 à 15:15:14    

stealth35 a écrit :

bizar, t'as bien mis  $_POST a la place de $array ?


 
L'un ou l'autre c'est pareil ..... !

Reply

Marsh Posté le 17-12-2009 à 15:18:13    

Fais un 'view source' sur la page que tu poste une fois que tu as saisi la valeur du champ numero. Ca peux aider. Verifie egalement que tu poste bien le bon formulaire.

Reply

Marsh Posté le 17-12-2009 à 15:44:49    

fred777888999 a écrit :

Fais un 'view source' sur la page que tu poste une fois que tu as saisi la valeur du champ numero. Ca peux aider. Verifie egalement que tu poste bien le bon formulaire.


 
Tu fais comment pour le 'view source' ? Je le met où ? Pour les formulaires, c'est bien les bons !!!!!

Reply

Marsh Posté le 17-12-2009 à 16:17:28    

Dans ton navigateur, view source ou afficher la source, ou code source, ca depend de la langue ou de la version. En general accessible avec le bouton droite de la souris.  
C'est juste pour voir le code HTML et verifier le formulaire que tu va poster. Il n'y a en effet aucune raison que tu recupere des variables vides.

Reply

Marsh Posté le 17-12-2009 à 16:31:23    

OK ! Donc si j'affiche la source, le "value" du numéro reste inchangé à celle d'origine.  
Ce qui est normal puisqu'il prend la valeur de celui qui est affiché au début, et je n'ai pas encore fait de modification.


Message édité par t671 le 17-12-2009 à 16:32:05
Reply

Marsh Posté le 17-12-2009 à 16:35:50    

Le value affiche n'est que la valeur par defaut, pas celle saisie/modifiee par l'utilisateur.  
Le but de la manoeuvre est de comprendre pourquoi ton vecteur $_POST est vide alors qu'il devrait y avoir qq chose, je suppose sans preuve que ton formulaire est mal construit.
A la limite, tu peux faire un phpinfo() (dans ton code php) pour voir ce qui te reviens, mais c'est plus dur de faire le tri.

Reply

Marsh Posté le 17-12-2009 à 16:47:33    

fred777888999 a écrit :

Le value affiche n'est que la valeur par defaut, pas celle saisie/modifiee par l'utilisateur.  
Le but de la manoeuvre est de comprendre pourquoi ton vecteur $_POST est vide alors qu'il devrait y avoir qq chose, je suppose sans preuve que ton formulaire est mal construit.
A la limite, tu peux faire un phpinfo() (dans ton code php) pour voir ce qui te reviens, mais c'est plus dur de faire le tri.


 
Mal construit ??? Mais si y'a des erreurs à ce niveau, faut me dire ....  :(  
Et le $_POST n'est pas vide, car il prend la valeur de la dernière photo affichée !?  :??:

Reply

Marsh Posté le 17-12-2009 à 16:56:37    

Pas clair du tout ton probleme et je n'arrive pas a comprendre ce qui te bloque. Peux-tu modifier  

Code :
  1. $result=mysql_query("UPDATE photos SET numero='$numero' WHERE idph='$idph'" );


en  

Code :
  1. $requete = "UPDATE photos SET numero='$numero' WHERE idph='$idph'"
  2. echo "<pre>$requete</pre>";
  3. $result=mysql_query($requete);


pour que l'on sache clairement quel ordre sql est effectue ?
 
EDIT : balises code.

Message cité 1 fois
Message édité par fred777888999 le 17-12-2009 à 17:00:31
Reply

Marsh Posté le 17-12-2009 à 17:04:33    

fred777888999 a écrit :

Pas clair du tout ton probleme et je n'arrive pas a comprendre ce qui te bloque. Peux-tu modifier  

Code :
  1. $result=mysql_query("UPDATE photos SET numero='$numero' WHERE idph='$idph'" );


en  

Code :
  1. $requete = "UPDATE photos SET numero='$numero' WHERE idph='$idph'"
  2. echo "<pre>$requete</pre>";
  3. $result=mysql_query($requete);


pour que l'on sache clairement quel ordre sql est effectue ?
 
EDIT : balises code.


 
Donc, le résultat de $requete = UPDATE photos SET numero='3' WHERE idph='3'  
Ce qui fait que idph et numero prennent la valeur de la dernière photo affichée à l'écran !  :pt1cable:  

Reply

Marsh Posté le 17-12-2009 à 17:51:52    

Ben ca tu aurait du (pu) sans doutes le detecter avec le view-source en regardant le value de ton champ cache idph. En prime, en relisant, il n'est vraiment pas sain d'avoir un formulaire POST et des parametres passes en GET en meme temps avec les anciennes valeurs.  
Poste le source (view-source) de ton formulaire qu'on y voie plus clair...

Reply

Marsh Posté le 17-12-2009 à 18:06:54    

Effectivement, en lisant la source, idph et numero prennent 1 comme valeur :
 

<div class="centrer"><h2><u>aaaaaaaaaaaaa</h2></u><h4><i>aaaaaaaaaaaaaaaa</i></h4><table><tr><form action="maj_ordre_photos.php?idph=1 & numero=1"  method="POST"><input type=hidden name="idph" value="1"><td><img border=0 height="50" src="photos_alb/Diapositive1.JPG"><center>
          <input name="numero" type="text" id="numero" value="1" size="1" maxlength="3"></center></td><form action="maj_ordre_photos.php?idph=2 & numero=2"  method="POST"><input type=hidden name="idph" value="2"><td><img border=0 height="50" src="photos_alb/Diapositive2.JPG"><center>
          <input name="numero" type="text" id="numero" value="2" size="1" maxlength="3"></center></td><form action="maj_ordre_photos.php?idph=3 & numero=3"  method="POST"><input type=hidden name="idph" value="3"><td><img border=0 height="50" src="photos_alb/Diapositive4.JPG"><center>
          <input name="numero" type="text" id="numero" value="3" size="1" maxlength="3"></center></td><input type="submit" value="envoyer" /></form></div>


 
Cela provient peut-être de mon test $idEncours ????
 

Code :
  1. $requete="SELECT alb_photos.id, alb_photos.titre_album, alb_photos.soustitre, photos.idph, photos.idliaison, photos.numero, photos.lien
  2. FROM alb_photos LEFT JOIN photos ON alb_photos.id=photos.idliaison
  3. WHERE id = '$id' ";
  4. $result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );
  5. $idEncours = 0;
  6. while($row = mysql_fetch_array($result))
  7. {
  8. if( $idEnCours != $row['id'] )
  9. {
  10.  echo '<div class="centrer">';
  11.    echo '<h2><u>'.$row['titre_album'].'</h2></u>';
  12.    echo '<h4><i>'.$row['soustitre'].'</i></h4>';
  13.  echo '<table><tr>';
  14. }
  15. if ($idEnCours = $row['id'])
  16. {
  17. echo '<form action="maj_ordre_photos.php?idph='. $row['idph'] .' & numero='. $row['numero'] .'"  method="POST">';
  18. echo '<input type=hidden name="idph" value="'.$row['idph'] .'">';
  19. echo '<td><img border=0 height="50" src="' . $row['lien'] . '"><center>
  20.           <input name="numero" type="text" id="numero" value="'.$row['numero'] .'" size="1" maxlength="3"></center></td>';

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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