4

I am trying to create custom input tables to send data into custom tables on the wp database. I cannot get my script to do anything. The user will enter a type of liquor, like vodka or whiskey, provide a description, and send it to the database, where there are custom tables within the wordpress database. I have the html code in a wordpress page and the php in a file called setLiquorType.php that is in the main wordpress folder.

HTML Form

<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>

My php script

<?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')
    );
}
?>

Any help would be great

3
  • 1
    Does your data match the data types you are providing? Do you have debugging enabled? Commented Oct 14, 2014 at 21:32
  • Just noticed you're using $global $wpdb instead of global $wpdb, so I'm guessing your insert code isn't running. Commented Apr 26, 2016 at 10:30
  • Another problem could be that your table name contains a space, so the SQL couldn't be parsed properly. Commented Oct 27, 2016 at 19:51

1 Answer 1

7

You said your form is in the main folder? I guess you need to set proper URL for action="". You could try:

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

It is best practice to put your form code into functions.php and then leave form action="" empty. Then you can trigger your form function when the form is submitted.

Your Form 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>

Now in your functions.php you can add something like:

//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();

I hope this can help. Also, none of this will work if you have not created your Database table in the first place ( $wpdb->insert function is used for inserting data in the existing table ).

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.