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
commePOST
, au lieu de cela, lemethod
devrait êtrePOST
et laaction
doit être l'url de votre serveur de script côté.
Vous devez vous connecter pour publier un commentaire.
Vous imprimez un tas d'entrées avec le même nom dans votre boucle, il n'y a aucun moyen de les différencier sur soumettre.
Essayer quelque chose comme ça: HTML (je l'ai réécrit un peu, le point est à l'intérieur des balises d'entrée)
JS:
PHP:
name
etvalue
. Donc, tous les attributs requis dans lename
avant de l'analyser. J'ai proposé de diviser avec@
, test respiratoire à l'urée il y a d'autres façons.Vous pouvez essayer de corriger la somme des erreurs tout d'abord, comme il est difficile de voir le script PHP erreurs lorsqu'il est appelé avec l'AJAX.
Que tous les enregistrements sont dans une forme unique, nous devons identifier chaque enregistrement individuellement comme "l'utilisateur field123-mis à jour":
js:
HTML while () {} boucle, le nom d'utilisateur sera identifié par l'utilisateur field123:
PHP pour enregistrer dans la bd, de la syntaxe:
</input>
est faux.input
est un Void de la balise et se ferme à l'aide de/>
ou>
tout simplement pas avec</input>
- (si OP utilise il ne signifie qu'il nous faut 😉 ) Aussivalue="
doit se terminer avec un"
.Peut-Être La Solution :
En HTML Changement
à
le faire avec chaque entrée dans la boucle
et vous l'action de la page PHP qui recevra $_POST valeurs dans la gamme
1) si name="ID" est le $_POST['ID'] = string;
2) si name="ID[]" le $_POST['ID'] = array de string;
ensuite, vous pouvez configuration en boucle quelque chose comme cela
Cette technique m'aide beaucoup 🙂