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

  FORUM HardWare.fr
  Programmation
  PHP

  changer un ordre d'affichage

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

changer un ordre d'affichage

n°1950651
t671
Posté le 15-12-2009 à 22:05:52  profilanswer
 

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:

mood
Publicité
Posté le 15-12-2009 à 22:05:52  profilanswer
 

n°1950721
fred777888​999
Posté le 16-12-2009 à 09:40:39  profilanswer
 

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

n°1950779
rufo
Pas me confondre avec Lycos!
Posté le 16-12-2009 à 10:43:51  profilanswer
 

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
n°1950984
t671
Posté le 16-12-2009 à 17:36:45  profilanswer
 

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) .....  :??:   :(

n°1950994
Profil sup​primé
Posté le 16-12-2009 à 18:29:27  answer
 

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
n°1951117
t671
Posté le 17-12-2009 à 11:02:38  profilanswer
 

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:  
 

n°1951166
stealth35
Posté le 17-12-2009 à 13:34:12  profilanswer
 

petite astuce pour le coup du print_r
 

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

n°1951190
t671
Posté le 17-12-2009 à 14:29:41  profilanswer
 

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:

n°1951208
stealth35
Posté le 17-12-2009 à 14:54:04  profilanswer
 

bizar t'as quelle version de php ?

n°1951218
t671
Posté le 17-12-2009 à 15:07:23  profilanswer
 

stealth35 a écrit :

bizar t'as quelle version de php ?


 
PHP 5.2.6

mood
Publicité
Posté le 17-12-2009 à 15:07:23  profilanswer
 

n°1951219
stealth35
Posté le 17-12-2009 à 15:09:18  profilanswer
 

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
n°1951222
t671
Posté le 17-12-2009 à 15:15:14  profilanswer
 

stealth35 a écrit :

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


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

n°1951225
fred777888​999
Posté le 17-12-2009 à 15:18:13  profilanswer
 

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.

n°1951234
t671
Posté le 17-12-2009 à 15:44:49  profilanswer
 

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

n°1951249
fred777888​999
Posté le 17-12-2009 à 16:17:28  profilanswer
 

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.

n°1951256
t671
Posté le 17-12-2009 à 16:31:23  profilanswer
 

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
n°1951258
fred777888​999
Posté le 17-12-2009 à 16:35:50  profilanswer
 

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.

n°1951264
t671
Posté le 17-12-2009 à 16:47:33  profilanswer
 

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 !?  :??:

n°1951268
fred777888​999
Posté le 17-12-2009 à 16:56:37  profilanswer
 

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
n°1951271
t671
Posté le 17-12-2009 à 17:04:33  profilanswer
 

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:  

n°1951298
fred777888​999
Posté le 17-12-2009 à 17:51:52  profilanswer
 

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

n°1951302
t671
Posté le 17-12-2009 à 18:06:54  profilanswer
 

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

mood
Publicité
Posté le   profilanswer
 


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

  changer un ordre d'affichage

 

Sujets relatifs
Programme d'affichage dynamiqueOrdre des champs lors du "create"
probleme avec dreamweaver en mode affichage creéationprobleme affichage suite a une requete
Ordre de compilationAffichage Loader et bouclage d'animation
stockage et affichage d'une image dans une variable php[VBA Excel] Changer la couleur suite a une formule
affichage de texte en javascriptaffichage débile en fonction des navigateurs...mais indescriptible qua
Plus de sujets relatifs à : changer un ordre d'affichage


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