Page 1 sur 1
monter et descendre une ligne
Posté : 17 juin 2010, 21:28
par pom'
Bonjour,
C'est un petit peu compliqué et mon esprit s'embrouille, sans doute aurez vous des conseils à me donner.
Je récupère de ma bdd, une liste de nom + id, j'aimerai pouvoir les déplacer dans la liste, monter/descendre. Pour celà j'ai créé une seconde table : ordre, avec un champ number (order by number asc). Sur chaque ligne j'ai 2 boutons, jusque là ça va. quand je veux faire monter ma ligne, je soustrais 1 à number... MAIS, comment faire pour qu'en même temps il additionne 1 à la ligne du dessus ?
mes recherches

:
Code : Tout sélectionner
$numberA = $number-1;
$reqListe=mysql_query("SELECT * FROM transp_ordre WHERE number=$numberA");
while ($ligne=mysql_fetch_assoc($reqListe)){
echo $numberA.".".$id_transport;
}
dans cet exemple je voulais qu'il m'affiche l'id de la ligne du dessus, mais non, il retire 1 à number mais garde l'id de la ligne sélectionnée...

je ne sais pas si vous me suivez là ???
Pourriez vous me mettre sur la voie, en m'aidant à décomposer la méthode à suivre ?
merci beaucoup. Pom'.
Re: monter et descendre une ligne
Posté : 17 juin 2010, 22:40
par Aureusms
Je ferais comme toi mais pas ainsi (ou ai-je mal compris)
Si je pars d'un table "essai" de la sorte :
colonne1 colonne2
numero_ligne position
1 1
2 3
3 2
4 4
Et que je veux passer la ligne 4 en position 1 i.e.
1 deviendra 2
3 deviendra 3
2 deviendra 4
Donc tu sélectionnes d'abord ta table complète pour savoir qui est où :
<?php
$requete = "SELECT position FROM essai WHERE numero_ligne='4' LIMIT 1";
$resultat_sql = mysql_query($requete);
$resultat = mysql_fetch_row($resultat_sql);
$ancienne_position = $resultat[0];
?>
Ensuite tu identifies qui se trouve au dessus ou en dessous (cela depend si tu veux monter ou decendre la valeur)
ici je monte
$requete = "SELECT numero_ligne FROM essai WHERE position < '".$ancienne_position."' order by position ASC";
$resultat_sql = mysql_query($requete);
$tab_temp = array();
while ($resultat = mysql_fetch_row($resultat_sql))
{
$tab_temp[] = $resultat[0];
}
Ensuite je met la nouvelle valeur au numéro de ligne et j'augmente les valeurs des autres :
$requete = "UPDATE essai SET position = '$nouvelle_position' WHERE numero_ligne = '$numero_ligne'";
mysql_query ($requete);
foreach ($tab_temp as $valeur)
{
$requete = "UPDATE essai SET position = position+1 WHERE numero_ligne = '$valeur'";
mysql_query ($requete);
}
Re: monter et descendre une ligne
Posté : 17 juin 2010, 23:53
par pom'
oooOOOOh !!! super, merci beaucoup Aureusms l =D> =D> =D>
c'est exactement ça qu'il me fallait, j'ai juste apporté une petite modif pour que la ligne sélectionnée ne grimpe pas en haut de la liste d'un coup, mais bien en montant de ligne en ligne.
Je n'en reviens pas. Merci, j'ai compris ton code et réussi à l'adapter.
Un grand merci à tous ceux qui prennent du temps pour nous aider et nous soutenir dans la longue découverte du php !!!
Bonne soirée.
Pom'
Re: monter et descendre une ligne
Posté : 12 juil. 2010, 17:33
par kristowitz
salut Areusms,
dans le morceau de code ci-dessous je ne comprend pas d'ou proviennent tes fonctions '$nouvelle_position' , '$numero_ligne'" et '$valeur'.
Il y'a sûrement un bout de script intermédiaire qui l'explique et que tu n'as pas affiché. Pourrais tu m'en faire part stp? Et que veut dire $tab_temp? Est ce que cette variable devient en fait $nouvelle_position?
je développe un site dans lequel j'ai besoin de faire monter/descendre des actualités, donc des enrtegistrements dans ma base de donnée. Ton code correspond pile à ce que je recherche, et les tutos et scripts sont rares à ce sujet ou alors sont tordus.
merci pour ton éclairage
cordialement,
K.
$requete = "UPDATE essai SET position = '$nouvelle_position' WHERE numero_ligne = '$numero_ligne'";
mysql_query ($requete);
foreach ($tab_temp as $valeur)
{
$requete = "UPDATE essai SET position = position+1 WHERE numero_ligne = '$valeur'";
mysql_query ($requete);
}
Re: monter et descendre une ligne
Posté : 13 juil. 2010, 14:38
par Aureusms
Regarde un peu plus haut, c'est le résultat de la requète :
$requete = "SELECT numero_ligne FROM essai WHERE position < '".$ancienne_position."' order by position ASC";
$resultat_sql = mysql_query($requete);
$tab_temp = array();
while ($resultat = mysql_fetch_row($resultat_sql))
{
$tab_temp[] = $resultat[0];
}
Re: monter et descendre une ligne
Posté : 14 juil. 2010, 16:29
par kristowitz
merci Areusms mais je ne comprend toujours pas... je ne suis certes pas une star en php, mais je ne comprend pas d'ou sortent ces trois variables ($valeur, $ nouvelle_position, $numero_ligne) tout d'un coup... je ne vois pas ou tu les
déclare. Peut être que pour $valeur c'est ok mais les autres... c'est ca que je ne capte pas. Ou est le lien entre ces variables et le reste? Elles ne se déclarent pas toutes seules qd même?

Peut êter que Pom peut aussi me dire comment ca a marché pour lui (elle?)? Merci à vous deux. K.
Re: monter et descendre une ligne
Posté : 15 juil. 2010, 16:01
par Aureusms
Désolé, je n'ai pas trop le temps de te répondre aujourd'hui.
Je vais faire en sorte de te faire un code un peu plus complet si j'ai le temps.
Re: monter et descendre une ligne
Posté : 22 juil. 2010, 16:00
par kristowitz
ok merci Areusm. J'attend de tes nouvelles car je n'arrive vraiment pas à lier ces deux parties de code....
K.
Re: monter et descendre une ligne
Posté : 18 août 2010, 16:08
par kristowitz
Salut Areusms,
j'ai essayé de faire fonctionner ce script ci dessous pour fairer monter et descendre un enregistrement dans une BDD... J'ai repris ta structure en essayant de l'adapter à mon besoin, mais après quelques heures de cogitation rien n'y fait... j'arrive à monter une ligne deux ou trois fois puis j'ai un message d'erreur, donc c'est pas bon. Et puis je n'arrive pas à attribuer un nouveau numéro de position à l'enregistrement positionné au dessus... Bref c'est la bérézina complête.
Pour info (si tu veux bien m'aider), j'ai créé une bdd "actualites" avec les champs "id", "description" et "position", que tu retrouves dans ce script.
Cette page est celle pour faire monter un enregistrement, je lui passe un numéro de ligne en paramêtre (php?monter_actu), car je séléctionne une ligne sur une page d'affichage standard que je veux déplacer vers le haut.
Merci de m'aider. Si tu trouve ce que j'ai fait tordu, pourrais tu complêter le script que tu a fais car d'après POM ca fonctionne bien. Si tu n'as pas le temps ou si tu ne souhaite pas répondre à ma demande préviens moi.
Merci, à bientôt j'espère.
Kris
PS : Pom, si tu tombes sur ce post, peut tu me donner un coup de main? Merci.
<?php
@mysql_connect("localhost", "root", "") or die("Connexion impossible");
@mysql_select_db("lancelot") or die("Echec de selection de la base");
?>
<?php
if(isset($_GET['monter_actu'])){
$monter_actu = $_GET['monter_actu'];
}
$req_positionCourante = "SELECT position FROM actualites WHERE id='".$monter_actu."' LIMIT 1";
$res_positionCourante = mysql_query($req_positionCourante);
$positionCourante = mysql_fetch_row($res_positionCourante);
$ancienne_position = $positionCourante[0];
echo $positionCourante[0];
$numero_ligne = $positionCourante[0];
?>
<?php
$req_positionSup = "SELECT id FROM actualites WHERE position < '".$ancienne_position."' order by position DESC LIMIT 1";
$res_positionSup = mysql_query($req_positionSup);
$tab_temp = array();
while ($positionSup = mysql_fetch_row($res_positionSup))
{
$tab_temp[] = $positionSup[0];
echo $positionSup[0];
}//pourquoi une boucle et un tableau ici?
$nouvelle_position = $positionSup[0];
?>
<?php
$requete = 'UPDATE actualites SET position = '.$nouvelle_position.' WHERE id = '.$numero_ligne.'';
mysql_query ($requete);
foreach ($tab_temp as $valeur)
{
$requete = 'UPDATE actualites SET position = position+1 WHERE id = '.$valeur.''; //$valeur = $nouvelle_position
mysql_query ($requete);
}
$res = mysql_query($requete) or die(mysql_error());
if ($requete)
{?>
<div class=confirme><?php echo 'L\'actualité \''.$resAff['titreItem'].'\' a bien été supprimée!<br/><a href="actu.php">Retour à la liste</a>';?></div>
<?php }
?>
Re: monter et descendre une ligne
Posté : 13 sept. 2010, 23:59
par pom'
Bonjour Kristowits,
je ne tombe qu'à l'instant sur cet ancien post.
J'espère que tu as réussi à résoudre ton problème.
Pour tout ceux que ça pourrai dépanner, voilà mon bout de code :
Code : Tout sélectionner
// on sélectionne la table pour voir qui est où :
$requete = "SELECT number FROM maTable_ordre WHERE number=$number LIMIT 1";
$resultat_sql = mysql_query($requete);
$resultat = mysql_fetch_row($resultat_sql);
$ancienne_position = $resultat[0];
if ($ancienne_position=="1"){
$nouvelle_position=$ancienne_position;
} else {
$nouvelle_position=$ancienne_position-1;
// on identifie ce qui est au dessus
$requete = "SELECT id_transport FROM maTable_ordre WHERE number = '".$nouvelle_position."' order by number ASC";
$resultat_sql = mysql_query($requete);
$tab_temp = array();
while ($resultat = mysql_fetch_row($resultat_sql))
{
$tab_temp[] = $resultat[0];
}
// met la nouvelle valeur au numéro de ligne et j'augmente les valeurs des autres
$requete = "UPDATE maTable_ordre SET number = '$nouvelle_position' WHERE id_transport = '$id_transport'";
mysql_query ($requete);
foreach ($tab_temp as $valeur)
{
$requete = "UPDATE maTable_ordre SET number = number+1 WHERE id_transport = '$valeur'";
mysql_query ($requete);
}
}
Re: monter et descendre une ligne
Posté : 30 sept. 2010, 15:52
par kristowitz
merci pom mais c'est too late pour moi, je me suis débrouillé, merci qd même! J'y regardearais qd j'aurais le,temps! ciao.