Arrangement dynamique d'un tableau

Description

Bonjour,
Ceci est ma toute première contribution, qui n'aurait pu se faire sans Anthomicro et ... . Merci à eux donc.
Pour mon projet, j'avais besoin de créer un tableau, dans lequel les lignes pouvaient monter ou descendre dans le tableau, à volonté.
Le nom de la table est important ; tous les champs de la table se termin par "_nomdelatable" ; un champ "clt_nomdelatable" est nécessaire.
Cela se compose en 3 fichiers : list_divi.php (affichage du tableau), up.php (script de montée) et down.php (devinez ...) :

Source / Exemple :


code de list_divi.php :
<html>
<head>
<title></title>
</head>
<body>

<?php
/* Connexion et sélection de la base */
$link = mysql_connect("votre serveur", "login user", "password user")
    or die("Impossible de se connecter");
// echo "Connexion réussie";
mysql_select_db("votre base") or die("Impossible de selectionner la base");

$query = "select * from divi order by clt_divi asc"; // ma table s'appelle comme ça
$result = mysql_query($query) or die("Query failed : $query");
?>

<table>
  <?php
  // création du tableau issu de la table
  while ($divi = mysql_fetch_array($result)) { ?>
  <tr>
    <td bgcolor="<?php echo $divi['4']; ?>" colspan="1" rowspan="2"><a href="details.php?id_divi=<?php echo $divi['id_divi']; ?>"><img src="../images/details.gif" title="Afficher les détails" name="details" width="27" height="27" border="0" align="absmiddle" id="details"></a></td>
    <td bgcolor="<?php echo $divi['4']; ?>" colspan="1" rowspan="2"><a href="update.php?id_divi=<?php echo $divi['id_divi']; ?>"><img src="../images/update.gif" title="Modifier l'enregistrement" name="details" width="27" height="27" border="0" align="absmiddle" id="details"></a></td>
    <td bgcolor="<?php echo $divi['4']; ?>" colspan="1" rowspan="2"><a href="delete.php?id_divi=<?php echo $divi['id_divi']; ?>"><img src="../images/delete.gif" title="Supprimer l'enregistrement" name="details" width="27" height="27" border="0" align="absmiddle" id="details"></a></td>
    <td bgcolor="<?php echo $divi['4']; ?>" colspan="1" rowspan="2"><?php echo $divi['1']; ?></td>
    <td bgcolor="<?php echo $divi['4']; ?>" colspan="1" rowspan="2"><?php echo $divi['2']; ?></td>
    <td bgcolor="<?php echo $divi['4']; ?>">
    <form action='up.php' method='POST'>                                               <?php /*formulaire pour monter une ligne*/ ?>
	<input type='hidden' name="id_up" value="<?php echo $divi['0']; ?>" size="2">  <?php /*envoi de l'id de la ligne*/ ?>
	<input type='hidden' name="clt_up" value="<?php echo $divi['3']; ?>" size="2"> <?php /*envoi du classement de la ligne*/ ?>
	<input type='hidden' name="table_up" value="divi" size="2">                    <?php /*envoi du nom de la table*/ ?>
	<input type='image' src='../images/haut.gif' title='Monter' width='12' height='12' border='0' align='absmiddle'>
    </form></td>
  </tr>
  <tr>
    <td bgcolor="<?php echo $divi['4']; ?>">
    <form action='down.php' method='POST'>                                             <?php /*formulaire pour descendre une ligne*/ ?>
    <input type='hidden' name="id_down" value="<?php echo $divi['0']; ?>" size="2">    <?php /*envoi de l'id de la ligne*/ ?>
    <input type='hidden' name="clt_down" value="<?php echo $divi['3']; ?>" size="2">   <?php /*envoi du classement de la ligne*/ ?>
    <input type='hidden' name="table_down" value="divi" size="2">                      <?php /*envoi du nom de la table*/ ?>
    <input type='image' src='../images/bas.gif' title='Descendre' width='12' height='12' border='0' align='absmiddle'>
    </form>
    </td>
  </tr>
  <?php } ?>
</table>

</body>
<?php
/* Fermeture de la connexion */
mysql_close($link);
?>
</html>

code du script up.php :
<?php
/* Connexion et sélection de la base */
$link = mysql_connect("votre serveur", "login user", "password user")
    or die("Impossible de se connecter");
// echo "Connexion réussie";
mysql_select_db("votre base") or die("Impossible de selectionner la base");

// récupération des données poster par les mini-formulaires
$id = $_POST['id_up'];
$clt = $_POST['clt_up'];
$table = $_POST['table_up'];

//remplace clt_$table par clt_$table-1 pour la ligne considérée
$queryup1 = "UPDATE $table SET clt_$table=clt_$table-1 WHERE id_$table=$id";
$up1 = mysql_query($queryup1) or die("Query failed : $queryup1");

//remplace clt_$table par clt_$table+1 pour la ligne qui possédait le clt_$table remplacé par la première requete
$queryup2 = "UPDATE $table SET clt_$table=clt_$table+1 WHERE clt_$table=$clt-1 and id_$table != $id";
$up2 = mysql_query($queryup2) or die("Query failed : $queryup2");

/* Fermeture de la connexion */
mysql_close($link);

// retour vers le tableau
?>
<script language="javascript">
<!--
document.location.href="./list_<?php echo $table; ?>.php"
//-->
</script>

code du script down.php :
<?php
/* Connexion et sélection de la base */
$link = mysql_connect("votre serveur", "login user", "password user")
    or die("Impossible de se connecter");
// echo "Connexion réussie";
mysql_select_db("votre base") or die("Impossible de selectionner la base");

// récupération des données poster par les mini-formulaires
$id = $_POST['id_down'];
$clt = $_POST['clt_down'];
$table = $_POST['table_down'];

//remplace clt_$table par clt_$table+1 pour la ligne considérée
$querydown1 = "UPDATE $table SET clt_$table=clt_$table+1 WHERE id_$table=$id";
$down1 = mysql_query($querydown1) or die("Query failed : $querydown1");

//remplace clt_$table par clt_$table-1 pour la ligne qui possédait le clt_$table remplacé par la première requete
$querydown2 = "UPDATE $table SET clt_$table=clt_$table-1 WHERE clt_$table=$clt+1 and id_$table != $id";
$down2 = mysql_query($querydown2) or die("Query failed : $querydown2");

/* Fermeture de la connexion */
mysql_close($link);

// retour vers le tableau
?>
<script language="javascript">
<!--
document.location.href="./list_<?php echo $table; ?>.php"
//-->
</script>

Conclusion :


Bon ce n'est pas parfait. Il y a des redondances. Ce n'est franchement pas optimisé mais ça marche. L'idéale serait de ne pas recharger la page "list_divi.php" ....
Encore une fois, c'est ma première contrib.

Codes Sources

A voir également