web-dev-qa-db-fra.com

Comment vérifier si mon $ wpdb-> insert () a réussi?

J'essaie d'écrire un petit script dans mon footer.php (que je transformerai plus tard en plugin) qui envoie deux champs de formulaire à une table personnalisée (wp_newsletter). J'envoie déjà le formulaire et écrit correctement à la table, mais je ne sais pas comment envoyer un message de réussite ou d'échec à l'utilisateur. Mon code actuel est le suivant:

<form method="post">
  <input type="text" name="user_name">Name
  <input type="text" name="user_email">Email
  <input type="submit">
  <?php echo $message;  ?>
</form>

<?php
global $wpdb;
$table   = $wpdb->prefix . "newsletter";
$name    = sanitize_text_field( $_POST["user_name"] );
$email   = sanitize_email( $_POST["user_email"] );
$message = "";


if( isset($_POST["submit"]) ) {
  if ( is_email($email) && isset($name)) {
    if ( $wpdb->insert( $table, array("name"  => $name, "email" => $email)) != false ) {
      $message = "Your subscription was sent.";
    }
  }
  else {
    if ( !is_email($email) ) {
        $message = "Invalid email address.";
    } elseif ( !isset($name) ) {
        $message = "The field name is mandatory.";
    } else {
        $message = "Both name and email fields are mandatory.";
    }
  }
} else {
    $message = "Please, try again later.";
}
?>


<?php wp_footer(); ?>

</body>
</html>

Je (pense) le teste correctement, conformément au $ wpdb docs qui dit que:

Cette fonction renvoie false si la ligne n'a pas pu être insérée. Sinon, il retourne le nombre de lignes affectées (qui sera toujours 1).

1
vcamargo

Quand j’ai réalisé que PHP est l’acronyme de "PHP Hypertext Preprocessor" - accent mis sur "préprocesseur" - j’ai enfin compris que je ne pouvais pas mélanger PHP et HTML et en attendre type d'interactivité avec l'utilisateur. Quand une page Web est servie, le PHP crée le code HTML, puis le code HTML est affiché par le navigateur. Si l'utilisateur fait quelque chose auquel PHP doit répondre, il doit déclenche une nouvelle page PHP/HTML pour fournir une sorte de réponse. (Une autre solution consisterait à utiliser AJAX pour envoyer des données sans devoir charger une nouvelle page. Wordpress fonctionne bien avec AJAX et il existe des tutoriels accessibles à partir de Google.)

Pour un formulaire simple comme le vôtre, javascript serait utile pour la vérification des erreurs. Si le formulaire n'est pas rempli, empêchez son envoi avec JS. Si le formulaire est complet, l'action du formulaire peut être un fichier .php qui insère la base de données et affiche le message de réussite/échec au format HTML.

1
scott

Je suis venu ici via google et ce qui m'a aidé à utiliser les propriétés de l'objet $ wpdb:

$wpdb->last_error 

affiche la dernière erreur si présente

$wpdb->last_query 

montre la dernière requête qui a donné l'erreur ci-dessus

0
luke_mclachlan