Inserarea datelor în tabele personalizate

15 oct. 2014, 00:15:08
Vizualizări: 44.2K
Voturi: 4

Încerc să creez tabele de introducere personalizate pentru a trimite date în tabele custom din baza de date WordPress. Nu reușesc să fac scriptul să funcționeze. Utilizatorul va introduce un tip de băutură alcoolică, cum ar fi vodka sau whiskey, va furniza o descriere și o va trimite în baza de date, unde există tabele personalizate în baza de date WordPress. Am codul HTML într-o pagină WordPress și PHP-ul într-un fișier numit setLiquorType.php care se află în folderul principal WordPress.

Formular HTML

<form method = "post" action = "setLiquorType.php">
Adaugă un nou tip de băutură</br></br>
<p>Nume: <input type="text" name="name"/></p>
<p>Descriere <input type="text" name="description"/></p>
----------------------------------------------
<input type="submit" value="Trimite"/>
</form>
</br>

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

Orice ajutor ar fi binevenit

3
Comentarii

Datele tale corespund tipurilor de date pe care le furnizezi? Ai depanare activată?

s_ha_dum s_ha_dum
15 oct. 2014 00:32:50

O altă problemă ar putea fi că numele tabelului tău conține un spațiu, așa că SQL-ul nu a putut fi analizat corect.

Nimrod Nimrod
27 oct. 2016 22:51:54

Tocmai am observat că folosești $global $wpdb în loc de global $wpdb, așa că presupun că codul tău de inserare nu rulează.

TomC TomC
26 apr. 2016 13:30:08
Toate răspunsurile la întrebare 1
0

Ai spus că formularul tău este în folderul principal? Presupun că trebuie să setezi URL-ul corect pentru action="". Ai putea încerca:

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

Este o practică recomandată să plasezi codul formularului în functions.php și să lași atributul action="" gol. Apoi poți declanșa funcția formularului atunci când acesta este trimis.

HTML-ul formularului tău:

<form method = "post" action = ""> //am editat atributul action
     
      <h3>Adaugă un Tip Nou de Băutură</h3> //am încadrat titlul în tag-uri <h3> și am eliminat <br> deoarece elementul h3 va avea padding care îl va separa de formular (dacă nu este specificat în style.css, va fi asignat de browser)
      <p>  //am încadrat câmpurile în paragrafe pentru a genera spațiu automat între ele fără a le stiliza
         <label for="name">Nume:</label>  //am înlocuit elementul <p> cu <label>
         <input type="text" name="name"/>
      </p>
      <p>
         <label for="description">Descriere</label>
         <input type="text" name="description"/>
      </p>
      <hr> //am înlocuit liniile inutile --- 
      <input type="submit" value="Trimite" name="liquor_submit"/>  //am adăugat atributul name care va fi folosit pentru a verifica dacă formularul a fost trimis
</form>
</br>

Acum, în functions.php poți adăuga ceva de genul:

//configurarea formularului
function themename_add_new_liquor() {
    
    $name         = $_POST['name'];
    $description  = $_POST['description'];  //Ai uitat să colectezi datele din câmpul "description"
    
    global $wpdb; //am eliminat $name și $description, nu este nevoie să le atribui ca variabile globale
    $table_name = $wpdb->prefix . "liquor_type"; //încearcă să nu folosești litere mari sau spații în denumirea tabelelor de baze de date

    $wpdb->insert($table_name, array(
        'lq_name' => $name, //am înlocuit variabilele inexistente $lq_name și $lq_descrip cu cele pe care le-am setat pentru colectarea datelor - $name și $description
        'description' => $description
    ),
    array(
        '%s',
        '%s'
    ) //am înlocuit %d cu %s - presupun că câmpul description va conține șiruri de caractere, nu numere zecimale
    );
}

//Și acum pentru a conecta cele două:  
if( isset($_POST['liquor_submit']) ) themename_add_new_liquor();

Sper că acest lucru te poate ajuta. De asemenea, nimic din toate acestea nu va funcționa dacă nu ai creat tabelul în baza de date în primul rând ( funcția $wpdb->insert este folosită pentru inserarea datelor într-un tabel existent ).

17 feb. 2015 16:44:33