Inserimento dati in tabelle personalizzate
Sto cercando di creare tabelle di input personalizzate per inviare dati in tabelle personalizzate nel database wp. Non riesco a far funzionare il mio script. L'utente dovrà inserire un tipo di liquore, come vodka o whiskey, fornire una descrizione e inviarlo al database, dove ci sono tabelle personalizzate all'interno del database di WordPress. Ho il codice HTML in una pagina WordPress e il PHP in un file chiamato setLiquorType.php che si trova nella cartella principale di WordPress.
Form HTML
<form method = "post" action = "setLiquorType.php">
Aggiungi un Nuovo Tipo di Liquore</br></br>
<p>Nome: <input type="text" name="name"/></p>
<p>Descrizione <input type="text" name="description"/></p>
----------------------------------------------
<input type="submit" value="Invia"/>
</form>
</br>
Il mio 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')
);
}
?>
Qualsiasi aiuto sarebbe apprezzato
Hai detto che il tuo modulo si trova nella cartella principale? Suppongo che tu debba impostare l'URL corretto per action=""
. Potresti provare:
action="<?php echo site_url() . '/setLiquorType.php'; ?>"
È una best practice inserire il codice del modulo in functions.php e lasciare vuoto l'attributo action="" del modulo. Quindi puoi attivare la tua funzione del modulo quando il modulo viene inviato.
Il tuo HTML del modulo:
<form method = "post" action = ""> //form action modificato
<h3>Aggiungi un nuovo tipo di liquore</h3> //titolo racchiuso in tag <h3> e rimosso <br> perché l'elemento h3 avrà un padding che lo separerà dal modulo (se non è specificato nel tuo style.css sarà assegnato dal browser)
<p> //raggruppamento dei campi con paragrafo per generare spazio automatico tra di loro senza styling
<label for="name">Nome:</label> //rimosso l'elemento <p> e utilizzato <label> invece
<input type="text" name="name"/>
</p>
<p>
<label for="description">Descrizione</label>
<input type="text" name="description"/>
</p>
<hr> //sostituite le linee --- non necessarie
<input type="submit" value="Invia" name="liquor_submit"/> // aggiunto l'attributo name che verrà utilizzato per verificare se il modulo è stato inviato
</form>
</br>
Ora nel tuo functions.php puoi aggiungere qualcosa come:
//impostazione del modulo
function themename_add_new_liquor() {
$name = $_POST['name'];
$description = $_POST['description']; //Hai dimenticato di raccogliere i dati dal campo "description"
global $wpdb; //rimossi $name e $description non c'è bisogno di assegnarli a una variabile globale
$table_name = $wpdb->prefix . "liquor_type"; //cerca di non usare lettere maiuscole o spazi bianchi quando nomini le tabelle del database
$wpdb->insert($table_name, array(
'lq_name' => $name, //sostituite le variabili inesistenti $lq_name e $lq_descrip con quelle che abbiamo impostato per raccogliere i dati - $name e $description
'description' => $description
),
array(
'%s',
'%s'
) //sostituito %d con %s - immagino che il tuo campo description conterrà stringhe e non decimali
);
}
//E ora per collegare i due:
if( isset($_POST['liquor_submit']) ) themename_add_new_liquor();
Spero che questo possa aiutare. Inoltre, nulla di tutto questo funzionerà se non hai creato prima la tua tabella del database ( la funzione $wpdb->insert
viene utilizzata per inserire dati in una tabella esistente ).
