jQuery UI épargne liste triable de tableau PHP

Je suis en train d'enregistrer la commande d'un tableau avec jQuery UI (triable) à un tableau PHP.

J'ai simplifié à outrance, mais c'est l'idée de base. J'ai une table avec une liste triable incorporé. La table est générée en PHP foreach impliquant les tableaux multi-dimensionnels qui est inclus dans un autre fichier (config.php).

config.php:

<?php
$config     = array(
    "mno" => array('item 5'),
    "abc" => array('item 1'),
    "ghi" => array('item 3'),
    "pqr" => array('item 6'),
    "jkl" => array('item 4'),
    "vwx" => array('item 8'),
    "def" => array('item 2'),
    "stu" => array('item 7'),
);
?>

table (index.html):

<table cellpadding="2" cellspacing="0" align="center" id="mytable">
    <tbody>
<?php
    $i = 0;
    include 'config.php';
    foreach($config AS $name => $value){
        $item = $value[0];
        echo '
        <tr id="'.$name.'-'.$i++.'">
            <td>'.$item.'</td>
        </tr>';
    }
?>
    </tbody>
</table>

scripts (index.html):

<!-- Add jQuery library -->
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script>
<!-- Add jQuery UI library -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js"></script>
<script type="text/javascript">
    $(document).ready(function() {
        var fixHelper = function(e, ui) {
            ui.children().each(function() {
                $(this).width($(this).width());
            });
            return ui;
        };

        $("#mytable tbody").sortable({
            helper: fixHelper,
            opacity: 0.5,
            scroll: false,
            update: function () {
                var data = $('#mytable tbody').sortable('serialize');
                $.post("edit.php", {'neworder': data});
            }
        }).disableSelection();
    });
</script>

Le tri fonctionne très bien mais je ne sais pas comment enregistrer les neworder valeur ($_POST['neworder']) dans le tableau, ce qui est dans config.php.

Je pense que je dois utiliser les fonctions PHP uasort() (ou uksort(), uksort()) avec la combinaison de file_put_contents pour enregistrer le nouvel ordre config.php.

Donc quelque chose comme ceci:

<?php
if($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['neworder'])) {
    /* 
    Here file_put_contents in config.php the new order. So:
    $config     = array(
        "mno" => array('item 5'),
        "abc" => array('item 1'),
        "ghi" => array('item 3'),
        "pqr" => array('item 6'),
        "jkl" => array('item 4'),
        "vwx" => array('item 8'),
        "def" => array('item 2'),
        "stu" => array('item 7'),
    );

    Becomes:
    $config     = array(
        "abc" => array('item 1'),
        "def" => array('item 2'),
        "ghi" => array('item 3'),
        "jkl" => array('item 4'),
        "mno" => array('item 5'),
        "pqr" => array('item 6'),
        "stu" => array('item 7'),
        "vwx" => array('item 8'),
    );

    After this is send by Jquery UI:
    neworder:abc[]=1&def[]=6&ghi[]=2&jkl[]=4&mno[]=0&pqr[]=3&stu[]=7&vwx[]=5

    I've tried this:
        $filename = 'config.php';

        $lines = file( $filename , FILE_IGNORE_NEW_LINES );
        $linenumber = 2;
        foreach( $_POST['neworder'] AS $name => $val){
            $phost = $val[0];

            $lines[$linenumber] = ' "'.$name.'" => array(\'' . $phost . '\'),';
            $linenumber++;
        }

        file_put_contents( $filename , implode( "\n", $lines ) );

    But the '$val' is not send with Jquery only the order.

    */  
}
?>
L'enregistrement des données dans les fichiers php est une mauvaise idée. Vous pouvez les stocker dans certains json ou xml format. Si vous avez besoin de le faire sur une plus grande échelle/de plus en plus fréquemment, vous devez utiliser une base de données.
Salut, je veux vous aider, vous et pense que c'est pas si dur, mais je veux savoir pourquoi vous le faites dans cette mauvaise voie? Puis-je modifier une partie de ce qu'il est devenu meilleur? Je veux dire, en général, une table avec deux ou plusieurs colonnes peuvent être triées avec jui et ses sortes ou que l'utilisateur clique sur un bouton, la nouvelle commande enregistrer? pourquoi ne pas utiliser JSON ou XML format pour enregistrer? et un fichier nommé JSON_Config_reader.php en sorcière lit ce fichier JSON et faire de ce tableau?
vous savez quoi. Tu pourrais juste mettre un commentaire pour me dire 'c'est gentil d'essayer".

OriginalL'auteur user1480019 | 2013-06-22