web-dev-qa-db-fra.com

Insertion de données dans des tableaux personnalisés

J'essaie de créer des tables d'entrée personnalisées pour envoyer des données dans des tables personnalisées sur la base de données wp. Je ne peux rien faire avec mon script. L'utilisateur entrera un type d'alcool, comme la vodka ou le whisky, fournira une description et l'enverra à la base de données contenant des tableaux personnalisés dans la base de données wordpress. J'ai le code html dans une page wordpress et le php dans un fichier nommé setLiquorType.php qui se trouve dans le dossier wordpress principal.

Formulaire HTML

<form method = "post" action = "setLiquorType.php">
Add a New Liquor Type</br></br>
<p>Name: <input type="text" name="name"/></p>
<p>Description <input type="text" name="description"/></p>
----------------------------------------------
<input type="submit" value="Submit"/>
</form>
</br>

Mon script php

<?php 
$name = $_POST['name'];
$global $wpdb, $name, $description;
$table_name = $wpdb->prefix . "Liquor Type";
$wpdb->insert($table_name, array(
                            'lq_name' => $lq_name,
                            'description' => $lq_descrip
                            ),array(
                            '%s',
                            '%d')
    );
}
?>

Toute aide est la bienvenue

4
Matthew

Vous avez dit que votre formulaire est dans le dossier principal? Je suppose que vous devez définir une URL correcte pour action="". Tu pourrais essayer:

action="<?php echo site_url() . '/setLiquorType.php'; ?>"

Il est recommandé de mettre votre code de formulaire dans functions.php, puis de laisser le formulaire. action = "" vide. Ensuite, vous pouvez déclencher votre fonction de formulaire lorsque le formulaire est soumis.

Votre formulaire HTML:

<form method = "post" action = ""> //edited form action

      <h3>Add a New Liquor Type</h3> //wrapped title with <h3> tags and removed <br> because h3 element will have padding that will separate it from form (if not provided in your style.css it will be assigned by the browser)
      <p>  //wraping field with paragraph to generate automatic space between them without styling it
         <label for="name">Name:</label>  //removed <p> element and used <label> instead
         <input type="text" name="name"/>
      </p>
      <p>
         <label for="description">Description</label>
         <input type="text" name="description"/>
      </p>
      <hr> //replaced unnecessary --- lines 
      <input type="submit" value="Submit" name="liquor_submit"/>  // added name attribute that will be used to check if the form is submitted
</form>
</br>

Maintenant, dans votre functions.php, vous pouvez ajouter quelque chose comme:

    //setting up the form
    function themename_add_new_liquor() {

      $name         = $_POST['name'];
      $description  = $_POST['description'];  //You forgot to collect data from "description" field

      global $wpdb; //removed $name and $description there is no need to assign them to a global variable
      $table_name = $wpdb->prefix . "liquor_type"; //try not using Uppercase letters or blank spaces when naming db tables

      $wpdb->insert($table_name, array(
                                'lq_name' => $name, //replaced non-existing variables $lq_name, and $lq_descrip, with the ones we set to collect the data - $name and $description
                                'description' => $description
                                ),array(
                                '%s',
                                '%s') //replaced %d with %s - I guess that your description field will hold strings not decimals
        );
      }
    }

//And now to connect the  two:  
if( isset($_POST['liquor_submit']) ) themename_add_new_liquor();

J'espère que cela peut aider. En outre, cela ne fonctionnera pas si vous n'avez pas créé votre table de base de données en premier lieu (la fonction $ wpdb-> insert est utilisée pour insérer des données dans la table existante).

À votre santé! :)

6
Aleksej