mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009
-
20 févr. 2006 à 20:01
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009
-
25 févr. 2006 à 18:43
bonsoir,
voilà je cherche un moyen de modifier l'ordre des enregistrements dans une requete par un bouton haut ou bas selon le cas
voici un exemple de requete
$requete = mysql_query( "SELECT nom,ordre FROM matable ORDER BY ordre ASC") ;
while( $result = mysql_fetch_array( $requete ) ){
echo $result['nom'];
echo '[... up][... down]';
}
Je souhaiterais par ce lien "up" ou "down" ordonner mes enregistrements les uns par rapport aux autres sachant que dans ma table mysql j'ai un champs ordre qui récupère un numéro de classement 1,2,3,...
Mon problème est que je ne sais pas trop comment faire pour mettre à jour l'ordre?
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 25 févr. 2006 à 18:43
bonsoir ,
enfin j'ai réussi sans le champs supplémentaire et seulement avec les champs existant càd le champs ordre ici.
3 requetes suffisent .
je passe par la valeur négative pour éviter l'écrasement
if($_GET){
$ordre=$_GET['ordre'];//2
$img=$_GET['img'];//table
$lang=$_GET['lang'];//table
}
if($_GET['mod'] == 'plus') {
$ordre1=$ordre+1;//3
$ordre2=$ordre;//2
$ordre1neg=(0-$ordre1);
mysql_query("UPDATE $img SET ordre_page ='$ordre1neg' WHERE ordre_page='$ordre2'");//a=-3 where a=2
mysql_query("UPDATE $img SET ordre_page='$ordre2' WHERE ordre_page='$ordre1'");//b=2 where b=3
mysql_query("UPDATE $img SET ordre_page='$ordre1' WHERE ordre_page='$ordre1neg'");//a=3 where a=-3
}
if($_GET['mod'] == 'moins') {
$ordre1=$ordre-1;//2
$ordre2=$ordre;//3
$ordre1neg=(0-$ordre1);
//ordre=3
//a=3 b=2
mysql_query("UPDATE $img SET ordre_page ='$ordre1neg' WHERE ordre_page='$ordre2'");//a=-2 where a=3
mysql_query("UPDATE $img SET ordre_page='$ordre2' WHERE ordre_page='$ordre1'");//b=3 where b=2
mysql_query("UPDATE $img SET ordre_page='$ordre1' WHERE ordre_page='$ordre1neg'");//a=2 where a=-2
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 20 févr. 2006 à 21:24
bonsoir ,
oui en effet il s'agit surement d'un update mais la difficulté est de faire passer le 3 avant le 2 (par exemple).
Un update (-1 ou +1)qui modifierait en même temps les autre enregistrement pour qu'il ssuivent aussi
je l' ai déjà vue quelque part mais j'arrive pas à me rappeler où.
je suis sur qu'il y a moyen de positionner mais je cherche encore comment créer mon code.la nuit porte conseil j'y arriverai!!
merci pour ton aide
à bientôt si je trouve je te prévient car ce code est interressant pour ordonner rapidement un menu , des pages,...
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 20 févr. 2006 à 21:44
bonsoir,
oui en effet il s'agit surement d'un update mais je dois trouver le moyen de faire passer les valeurs d'un enregistrement à l'autre.
Peut être en incrémentant de +1 ou -1 pour faire avancer l'enregistrement dans l'affichage de la requete?
c'est un manipulation un peu long pour faire avance ou reculer l'enregistrement dans le classement mais il me semble être le plus raisonnable à adapter.
J'ai déjà vu cette manipulation quelque part mais je ne sais plus où ?
Mais pour le moment je vois pas trop comment faire suivre les autres enregistrements.
La nuit porte conseil j'y arriverai surement!!
Ce code pourra être interessant pour ordonner un menu dynamique , des pages ,...
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 21 févr. 2006 à 12:36
bonjour,
merci pour votre aide
j'ai essayer cette méthode :
//celui qui monte UPDATE `matable` SET ordre=3 WHERE ordre= 2
mysql_query("UPDATE $matable SET ordre =(".$_GET['ordre']."+1) WHERE ordre=".$_GET['ordre']);
//celui qui descend UPDATE `matable` SET ordre=2 WHERE ordre= 3
mysql_query("UPDATE $matable SET ordre=".$_GET['ordre']." WHERE ordre=(".$_GET['ordre']."+1)");
mais à chaque fois la première requete ne fait pas de mise à jour la seconde oui (même en modifiant l'ordre des requetes )
je ne vois pas pourquoi ma première requete est ignorer?
il faut arriver à inverser les 2 valeurs il me semble
quelqu'un voit il l'erreur ?merci d'avance pour votre aide
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 21 févr. 2006 à 18:19
bonsoir;
j'ai déjà essayer par une variable mais j'ai toujours le même problème
la premiere requete n'est pas exécuter mais la deuxième oui
Ce problème me rappelle un écrasement de variable mais je vois pas ou et je ne c pas si c le cas ici?
j'ai chercher sur google comment inverser 2 lignes d'une table et j'ai pas trouver non plus
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 21 févr. 2006 à 20:28
bonsoir,
oui en effet d'après l'echo de la requete il est claire j'ecrase la valeur alors comment faire ?mais j'y suis presque
j'ai une solution mais qui est peut-être lourde mais elle à l'air de marché:
j'ai crée un nouveaux champs ordretemp(temporaire)pour conserver la valeur avant la modification puis je màj le champs temp
voici le script plus explicatif:
dis moi ce que tu en pense?tu as peut être un autre méthode pour garder en mémoire la valeur de l'ordre pour l'update?
if($_GET['mod'] == 'plus') {
//celui qui monte UPDATE `tickets` SET ordre=3 WHERE ordre= 2
$ordre=$_GET['ordre'];//2
$ordre1=$ordre+1;//3
$ordre2=$ordre;//2
$sql="UPDATE $matable SET ordre ='$ordre1' WHERE ordretemp='$ordre'";
mysql_query($sql);
echo $sql;
echo "
";
//celui qui descend UPDATE `tickets` SET ordre=2 WHERE ordre= 3
$sql="UPDATE $matable SET ordre='$ordre' WHERE ordretemp='$ordre1'";
mysql_query($sql);
echo $sql;
$requete= mysql_query('SELECT `ordre` FROM `tickets`');
while($result = mysql_fetch_array($requete))
{
$ordre = $result['ordre'];
$sql=mysql_query("UPDATE `tickets` SET ordretemp ='$ordre' WHERE ordre='$ordre'");
}
mariobotta
Messages postés57Date d'inscriptionsamedi 30 avril 2005StatutMembreDernière intervention12 septembre 2009 21 févr. 2006 à 21:20
bonsoir,
voici le script
<?php
//connexion au serveur
//recupère le dernier id
$requete = mysql_query("SELECT id FROM tickets ORDER BY id DESC LIMIT 0,1");
$result = mysql_fetch_array($requete);
$id_der=$result["id"];
//affichage du "menu" ou ce que l'on veux
$requete = mysql_query("SELECT id,nom,ordre FROM tickets ORDER BY ordre");
while( $result = mysql_fetch_array( $requete ) ){
$ordre=$result['ordre'];
echo $result['nom'];
//recupère la variable ordre du lien
$ordre=$_GET['ordre'];//2
$ordre1=$ordre+1;//3
$ordre2=$ordre;//2
//màj de l'ordre par rapport à au champs temp (inversion des 2 lignes)
$sql="UPDATE `tickets` SET ordre ='$ordre1' WHERE ordretemp='$ordre'";
mysql_query($sql);
//màj de l'ordre par rapport à au champs temp
$sql="UPDATE `tickets` SET ordre='$ordre' WHERE ordretemp='$ordre1'";
mysql_query($sql);
//màj du champs temp pour qu'il prenne les nouvelles valeurs pour une utilisation futur
$requete= mysql_query('SELECT `ordre` FROM `tickets`');
//je pense qu'il faut un while car il y a 2 champs temp à remettre à jour?
while($result = mysql_fetch_array($requete))
{
$ordre = $result['ordre'];
$sql=mysql_query("UPDATE `tickets` SET ordretemp ='$ordre' WHERE ordre='$ordre'");
}
}
//script pour monter
if($_GET['mod'] == 'moins') {
//celui qui monte UPDATE `tickets` SET ordre=3 WHERE ordre= 2
$ordre=$_GET['ordre'];//2
$ordre1=$ordre-1;//3
$ordre2=$ordre;//2
$sql="UPDATE `tickets` SET ordre ='$ordre1' WHERE ordretemp='$ordre'";
mysql_query($sql);
echo $sql;
echo "
";
//celui qui descend UPDATE `tickets` SET ordre=2 WHERE ordre= 3
$sql="UPDATE `tickets` SET ordre='$ordre' WHERE ordretemp='$ordre1'";
mysql_query($sql);
echo $sql;
$requete= mysql_query('SELECT `ordre` FROM `tickets`');
while($result = mysql_fetch_array($requete))
{
$ordre = $result['ordre'];
$sql=mysql_query("UPDATE `tickets` SET ordretemp ='$ordre' WHERE ordre='$ordre'");
}
}
?>
je m'explique :
Pour éviter d'ecraser la variable je dois conserver l'ordre qu'il avait avant ensuite dès que la maj est fait (càd l'inversion des 2 lignes) je màj le champstemp pour une prochaine utilisation du script
Bon le script n'est pas optimiser (while alors qu'un if suffirait,...)
Voilà chez moi le script à l'air de tourné
(à optimiser surement)!
A mon avis il y a moyen de sauvegarder les valeurs des ordres pour l'inversion par une autre methode
Enfin voilà çà peut p-t t'aider
En tout cas merci pour ton aide
à bientot