Inserimento dati in tabelle personalizzate

15 ott 2014, 00:15:08
Visualizzazioni: 44.2K
Voti: 4

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

3
Commenti

I tuoi dati corrispondono ai tipi di dati che stai fornendo? Hai abilitato il debug?

s_ha_dum s_ha_dum
15 ott 2014 00:32:50

Un altro problema potrebbe essere che il nome della tua tabella contiene uno spazio, quindi l'SQL non può essere analizzato correttamente.

Nimrod Nimrod
27 ott 2016 22:51:54

Ho appena notato che stai usando $global $wpdb invece di global $wpdb, quindi presumo che il tuo codice di inserimento non venga eseguito.

TomC TomC
26 apr 2016 13:30:08
Tutte le risposte alla domanda 1
0

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

17 feb 2015 16:44:33