Choisir l'ordre d'affichage PHP/ MYSQL

Résolu/Fermé
baba_cool Messages postés 183 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 1 novembre 2008 - 17 juin 2008 à 03:46
baba_cool Messages postés 183 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 1 novembre 2008 - 18 juin 2008 à 07:53
Bonjour,
Sur un site que je develloppe, j'ai créé une page liens et une page albums photos. J'aimerais pouvoir choisir l'ordre dans lequel afficher les liens ou les albums. J'ai donc afficher les albums dans l'ordre, avec un bouton monter et un descendre. J'enregistre dans ma DB un numero que j'appel "ordre".

Ca donne ca:

// ORDRE DES ALBUMS PHOTOS
@ $monter = $_POST['monter'];
@ $descendre = $_POST['descendre'];
@ $ordre = $_POST['ordre'];
@ $id = $_POST['id'];


if ($monter != NULL)
{
$bas =''.$ordre.''+1;
$haut =''.$ordre.''-1;

$req = mysql_query("UPDATE fralbums SET ordre='0' WHERE ordre='$haut' ");
$req = mysql_query("UPDATE fralbums SET ordre='$haut' WHERE ordre='$ordre' ");
$req = mysql_query("UPDATE fralbums SET ordre='$ordre' WHERE ordre='0' ");
}


if ($descendre != NULL)
{
$bas =''.$ordre.''+1;
$haut =''.$ordre.''-1;

$req = mysql_query("UPDATE fralbums SET ordre='0' WHERE ordre='$bas' ");
$req = mysql_query("UPDATE fralbums SET ordre='$bas' WHERE ordre='$ordre' ");
$req = mysql_query("UPDATE fralbums SET ordre='$ordre' WHERE ordre='0' ");

}


@ $subordre = $_POST['subordre'];

if($subordre != NULL)
{
echo '<strong>Ordre d\'affichage des albums:<br><br></strong>';


echo '<table width="200" border="1">';


$req = mysql_query("SELECT * FROM fralbums ORDER by ordre");
while($data = mysql_fetch_assoc($req))
{

@ $titrealbum = ''.$data['titrealbum'].'';
$id = ''.$data['id_album'].'';
$ordre = ''.$data['ordre'].'';

if ($id == 1){ echo ''; }


// Affichage des albums
else {
echo '<form action="adminalbums.php" method="post">';
echo '<tr>';
echo '<td>'.$titrealbum.'</td>';
echo '<input type="hidden" value="'.$id.'" name="id">';
echo '<input type="hidden" value="Choisir l\'ordre d\'affichage des albmus" name="subordre">';
echo '<input type="hidden" value="'.$ordre.'" name="ordre">';
echo '<td><input type="submit" value="Monter" name="monter"></td>';
echo '<td><input type="submit" value="Descendre" name="descendre"></td>';
echo '</tr>';

echo '</form>';
}
}
echo '</table><br><br><br>';
}

else
{
echo '<form action="adminalbums.php" method="post">';
echo '<input type="submit" value="Choisir l\'ordre d\'affichage des albmus" name="subordre">';
echo '</form>';
}



ca marche nickel, a part une chose: si je supprime un album, (par exemple le 5eme), je me retrouve avec un classement qui fait : 1,2,3,4,6,7,... ce qui fait que ma fonction monter et descendre se retrouve avec un "vide". J'essaye donc de reatribuer automatiquement les numeros du champ "ordre" lorsque je supprime ou ajoute un nouvel album:

// Reinisialisation automatique des valeurs de l'ordre d'afffichage
$req = mysql_query("SELECT * FROM fralbums ORDER BY ordre");
while($data = mysql_fetch_assoc($req))
{
$ordre = ''.$data['ordre'].'';
$ordre++;

$req = mysql_query("UPDATE fralbums SET ordre='$ordre'");
}

mais voila, malgré que le UPDATE se fasse dans une boucle, il augmente bien la valeur de 1, mais pour tout les enregistrements d'un coup...
A voir également:

4 réponses

baba_cool Messages postés 183 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 1 novembre 2008 23
18 juin 2008 à 07:53
J'ai compris !!!!

je n'ai pas trouvé la syntaxe pour le classement alphabétique, mais en fait c'est tout bete... pour que mysql classe correctement les chiffres, il suffit de lui dire que ce champ est numérique (INT) et nom pas alphabétique (TEXT )...

maintenant tout marche impeccable !!!


// Remise dans l ordre des albums a chaque ouverture de la page
$reqa = mysql_query("UPDATE fralbums SET ordre='0' WHERE id_album='1'");
$plus = "0";

$reqb = mysql_query("SELECT * FROM fralbums ORDER by ordre");

while($data = mysql_fetch_assoc($reqb))
{
$id = ''.$data['id_album'].'';
$plus++;
echo "$plus";
$reqc = mysql_query("UPDATE fralbums SET ordre='$plus' WHERE id_album='$id'");
}


// ORDRE DES ALBUMS PHOTOS
@ $monter = $_POST['monter'];
@ $descendre = $_POST['descendre'];
@ $ordre = $_POST['ordre'];
@ $id = $_POST['id'];


if ($monter != NULL)
{
$bas = ''.$ordre.''+1;
$haut = ''.$ordre.''-1;

$req = mysql_query("UPDATE fralbums SET ordre='0' WHERE ordre='$haut' ");
$req = mysql_query("UPDATE fralbums SET ordre='$haut' WHERE ordre='$ordre' ");
$req = mysql_query("UPDATE fralbums SET ordre='$ordre' WHERE ordre='0' ");
}


if ($descendre != NULL)
{
$bas = ''.$ordre.''+1;
$haut = ''.$ordre.''-1;

$req = mysql_query("UPDATE fralbums SET ordre='0' WHERE ordre='$bas' ");
$req = mysql_query("UPDATE fralbums SET ordre='$bas' WHERE ordre='$ordre' ");
$req = mysql_query("UPDATE fralbums SET ordre='$ordre' WHERE ordre='0' ");
}




@ $subordre = $_POST['subordre'];

if($subordre != NULL)
{
echo '<strong>Ordre d\'affichage des albums:<br><br></strong>';


echo '<table width="200" border="1">';


$req = mysql_query("SELECT * FROM fralbums ORDER by ordre");
while($data = mysql_fetch_assoc($req))
{

@ $titrealbum = ''.$data['titrealbum'].'';
$id = ''.$data['id_album'].'';
$ordre = ''.$data['ordre'].'';

if ($id == 1){ echo ''; }


// Affichage des albums
else {
echo '<form action="adminalbums.php" method="post">';
echo '<tr>';
echo '<td>'.$titrealbum.'</td>';
echo '<input type="hidden" value="'.$id.'" name="id">';
echo '<input type="hidden" value="Choisir l\'ordre d\'affichage des albmus" name="subordre">';
echo '<input type="hidden" value="'.$ordre.'" name="ordre">';
echo '<td><input type="submit" value="Monter" name="monter"></td>';
echo '<td><input type="submit" value="Descendre" name="descendre"></td>';
echo '</tr>';

echo '</form>';
}
}
echo '</table><br><br><br>';
}

else
{
echo '<form action="adminalbums.php" method="post">';
echo '<input type="submit" value="Choisir l\'ordre d\'affichage des albmus" name="subordre">';
echo '</form>';
}
2
baba_cool Messages postés 183 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 1 novembre 2008 23
18 juin 2008 à 06:27
Merci, ton idée fonctionne nickel, mais un nouveau probeleme se pose:

lorsque l'on effectu un tri sur des chiffres, il classe de cette maniere : 1,2,3,31,32,4... donc marche pas pour moi. J'ai donc remplacé les chiffres par des lettres. Impeccable !!! sauf que si la commande $ordre++ fonctionne bien, la commande $ordre-- reste sans effet... donc, quel est le contraire de ++ ???


if ($monter != NULL)
{
$bas =''.$ordre++.'';
$haut =''.$ordre--.'';

$req = mysql_query("UPDATE fralbums SET ordre='0' WHERE ordre='$haut' ");
$req = mysql_query("UPDATE fralbums SET ordre='$haut' WHERE ordre='$ordre' ");
$req = mysql_query("UPDATE fralbums SET ordre='$ordre' WHERE ordre='0' ");
}


if ($descendre != NULL)
{
$bas =''.$ordre++.'';
$haut =''.$ordre--.'';

$req = mysql_query("UPDATE fralbums SET ordre='0' WHERE ordre='$bas' ");
$req = mysql_query("UPDATE fralbums SET ordre='$bas' WHERE ordre='$ordre' ");
$req = mysql_query("UPDATE fralbums SET ordre='$ordre' WHERE ordre='0' ");
}
1
baba_cool Messages postés 183 Date d'inscription lundi 12 novembre 2007 Statut Membre Dernière intervention 1 novembre 2008 23
18 juin 2008 à 06:55
apres plusieurs essais, je comprends encore moins... avec des valeurs numériques, la syntaxe $ordre-- fonctionne... mysql ne sait pas lire l'alphabet à l'envers???

donc deux solutions : ou je trouve comment classer mes valeurs numerique d'une maniere cohérente (8,9,10,11 et pas 1,10,11,2) ou je trouve comment oter 1 à une lettre.

J'avais bien pensé utiliser mon champ id qui est auto incrémenté mais ca m'arrange pas vraiment.

A l'aide !
1
Salut,

Il faut que tu mette dans une variable l'indice du "trou"

Ensuite dans ton while tu fais ceci :

$trou="tontrou"
$compteur=0;
$req = mysql_query("SELECT * FROM fralbums ORDER BY ordre");
while($data = mysql_fetch_assoc($req))
{
if($compteur<$trou){
$ordre = ''.$data['ordre'].'';
$ordre++;
}

$req = mysql_query("UPDATE fralbums SET ordre='$ordre'");
}

A adapter bien evidemment. mais l'idée est de faire la modif qu'à partir de l'indice ou tu en a besoin.
ciao

zz
0