PHP/MySQL uniquement mettre à jour les champs de saisie qui ont été modifiés

La création d'un peu d'admin de ligne de mise à jour que je ne peux pas comprendre en PHP côté serveur. Je veux la requête sql pour mettre à jour $_POST les champs qui ont été modifiés sur la page, de cette façon il ne sera pas de cycle tous les 100 enregistrements.

Voici ma démarche:

1) jQuery écouter changé champs de saisie, puis affectez l'attribut nom de l'utilisateur-champ-mis à jour

2) PHP détecte utilisateur-champ-mis à jour est réglé.

3) Sur "soumettre" recharger, PHP détecte cette entrée, les mises à jour SQL par l'ID de ligne. Comment faire en sorte PHP sait quel champ de saisie va à la ligne ID?

jQuery à jour côté client nom de l'attribut:

    $(".listen").keyup(function() { 
        $(this).attr("name", "user-field-updated");
        })

Générer du HTML admin table qui ressemble à une simple version de phpmyadmin:

<form action="post">
<?php while($rows=mysql_fetch_array($result)) : ?>
<tr>
    <td>The editable field: <input class="listen" type="text" name="user-field" size="4" value="<?php echo $rows['Users'] ?>" />
        <input type="hidden" name="ID" value="<?php echo $rows['ID']; ?>" /></td>
</tr>
<?php endwhile; ?>

    <input type="submit" name="submit-button" value="Click to update only fields I changed" />
</form>

Au bas de ma page est un script php qui va déclencher sur reload:

if(isset($_POST['submit-button'])) {

    foreach($_POST as $name => $value) {
        if(isset($_POST['user-count-updated'])){
            $ID = $_POST['ID'];
            $sql = "UPDATE $tbl_name SET $name = $value WHERE id = '$ID'";
            $q->execute($db->prepare($sql)); 
        }
    }

};

Une question qui pourrait être posée est la suivante: En PHP, comment puis-je "groupe" les valeurs liées à la soumission d'un formulaire qui permettra de mettre à jour les différentes lignes dans une base de données? Comment puis-je faire des connaissances en PHP qui ligne je veux mettre à jour avec le champ de saisie.


Solution créés sur la base des jacouh

jQuery changements de nom du champ attribut du champ de texte ET insère un nouveau caché d'entrée pour déclencher la fonction isset variable ci-dessous..

    $(".trigger-changed").keyup(function() { 
        $(this).addClass("changed");
        $(this).attr("name", $(this).data("name")).off("keyup");
        $("#mainform").append('<input type="hidden" name="user-updated"></input>')
        })

html

<td><input type="text" size="4" name="nochange" data-name="userfield@<?php echo $rows['ID'] ?>" value="<?php echo $rows['Users'] ?>" class="trigger-changed"></input></td>

php détecter une entrée a changé (juste un général de déclenchement générale, non spécifique du champ lui-même). Puis aller de l'avant et d'analyser la valeur de nom. En cas de succès de rechargement.

if(isset($_POST['user-updated'])) {
    foreach($_POST as $key => $value) {
        if($name != 'nochange'){
            $name = strtok($key, '@');
            $ID = strtok("\n");
            $sql = "UPDATE $tbl_name SET Users = $value WHERE ID = '$ID'";
            $result = mysql_query($sql);
            if($result){
                echo "<meta http-equiv=\"refresh\" content=\"0;URL=index.php\">";
                }
        }
    }
}

J'ai également consulté un ami qui a proposé une multitude de façons de construire un nouveau tableau pour l'impression caché entrée des balises dans le code html lui-même. Je pense que c'est la solution la plus compacte pour un simple changement.

  • Votre PHP partie, ce qui est $nom de la variable dans une requête sql? Est-il toujours à l'utilisateur de champ'?
  • Pour une chose, vous avez besoin de changer id = $ID" à id = '$ID'"
  • Je ne pense pas que j'ai présenté ou posé cette question correctement. Mais de toute façon, mon JS modifie utilisateur-champ pour devenir utilisateur-champ mis à jour. C'était une façon d'avoir des connaissances en PHP si cette variable a été définie. Je me demandais si je devrais juste avoir PHP créer un nouveau tableau, puis faire défiler que dans le SQL de mise à jour.
  • Est-il toujours un champ par ligne, ou pourrait-il y avoir plusieurs champs par ligne ce qui pourrait changer? La réponse est différente si un seul champ est modifié par ligne, avec plusieurs champs dont vous avez besoin d'un peu de type de syntaxe de tableau pour les entrées.
  • pas regardé la partie PHP dans le détail, mais j'ai remarqué que vous avez votre formulaire action comme POST, au lieu de cela, le method devrait être POST et la action doit être l'url de votre serveur de script côté.
InformationsquelleAutor efwjames | 2013-10-20