Vous n'êtes pas identifié(e).
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 (qui relie et est identique à 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 avec son numéro dessous que je veux changer et modifier dans la base. Les numéros sont issus du champ (numero).
$requete="SELECT alb_photos.id, alb_photos.titre_album, alb_photos.soustitre, photos.idph, photos.idliaison, photos.numero, photos.lien
FROM alb_photos LEFT JOIN photos ON alb_photos.id=photos.idliaison
WHERE id = '$id' ";
$result = mysql_query($requete,$link) or exit ('Erreur : '.mysql_error() );
$idphEncours = 0;
while($row = mysql_fetch_array($result))
{
if( $idphEnCours != $row['idph'] )
{
echo '<div class="centrer">';
echo '<h2><u>'.$row['titre_album'].'</h2></u>';
echo '<h4><i>'.$row['soustitre'].'</i></h4>';
echo '<table><tr>';
}
if ($idphEnCours = $row['idph'])
{
echo '<form action="maj_ordre_photos.php" method="POST">';
echo '<input type=hidden name="idph" value="'.$row['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>';
}
else
{
echo '</tr></table></div>';
}
}
echo '<input type="submit" value="envoyer" />';
echo '</form>';
puis le code "maj_ordre_photos.php" :
Mais dans ce dernier script, je ne récupère à chaque fois que l'idph et le numéro de la dernière photo affichée. Je ne peux donc modifier les autres.
Merci de bien vouloir m'aider.
Hors ligne
Hello,
Je suis pas sûr d'avoir tout compris, mais en tout cas je peux te dire que la ligne suivante me semble suspecte :
Ensuite je te renvois aux commentaires dans mon code :
Pour ce qui est de la mise à jour de l'ordre :
S'il y a des fonctions que tu ne connais pas je te renvoie à la Doc de php.net, si tu as des questions, pose les
Bonne journée
Dernière modification par Maskime (28-12-2009 17:16:17)
La programmation est composée de 80% de réflexion pour 20% de syntaxe -> réfléchissez à votre problème par étapes
Recommande l'utilisation du pattern Singleton
Si jamais je poste un morceau de code pour vous aider, prenez bien compte que je n'ai pas forcément testé le code que je poste et qu'il est possible qu'il contienne des erreurs
Hors ligne
Bonjour Maskime et meilleurs voeux .
Me revoici, car je retrouve un peu de temps pour replonger sur mon problème.
Pour rafraichir les esprits, j'affiche un album photo dont l'identifiant unique des photos est idph. Chaque enregistrement comporte un champs "numero" qui donne l'ordre d'affichage des photos dans l'album.
J'ai testé ton script ! Mais il ne se passe rien. Pas de message d'erreur, pas de changement.
Affichage de l'album photo :
$select = "SELECT * FROM alb_photos where id='$id'";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
while($row = mysql_fetch_array($result))
{
echo '<div class="titre">'.$row['titre_album'].'</div>';
echo '<div class="presentation1">'.$row['soustitre'].'</div>';
$select2 = "SELECT * FROM photos where idliaison='$id'";
$result2 = mysql_query($select2,$link) or die ('Erreur : '.mysql_error() );
echo '<center><table><tr>';
while($row2 = mysql_fetch_array($result2))
{
echo '<form action="maj_ordre_photos.php?idph='. $row2['idph'] .' & numero='. $row2['numero'] .'" method="POST">';
echo '<input type=hidden name="idph" value="'.$row2['idph'] .'">';
echo '<td><img border=0 height="50" src="../../images/alb_photos/' . $row2['photo'] . '"><center>' .$row2['nom']. '<br>
<input name="numero" type="text" id="numero" value="'.$row2['numero'] .'" size="1" maxlength="3"></td>';
}
echo '</tr></table><p>';
}
echo '<input type="button" name="lien" value="Annuler" onClick="self.location.href=\'aff_alb_photos.php\'">';
echo '<input type="submit" value="envoyer" /></center>';
echo '</form>';
Mise à jour du champs numéro dans la base :
En fait, pour ce dernier, je n'ai rien changé, et il ne se passe rien !
Si j'enlève tout ce qui fait référence à idph et que je change un numéro, tous les numéros changes ....
Hors ligne
Hello, Pour l'ordre pourquoi tu ne veux pas le demander a ta requête sql avec un ORDER BY numero ?
--> Lien d'aide
Dernière modification par Jiinn (09-01-2010 14:48:29)
Hors ligne
Hello, Pour l'ordre pourquoi tu ne veux pas le demander a ta requête sql avec un ORDER BY numero ?
--> Lien d'aide
En fait, ce que je veux faire, c'est modifier l'ordre d'affichage.
A l'enregistrement de la photo, le numéro d'ordre d'affichage est = à l'idph (identifiant unique). Mais je pourrais vouloir modifier l'ordre .... par exemple, afficher la 5° photo en 2° .....
Hors ligne
salut,
je crois que tu devrais ré expliquer plus clairement ce que tu veut parce que la c'est pas très clair
si l'ordre d'affichage est aléatoire => order by rand().
s'il s'agit d'un reclassement, la c'est plus compliqué et tu risque de devoir le traiter avec PHP.
@+
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
Bonjour moogli. Et merci pour l'aide que tu peux m'apporter.
Je reprends donc ! Je ne remet pas les scripts. Ils sont plus haut (hier, 12h52).
J'ai une table mysql (photos) qui comporte principalement l'"idph" (identifiant unique de l'enregistrement), le "nom" de la photo, le "numero" de la photo (qui au départ est le même que l'idph) .....
J'affiche les images à l'écran (via un menu des gestion de site). Dessous, j'affiche le "numero" de la photo que je peux modifier si je veux changer l'ordre d'affichage. Bien sûr, l'affichage initial se fera par "ORDER BY numero".
Le nombre de photos affichées n'est pas limité, ni pré-défini.
Je n'arrive donc pas à enregistrer dans la base le ou les numéros modifiés des photos concernées.
Hors ligne
Tu ferrais bien de faire du débuggage sur ton script car ta méthode est la bonne (bon j'ai pas vérifié que le script pouvait fonctionner, c'est ce que je te demande ^^).
Tentes de faire un affichage des variables, tu dois avoir un truc qui ne passe pas bien ou une simple erreur de nom, ou encore un écrasement ou que sais-je.
Hors ligne
Tu ferrais bien de faire du débuggage sur ton script car ta méthode est la bonne (bon j'ai pas vérifié que le script pouvait fonctionner, c'est ce que je te demande ^^).
Tentes de faire un affichage des variables, tu dois avoir un truc qui ne passe pas bien ou une simple erreur de nom, ou encore un écrasement ou que sais-je.
Bonjour xTG,
Si après la réception des variables je fais un test de variable :
$idph = $_POST['idph'];
$numero = $_POST['numero'];
echo '<pre>'; print_r($_POST); echo '</pre>';
J'ai ceci :
Array
(
[idph] => 8
[numero] => Array
(
[0] => 1
[1] => 6
[2] => 5
[3] => 7
[4] => 9
)
)
Le [1] => 6 correspond à la deuxième photo que j'ai modifié. Le 6 était à 3 lors de l'affichage.
Donc, les variables sont bien réceptionnées.
Mais je ne trouve pas mon erreur ......
Hors ligne
Merci, mais si je fais :
if(strpos('numero_', $sKey) !== false)
{
$i = 0;
$idph = $_POST['idph'][$i];
$numero = $_POST['numero'][$i];
$i++; ................
C'est pareil ..............
Il doit bien y avoir une solution ..............:mad:
Hors ligne
Je suis pas sûr que tu ais compris mon post...
Tu vais un if sur la recherche de "numero_"...
Mais lorsque tu affiches tes variables tu n'as que des chiffres. Nulle part "numero_" !!!
Donc ton if ne se fait JAMAIS......
J'espère que tu m'auras lu cette fois-ci.
Hors ligne
Je suis pas sûr que tu ais compris mon post...
Tu vais un if sur la recherche de "numero_"...
Mais lorsque tu affiches tes variables tu n'as que des chiffres. Nulle part "numero_" !!!
Donc ton if ne se fait JAMAIS......J'espère que tu m'auras lu cette fois-ci.
Mais si j'enlève le if, l'ordre doit s'exécuter. Et si j'écris ceci :
foreach ($numero as $numero2 => $result) ;
$i = 0;
$idph = $_POST['idph'][$i];
$numero = $_POST['numero'][$i];
$i++;
{
$result=mysql_query("UPDATE photos SET numero WHERE idph='$idph'");
J'ai le même résultat .... C'est à dire le même Array que précédemment, mais la mise à jour dans la base ne se fait pas !
Je pense avoir une erreur de syntax dans ma requête $resutl, mais où ???
Dernière modification par t14 (10-01-2010 18:33:07)
Hors ligne
Euh... J'espère que la dernière version de ton code est un malencontreux copier/coller...
Enfin je trouve qu'il y a bug dans tes explications...
idph = identifiant unique référençant UNE photo non ?
Alors pourquoi un array avec plusieurs numeros ????? Tu ne modifies qu'une seule position.
Auquel autre cas il faut que tu envoies tous les idph à modifier.
Voici un code avec ce que j'ai compris de ton code et organisation bdd. Mais à la vue de certaines de tes réponses j'ai l'impression que tu tests des codes totalement aléatoire sans même les comprendre.
A savoir donc une variable $_POST['liste'] = array( idph1 => numero1, idph2 => numero2, ect...);
Hors ligne
Merci pour le code ....
Je pensais enfin que ça allait fonctionner, mais rien0. Pas de message d'erreur, pas de mise à jour de la base ....
J'ai recopié tel que ton code ....
Je suppose que le problème, est que je récupère dans mon tableau "Array" que les valeurs des numéros. Pas celles des "idph". Donc je ne peux faire le lien ....
Array
(
[0] => 1
[1] => 3
[2] => 5
[3] => 7
[4] => 2
)
Il faudrait que j'arrive à dire que pour chaque valeur se trouvant entre crochet ([x]), je lui associe le numéro suivant => y à enregistrer dans la base. Et là .... je sais pô ....
Hors ligne
Il faudrait que les chiffres se trouvant entre [] représentent l'idph, ce qui n'est pas le cas. Il n'y a donc pas notion d'idph ....
Hors ligne
Merci xTG ! Je commence à y voir clair, mais pas suffisamment pour arriver au bout. (au passage, peux-tu m'expliquer id="numero_' . $row2['idph'] . ')
Je récapitule ; j'affiche les photos avec leur numéro d'ordre dessous :
Je modifie le ou les numéros désirés, je valide pour mise à jour dans la base, et là .......................................................... pas de modification.
Suite à la validation, ma variable $numero = $_POST['numero']; est égal à :
[1] => 1
[5] => 3
[6] => 5
[7] => 7
[8] => 9
1,5,6,7,8 correspond aux idph.
1,3,5,7,9 correspond aux numéros à écrire dans la base.
Mon script de mise à jour dans la base :
if( isset($_POST['numero']) )
{
//Boucle sur les valeurs
foreach($_POST['numero'] as $idph => $numero)
{
//Cast en integer afin de n'avoir que des entiers
$idph = (int)$idph;
$numero = (int)$numero;
//Requête d'update de la photo pointée par idph
mysql_query("UPDATE photos SET numero='$numero' WHERE idph='$idph'");
}
}
En fait, dans ma variable réceptionnée "$numero", j'ai tout ce qu'il me faut .... Mais comment dire d'inscrire dans la base les numéros (=> "y") correspondant aux idph qui se trouvent entre crochets ([x]) ?????
Hors ligne
C'est ce que fait la boucle foreach que tu me demandes. ^^
En fait ces arguments fonctionnent ainsi :
Pour toute valeur de $_POST['numero'] stocker la valeur dans $numero et la clé dans $idph.
PS : $_POST[clé] = valeur
Mets des echo dans la boucle foreach pour vérifier que tu récupères bien les bonnes valeurs et rajoutes un die(mysql_error()) à la requête SQL.
Hors ligne
Salut,
par exemple :
tu pourras voir s'il y a des erreurs SQL, si ce n'est pas le cas les valeurs doivent être mise à jour.
@+
Il en faut peu pour être heureux pompompompompompompompompompompom
Hors ligne
Bonjour à tous,
Moogli, j'ai donc testé ton code :
Et j'ai comme réponse sur le "echo" :
Parse error: syntax error, unexpected T_STRING
ou
Et j'ai la même réponse ....
Hors ligne
Essayes avec cela ça fonctionnera mieux...
La fin de chaîne était rouverte mais non refermée.
Edit : tu devrais utiliser un éditeur qui colore la syntaxe tu verrai tout de suite ce genre d'erreurs.
Dernière modification par xTG (13-01-2010 20:25:51)
Hors ligne
Essayes avec cela ça fonctionnera mieux...
$requete = 'UPDATE photos SET numero='.$numero.' WHERE idph='.$idph;La fin de chaîne était rouverte mais non refermée.
Edit : tu devrais utiliser un éditeur qui colore la syntaxe tu verrai tout de suite ce genre d'erreurs.
Ben je suis désolé, mais ça ne fonctionne pas ....
Après :
$requete = 'UPDATE photos SET numero='.$numero.' WHERE idph='.$idph;
$result = mysql_query($requete,$link) or die ('Erreur : '.mysql_error() );
je n'ai même pas de message d'erreur, pas de mise à jour dans la base ! Ce que je souhaitais faire est certainement impossible ......
Dernière modification par t14 (14-01-2010 12:13:17)
Hors ligne
Ben non, le script se déroule mais ne m'affiche rien si je fais un echo de la requête : echo ("<br><u>requete =</u> ".$requete) ;
Une étourderie serait tout à fait possible, mais où .... ???? pffffffffffff............
$idph = $_POST['idph'];
$numero = $_POST['numero'];
//echo '<pre>'; print_r($_POST); echo '</pre>'; // test des variables
//exit;
if( isset($_POST['numero']) )
{
//Boucle sur les valeurs
foreach($_POST['numero'] as $idph => $numero)
{
//Cast en integer afin de n'avoir que des entiers
$idph = (int)$idph;
$numero = (int)$numero;
//Requête d'update de la photo pointée par idph
$requete = 'UPDATE photos SET numero='.$numero.' WHERE idph='.$idph;
$result = mysql_query($requete,$link) or die ('Erreur : '.mysql_error() );
echo ("<br><u>requete =</u> ".$requete) ; // test de la requête
}
}
mysql_close();
header("Location: aff_alb_photos.php");
exit;
?>
Hors ligne