it-swarm.com.de

Einfügen von Daten in benutzerdefinierte Tabellen

Ich versuche, benutzerdefinierte Eingabetabellen zu erstellen, um Daten in benutzerdefinierte Tabellen in der WP-Datenbank zu senden. Ich kann mein Skript nicht dazu bringen, irgendetwas zu tun. Der Benutzer gibt einen Alkoholtyp wie Wodka oder Whisky ein, gibt eine Beschreibung ein und sendet diese an die Datenbank, in der sich benutzerdefinierte Tabellen in der WordPress-Datenbank befinden. Ich habe den HTML-Code in einer WordPress-Seite und das PHP in einer Datei namens setLiquorType.php, die sich im Hauptordner von WordPress befindet.

HTML-Formular

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

Mein PHP-Skript

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

Jede Hilfe wäre toll

4
Matthew

Sie sagten, Ihr Formular befindet sich im Hauptordner? Ich denke, Sie müssen die richtige URL für action="" einstellen. Du könntest es versuchen:

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

Es wird empfohlen, den Formularcode in die Datei functions.php einzufügen und dann das Formular zu verlassen action = "" leeren. Dann können Sie Ihre Formularfunktion auslösen, wenn das Formular gesendet wird.

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

Jetzt können Sie in Ihrer functions.php Folgendes hinzufügen:

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

Ich hoffe das kann helfen. Dies funktioniert auch dann nicht, wenn Sie Ihre Datenbanktabelle noch nicht erstellt haben (mit der Funktion $ wpdb-> Einfügen werden Daten in die vorhandene Tabelle eingefügt).

Prost! :)

6
Aleksej