web-dev-qa-db-fra.com

Mise à jour d'une valeur de case à cocher dans la base de données pour une ligne spécifique de la table

J'ai écrit un plugin personnalisé pour que les gens puissent s'inscrire à un cours. Les données sont soumises dans un formulaire frontal et stockées dans une table personnalisée de la base de données. Il existe une colonne "course_completed" qui est un booléen dont la valeur par défaut est 0 (non vérifié/faux).

Ensuite, j'ai un tableau qui extrait les données de la base de données des personnes inscrites au cours. Une fois le cours terminé, l’administrateur devrait pouvoir vérifier qui a suivi le cours et cliquer sur Enregistrer. Je ne parviens pas à trouver un moyen pour que, une fois la case à cocher cochée pour une personne, la valeur de "completed_course" soit remplacée par 1 dans la base de données.

Code pour afficher les données de base de données dans une table sur le backend:

<tbody class="alternate">
            <?php
                global $wpdb;
                $table_name = $wpdb->prefix . 'crm';
              $result = $wpdb->get_results ("SELECT * FROM $table_name");
            ?>
            <?php foreach ($result as $field):  ?>
            <tr>
                <td><?php esc_attr_e( $field->id, 'wp_admin_style')?></td>
            <td><?php esc_attr_e( $field->time, 'wp_admin_style')?></td>
            <td><?php esc_attr_e( $field->first_name, 'wp_admin_style')?></td>
            <td><?php esc_attr_e( $field->last_name, 'wp_admin_style')?></td>
            <td><?php esc_attr_e( $field->email, 'wp_admin_style')?></td>
            <td><?php esc_attr_e( $field->phone, 'wp_admin_style')?></td>
            <td><?php esc_attr_e( $field->postcode, 'wp_admin_style')?></td>
            <td><?php esc_attr_e( $field->city, 'wp_admin_style')?></td>
            <td><?php esc_attr_e( $field->address, 'wp_admin_style')?></td>
            <td><?php esc_attr_e( $field->course, 'wp_admin_style')?></td>
            <td><input type="checkbox" name="course_completed" value="1" <?php checked( $field->course_completed, 1 ); ?> /></td>
            </tr>
            <?php endforeach; ?>
        </tbody>

Je ne sais pas si je suis censé utiliser AJAX, un formulaire à l'intérieur de la table ou autre chose.

 mysql  backend table 

1
lukeliasi

Réponse approximative pour commencer.

Dans la boucle, utilisez le numéro d'enregistrement de la ligne (un champ appelé 'IDnumber', unique, auto) pour aider à nommer le d'un.

Le <input> caché devrait avoir un identifiant de quelque chose comme

<input hidden name='idnumber' value='<?php echo $row[idnumber];?>'>

ce qui fera que la valeur de ce champ d'entrée sera le numéro d'enregistrement de cet enregistrement. (Les instructions <input> doivent être en dehors des blocs PHP.)

Utilisez les valeurs $_POST pour déterminer quel enregistrement mettre à jour à l'aide de la valeur de l'élément d'entrée masqué ("idnumber") - qui sera le numéro d'enregistrement que vous souhaitez mettre à jour avec les autres valeurs du formulaire.

La boucle doit être entourée d'un bloc <form> (extérieur à la boucle).

1
Rick Hellewell