jquery sortable en BDD

x@v
Mammouth du PHP | 570 Messages

23 févr. 2010, 15:07

Bonjour,
je souhaite enregistrer l'ordre d'un menu dans ma table:
mon alert sur la requette est bonne mais ne s'enregistre pas !
        UPDATE categorie SET id=1,
        dateModification= NOW() 
        WHERE id=1;
        UPDATE categorie SET id=2,
        dateModification= NOW() 
        WHERE id=1;
        UPDATE categorie SET id=3,
        dateModification= NOW() 
        WHERE id=3;
        UPDATE categorie SET id=4,
        dateModification= NOW() 
        WHERE id=4;
        UPDATE categorie SET id=5,
        dateModification= NOW() 
        WHERE id=5;
        UPDATE categorie SET id=6,
        dateModification= NOW() 
        WHERE id=6;
        UPDATE categorie SET id=7,
        dateModification= NOW() 
        WHERE id=7;
        UPDATE categorie SET id=8,
        dateModification= NOW() 
        WHERE id=8;
structure de la table
CREATE TABLE IF NOT EXISTS `categorie` (
  `id` mediumint(9) NOT NULL,
  `nom` varchar(250) NOT NULL,
  `baliseTitle` text NOT NULL,
  `dateCreation` datetime NOT NULL,
  `dateModification` datetime NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
je change l'id qui n'est donc pas incrémentable.

le js (jquery ui) :

Code : Tout sélectionner

$("#sortable").sortable({ helperclass : 'movingModule', activeclass : 'sortableactive', hoverclass : 'sortablehover', opacity: 0.8, revert: true, floats: true, tolerance: 'pointer', update: function(){ serial = $(this).sortable('serialize'); $.ajax({ url: "order.php", type: "POST", data: serial, success: function(feedback){ $('#data').html(feedback); alert(feedback); } }); } });
le html
                    <ul id="sortable">    <!-- menu catégorie -->
                        <?php 
                        $i=1;
               	        $sql="SELECT *, DATE_FORMAT(dateCreation, '%d/%m/%Y \à %H%i') as dateCreation, DATE_FORMAT(dateModification, '%d/%m/%Y \à %H%i') as dateModification FROM categorie ORDER BY id ASC";
                        $result=$connection->select($sql);
                        foreach ($result as $row):?>
                        <li id="ordreCat_<?php echo $row['id']?>">
                            <span class="id"><?php echo $i?></span> / 
                            <?php echo $row['nom']?>
	                        <a href="admin/index.php?admin=formulaireCategorie&modifierCategorie=<?php echo $row['id']?>" title=" modifier : <?php echo $row['nom']?>">
                                <img src="./admin/adminImg/Modify.png" class="imgEditionTaille" />
                        	</a>
                            <a href="admin/requete.php?suprimerCategorie=<?php echo $row['id']?>" class="suprimerCategorie" title=" suprimer : <?php echo $row['nom']?>">
                                <img src="./admin/adminImg/Delete.png" class="imgEditionTaille" />
                            </a>
                        </li>
                        <?php $i++?>
                        <?php endforeach;?>
                    </ul>
la page order.php :
require_once('./class/class.pdo.php');
$connection = new Connection();
if(isset($_POST['ordreCat']))
{
        $i=1;
    foreach ($_POST['ordreCat'] as $val => $cle)
    {
        
        $sql="
        UPDATE categorie SET id=".$i.",
        dateModification= NOW() 
        WHERE id=".$cle.";";
        $result= $connection->select($sql);
        echo $sql;
               $i++;
    }
}

x@v
Mammouth du PHP | 570 Messages

24 févr. 2010, 01:34

la réponse est dans la création d'un autre champ, puisque la serialisation renvoie les anciennes et les nouvelles valeurs

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

24 févr. 2010, 12:16

Je ne comprends... rien :?
Ni la question ni la réponse (si ça en est une) désolé

Comme ça peut servir à d'autres ça serait bien de refaire un topo :)

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

x@v
Mammouth du PHP | 570 Messages

24 févr. 2010, 13:16

c'est pour une administration d'un blog open source.
dans deux jours je partage le code.
J'ai du refaire la structure de la base et utiliser deux champs pour le trie...

Applejuice
Invité n'ayant pas de compte PHPfrance

02 mars 2010, 11:51

Je viens peut-être un peu tard, mais j'ai aussi cherché longtemps et je crois que ce que tu (on) cherche est ici:

http://www.wil-linssen.com/musings/entr ... jax-mysql/

Tout est emballé, pesé et écrit.
Y a plus qu'à copy/paste. :wink:

x@v
Mammouth du PHP | 570 Messages

02 mars 2010, 12:14

il y a un probleme avec sont update, ça m'étonnerais qu'il fonctionne.
Il trie les id mais pas la colonne trie.
C'était justement ce que j'avais fait.

Applejuice
Invité n'ayant pas de compte PHPfrance

15 mars 2010, 22:14

Pourtant ça marche bien sur la démo du site. D'ailleurs, il fait un "print_r" de chaque requete SQL.
Regarde: à chaque changement, pour chaque ID, il y a une nouvelle position.
De plus il montre les requêtes dans l'ordre "position".

En fait, il fait un "foreach" pour chaque occurrence du tableau "listItem[]" créée par le script JQuery (en php, l'équivalent de listItem[position]=id) .
A chaque "foreach", il appelle l'ID ($id) auquel il donne le nouvel ordre ($position) créé par la fonction ('serialize') de Jquery.

applejuice
Invité n'ayant pas de compte PHPfrance

16 mars 2010, 00:14

Ca m'a l'air un peu plus compliqué, mais il y a ça aussi.

http://www.webresourcesdepot.com/dynami ... ry-and-php

x@v
Mammouth du PHP | 570 Messages

16 mars 2010, 02:42

j'ai mis la possibilité de modifier les catégories en drag and drop.

http://groups.google.fr/group/blognline ... tion?hl=fr

open source...

Applejuice
Invité n'ayant pas de compte PHPfrance

31 mars 2010, 21:35

Voilà, j'ai essayé dans mon cms le code qui se trouve sur le blog de Musings et ça marche à merveille. :D
http://www.wil-linssen.com/musings/entr ... jax-mysql/

J'ai adapté le remplissage du tableau en requête sql et rajouté "$position++" dans la boucle "foreach" car je voudrais le commencement du classement à 1, c'est tout ce que j'ai fait. :P
Et, comme dans ta démo, ça marche en combinaison avec d'autres liens et fonctions dans les DIV.

Sinon, elle est pas mal aussi ta demo... :wink:

x@v
Mammouth du PHP | 570 Messages

31 mars 2010, 22:20

Merci :)

je trouve que c'est un enchantement...