Insertar datos en tablas personalizadas

15 oct 2014, 00:15:08
Vistas: 44.2K
Votos: 4

Estoy tratando de crear tablas de entrada personalizadas para enviar datos a tablas personalizadas en la base de datos de WordPress. No logro que mi script funcione. El usuario ingresará un tipo de licor, como vodka o whiskey, proporcionará una descripción y lo enviará a la base de datos, donde hay tablas personalizadas dentro de la base de datos de WordPress. Tengo el código HTML en una página de WordPress y el PHP en un archivo llamado setLiquorType.php que está en la carpeta principal de WordPress.

Formulario HTML

<form method = "post" action = "setLiquorType.php">
Agregar un Nuevo Tipo de Licor</br></br>
<p>Nombre: <input type="text" name="name"/></p>
<p>Descripción <input type="text" name="description"/></p>
----------------------------------------------
<input type="submit" value="Enviar"/>
</form>
</br>

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

Cualquier ayuda sería genial

3
Comentarios

¿Tus datos coinciden con los tipos de datos que estás proporcionando? ¿Tienes depuración habilitada?

s_ha_dum s_ha_dum
15 oct 2014 00:32:50

Otro problema podría ser que el nombre de tu tabla contenga un espacio, por lo que el SQL no pudo analizarse correctamente.

Nimrod Nimrod
27 oct 2016 22:51:54

Acabo de notar que estás usando $global $wpdb en lugar de global $wpdb, así que supongo que tu código de inserción no se está ejecutando.

TomC TomC
26 abr 2016 13:30:08
Todas las respuestas a la pregunta 1
0

¿Dijiste que tu formulario está en la carpeta principal? Supongo que necesitas establecer la URL correcta para action="". Podrías probar:

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

Es una mejor práctica poner el código de tu formulario en functions.php y dejar el action="" del formulario vacío. Luego puedes activar tu función de formulario cuando se envíe el formulario.

Tu HTML del Formulario:

<form method = "post" action = ""> //acción del formulario editada
     
      <h3>Agregar un Nuevo Tipo de Licor</h3> //título envuelto en etiquetas <h3> y eliminado <br> porque el elemento h3 tendrá relleno que lo separará del formulario (si no está proporcionado en tu style.css, será asignado por el navegador)
      <p>  //envolviendo el campo en un párrafo para generar espacio automático entre ellos sin estilizarlo
         <label for="name">Nombre:</label>  //eliminado el elemento <p> y usado <label> en su lugar
         <input type="text" name="name"/>
      </p>
      <p>
         <label for="description">Descripción</label>
         <input type="text" name="description"/>
      </p>
      <hr> //reemplazadas líneas --- innecesarias 
      <input type="submit" value="Enviar" name="liquor_submit"/>  // añadido atributo name que se usará para verificar si el formulario se ha enviado
</form>
</br>

Ahora en tu functions.php puedes añadir algo como:

//configurando el formulario
function themename_add_new_liquor() {
    
    $name         = $_POST['name'];
    $description  = $_POST['description'];  //Olvidaste recoger los datos del campo "description"
    
    global $wpdb; //eliminadas $name y $description, no hay necesidad de asignarlas a una variable global
    $table_name = $wpdb->prefix . "liquor_type"; //intenta no usar letras mayúsculas o espacios en blanco al nombrar tablas de la base de datos

    $wpdb->insert($table_name, array(
        'lq_name' => $name, //reemplazadas variables no existentes $lq_name y $lq_descrip, con las que configuramos para recoger los datos - $name y $description
        'description' => $description
    ),
    array(
        '%s',
        '%s'
    ) //reemplazado %d con %s - supongo que tu campo de descripción contendrá cadenas, no decimales
    );
}

//Y ahora para conectar los dos:  
if( isset($_POST['liquor_submit']) ) themename_add_new_liquor();

Espero que esto pueda ayudar. Además, nada de esto funcionará si no has creado tu tabla de base de datos en primer lugar (la función $wpdb->insert se usa para insertar datos en una tabla existente).

17 feb 2015 16:44:33