Remplir dynamiquement des formulaires HTML à grande échelle : via des valeurs SQL en PHP
P粉765570115
P粉765570115 2023-09-10 17:28:20
0
1
617

Cette question est plus liée au processus/logique que je souhaite implémenter en termes de « SCALE » qu'à la façon d'écrire le code.

Dans WordPress, j'ai plusieurs formulaires qui se chargent au format HTML pour enregistrer un nouvel "événement" lorsque l'utilisateur crée une publication personnalisée (en fait une nouvelle entrée de base de données pour ceux qui ne sont pas familiers avec le CMS) le temps de charger. Je ne veux pas tout mapper manuellement car cela utilise update_post_meta()来设置数据库条目/文章的名称和值 - 所以当提交表单时,我使用php循环foreach ($_POST as $name => $value) { pour remplir toutes les tables de base de données pour cet événement.

Cela fonctionne bien, mais maintenant, si l'utilisateur enregistre le formulaire et revient pour le modifier plus tard, je souhaite que la valeur soit renvoyée comme ceci si elle existe :

<label for="reported_by">报告人(全名)</label>
<?php $reported_by = get_post_meta($incident_id, 'reported_by', true); ?>
<input type="text" name="reported_by" value="<?php echo $reported_by; ?>">

Encore une fois, cette approche fonctionne bien, mais j'ai près de 500 champs sur cette page, donc définir manuellement des variables uniques (dans ce cas $reported_by) pour chaque champ me prendrait beaucoup de temps et augmenterait essentiellement la base de code de près de 50 %, ce qui la rendrait difficile à entretenir et inefficace.

Des idées sur la façon de résoudre ce problème ? Naturellement, je peux créer le formulaire via php et le faire écho en HTML, mais cela ressemble également à un processus très manuel. PHP est côté serveur, donc je ne peux pas facilement obtenir la valeur du nom de la balise/entrée côté client, à moins d'utiliser AJAX, mais j'ai l'impression que cela deviendrait également assez manuel.

Quoi qu'il en soit, je suis confronté à beaucoup de duplication d'efforts, à moins qu'il n'existe un moyen de rendre ce processus plus facile à adapter aux 500 champs sans m'obliger à définir manuellement les noms des variables.

Merci pour votre temps !

P粉765570115
P粉765570115

répondre à tous(1)
P粉308089080

La première chose à noter est que vous n'avez pas réellement besoin de créer une variable locale nommée différemment pour chaque entrée de formulaire. Autrement dit, inutile d'écrire ainsi :

<label for="reported_by">报告人(全名)</label>
<?php $reported_by = get_post_meta($incident_id, 'reported_by', true); ?>
<input type="text" name="reported_by" value="<?php echo $reported_by; ?>">

Vous pouvez écrire comme ceci :

<label for="reported_by">报告人(全名)</label>
<?php $current_value = get_post_meta($incident_id, 'reported_by', true); ?>
<input type="text" name="reported_by" value="<?php echo $current_value; ?>">

Pourquoi est-ce utile ? Parce que maintenant il n'y a plus que deux éléments liés à cette entrée :

  • Tag "Reporter (nom complet)"
  • Nom de champ "reported_by", utilisé à plusieurs endroits

Ces deux ne sont que des chaînes, si faciles à extraire dans des variables PHP :

<?php
$field_name = 'reported_by';
$label = '报告人(全名)';
?>
<label for="<?php echo $field_name; ?>"><?php echo htmlspecialchars($label); ?></label>
<?php $current_value = get_post_meta($incident_id, $field_name, true); ?>
<input type="text" name="<?php echo $field_name; ?>" value="<?php echo $current_value; ?>">

Ceux-ci ressemblent beaucoup à des paramètres, alors transformons cela en fonction, en n'oubliant pas de transmettre également $incident_id :

<?php
function display_input($incident_id, $field_name, $label) {
    ?>
<label for="<?php echo $field_name; ?>"><?php echo htmlspecialchars($label); ?></label>
<?php $current_value = get_post_meta($incident_id, $field_name, true); ?>
<input type="text" name="<?php echo $field_name; ?>" value="<?php echo $current_value; ?>">
    <?php
}
display_input($incident_id, 'reported_by', '报告人(全名)');

Maintenant, il ne vous reste plus qu'à appeler la display_input函数500次就可以显示500个输入项。为了避免这样,可以使用一个数组和foreachloop :

$fields = [
    'reported_by' => '报告人(全名)',
];
foreach ( $fields as $field_name => $label ) {
    display_input($incident_id, $field_name, $label);
}

Vous pouvez ensuite obtenir le tableau à partir d'un fichier de configuration ou d'une table de base de données au lieu de le coder en dur. Vous avez automatisé la partie répétitive (les détails du rendu HTML), ne laissant que la partie "amusante" : définir la liste des champs à afficher.

Si certains champs doivent être légèrement différents, vous pouvez ajouter des options supplémentaires à la fonction (et au tableau de configuration), mais tant qu'il n'y a pas trop de changements, le code doit rester assez simple et direct.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal