Titre: ordre
Posté par: calenfeaion le le 11-06-2005 a 14:18:40
Bonjour à tous,
Je voudrais savoir géré l'ordre de mes partenaires. J'avais pensé a un système de chiffre et puis une requête qui sort les partenaires par ordre croissant. Mais je voudrais qu'il soit possible de les changé de place pars après et là je suis calé :-\
Auriez-vous une meilleur idée ?
Merci, Calen |
Titre: Re:ordre
Posté par: MFred le le 11-06-2005 a 14:57:18
Tu veux pouvoir les classer par quel critère : le nombre de visiteurs qu'ils t'apportent, l'ordre alphabétique ... ou tout simplement les classer dans un ordre que tu définis "arbitrairement" ? Tu utilises déjà un script pour gérer la liste de tes partenaires, ou tu l'as fais toi-même ? |
Titre: Re:ordre
Posté par: calenfeaion le le 11-06-2005 a 22:56:06
En faite je voudrais les classés de façon arbitraire. Puis pouvoir les monter/descendre à volontier. Le script est bien sûr de moi :D
En faite je n'arrive pas à trouver une façon de le faire. |
Titre: Re:ordre
Posté par: erwinol le le 12-06-2005 a 13:15:38
Si tes partenaires sont dans ta DB il suffit de mentionner un numéro d'ordre à chaque tuple.
Ensuite lorsque tu déplaces un élément, tu incrémentes tous les éléments supérieurs et tu intercales l'élément que tu déplaces.
C'est vraiment tout bête. |
Titre: Re:ordre
Posté par: MFred le le 12-06-2005 a 13:59:18
Une solution :
Tu crées un champ TINYINT dans la table qui contient tes partenaires, nommé "position". Tu leur attribues pour commencer des numéros allant de 1 à 5 (si tu as 5 sites partenaires).
Ensuite, dans ta "zone d'administration", tu crées une page avec un formulaire, de ce style :
Code:
<?php // ... echo '<form method="post" action="trier_les_partenaires.php">'; $select_part=mysql_query('SELECT id,nom, position FROM table_des_partenaires ORDER BY position'); $num_part=mysql_num_rows($select_part); // Nombre de partenaires
while ($fetch=mysql_fetch_assoc($select_part)) { echo $fetch['nom'].' ; Position : <select name="position_partenaire_'.$fetch['id'].'">'; $i=0; while ($i<$num_part) { $i++; echo '<option value="'.$i.'" '; if ($i==$fetch['position']) { echo 'selected="selected"'; } echo '>'.$i.'</option>'; } echo '</select><br />'; } echo '</form>'; |
|
Après il faut construire la requete pour updater tout ca, sur la page trier_les_partenaires.php. Tu y arriveras ? |
Titre: Re:ordre
Posté par: calenfeaion le le 12-06-2005 a 14:13:54
C'est justement le traitement qui pose problème :D
J'avais déjà réfléchis à ton truc, erwinol. En faite si j'increment l'élèment à déplacé, je dois juste "décrementé" l'élèment juste au dessus comme sa:
// On monte le partenaire n°2 Partenaire 1 : n°1+1=2 // On increment l'élèment suppérieur. Partenaire 2 : n°2-1=1 // On décrement l'élèment à monter. Partenaire 3 : n°3
Et donc il ne faut pas incrementé TOUT les partenaires, ou alors j'ai mal compris ::)
Merci pour ton truc Master-Bilbon, ça va surement mettre utile ;)
Bon je vais aller testé tout çà :D |
Titre: Re:ordre
Posté par: MFred le le 12-06-2005 a 16:05:14
Bah quand tu auras validé le formulaire, ca te renverra un tableau de ce genre : $_POST['position_partenaire_(id)']=(position) Il te suffit donc de parcourir le tableau et de mettre à jour chaque ligne grâce aux infos données. Si tu as (vraiment) beaucoup de partenaires et que tu changes le classement (très) régulièrement, ca risque de te faire beaucoup de requêtes. Dans ce cas, regarde du côté de la soluc' d'erwinol. |
Titre: Re:ordre
Posté par: calenfeaion le le 12-06-2005 a 19:43:57
Bon, j'ai "déjà" écris çà :
Code:
<?php if(isset($_POST['submit'])) { // On traite le formulaire } else { // On affiche le formulaire
require("../modeles/mysql_connect.php"); $select_part = mysql_query('SELECT id_partenaire,nom, ordre FROM calen_partenaires ORDER BY ordre'); $num_part = mysql_num_rows($select_part); // Nombre de partenaires echo "<form action='index.php?p=part_ordre.php' method='POST'>"; while ($ligne = mysql_fetch_assoc($select_part)) { echo $ligne['nom']; echo "Position: <select name='position'>"; $i = 0; while ($i<$num_part) { echo "<option value='$i'"; if ($i == $ligne['id']) { echo 'selected="selected"';} echo ">$i</option>"; } echo "</select>"; }
echo "</form>"; }
|
|
Mais quand j'essaye d'afficher la page, sa met 3 ans (je sais pas, j'ai pas essayer ::) ). Alors je sais pas voir si sa marche...
Je me demande si j'ai pas fait une boucle infinie, mais çà n'a pas l'air... |
Titre: Re:ordre
Posté par: calenfeaion le le 12-06-2005 a 20:13:26
MDR ;D J'avais belle et bien fait une boucle infinie :D J'ai oublié de mettre $i++; ::) Enfin voila, maintenant ça marche !
Plus qu'a faire le traitement... |
Titre: Re:ordre
Posté par: calenfeaion le le 13-06-2005 a 12:33:20
Voila pour le code primaire, pour ceux que ça interresse ::) En faite le plus dur c'était de sélectionner les formulaires dont les nom sont généré automatiquement, dont on ne connais donc pas le nom au traitement :-\\ Enfin je me comprend :D
Code:
<?php if(isset($_POST['submit'])) { // On traite le formulaire require("../modeles/mysql_connect.php"); // Connexion à la base MySQL $select_part = "SELECT id_partenaire,ordre,nom FROM calen_partenaires ORDER BY ordre;"; // Slection des partenaire $result = mysql_query($select_part); // Execution de la requête while ($ligne = mysql_fetch_assoc($result)) { $ordre = $_POST[$ligne['ordre']; // On selectionne le nom du formulaire en fonction de l'ordre $id = $ligne['id_partenaire']; // On prend ID $rq = "UPDATE calen_partenaires SET ordre='$ordre' WHERE id_partenaire='$id';"; // On update $result2 = mysql_query($rq); // On execute la requête if($result2) // Et on la vérifiée { echo "<p>Changement de position pour l'ID ".$ligne['id_partenaire']." (".$ligne['nom'].")"." [ <font color='green'><b>OK</b></font> ]</p>"; } else { echo "Changement de position pour l'ID".$ligne['id_partenaire']." (".$ligne['nom'].")"."[ <font color='red'><b>ECHEC</b></font> ] <br>".mysql_error(); } } } else { // On affiche le formulaire require("../modeles/mysql_connect.php"); // Connexion à la base MySQL $select_part = "SELECT id_partenaire,nom,ordre FROM calen_partenaires ORDER BY ordre;"; $result = mysql_query($select_part); $num_part = mysql_num_rows($result); // Nombre de partenaires echo "<form action='index.php?p=part_ordre.php' method='POST'>\n"; echo "<table>\n"; echo "<tr><td><b>ID</b></td>\n <td><b>Nom du partenaire</b></td>\n <td><b>Position actuelle</b></td>\n <td><b>Changement à effectuer</b></td>\n </tr>\n"; $i = 0; while ($ligne = mysql_fetch_assoc($result)) { $i++; echo "<tr>\n <td>".$ligne['id_partenaire']."</td>\n"; echo "<td>".$ligne['nom']."</td>\n"; echo "<td>".$ligne['ordre']."</td>\n"; echo "<td><select name='".$ligne['ordre']."'>\n"; $i2 = 0; while ($i2<$num_part) { $i2++; echo "<option value='$i2'"; if ($i == $i2) { echo 'selected="selected"';} echo ">$i2</option>\n"; } echo "</select>\n</td>\n </tr>\n"; } echo "<tr>\n <td colspan='4'>\n <input type='submit' name='submit' value='Effectuer les changements de positions'>\n </td>\n </tr\n>"; echo "</table>\n"; echo "</form>\n"; } ?>
|
|
Pas faché d'être arrivé au bout moi ;D |
Forum-webmaster | Actionné par YaBB SE
© 2001-2003, YaBB SE Dev Team. Tous droits réservés.
|