Soporte » Plugins y Hacks » insertar en base de datos wpdb

  • Resuelto edword16

    (@edword16)


    Buenas Tardes

    Alguien me podria decir que error tengo en esta consulta que estoy tratando de hacer y no me hace la inserción, he tratado muchas formas pero no logro insertar los datos…gracias

    <?php

    include_once(‘wp-config.php’);
    include_once(‘wp-load.php’);
    global $wpdb;

    $name = $_POST[‘name’];
    $snombre = $_POST[‘snombre’];

    if($name && $snombre)
    {
    $consulta =$wpdb->insert($wpdb->escomp_prueba, array(‘pnombre’ => $name, ‘snombre’ => $snombre), array(‘%s’,’%s’));

    }else
    {
    echo «no ha digitado todos los campos»;
    }

    ?>

Viendo 12 respuestas - de la 1 a la 12 (de un total de 12)
  • Moderador LGrusin

    (@lgrusin)

    Consulta el CODEX para ver la forma correcta. Ahí tienes ejemplos de cómo añadir datos.
    https://codex.wordpress.org/Class_Reference/wpdb

    Un saludo

    Iniciador del debate edword16

    (@edword16)

    Hola gracias, pues desde hace rato estaba mirando esa pagina que pusiste y lo estaba haciendo exactamente igual, pero descubrí cual era el problema.
    Lo que pasa es que en mi base de datos tengo las tablas de wordpress y otras que yo hice pero con otro prefijo al comienzo entonces cambie el prefijo al mismo que tiene las tablas de wordpress y me funciono la inserción.

    Sera que habrá alguna forma que también me deje insertar en otras tablas con otro prefijo?

    Saludos

    Moderador LGrusin

    (@lgrusin)

    Lo dice en los primeros párrafos.

    El objeto $wpdb no está limitado a las tablas que crea por defecto WordPress. Puede usarse para leer datos de cualquier tabla en la base de datos (como tablas personalizadas). Por ejemplo hacer un SELECT para una tabla llamada ‘mytable’, en ese caso harías lo siguiente:

    $myrows = $wpdb->get_results( "SELECT id, name FROM mytable" );

    Un saludo

    Iniciador del debate edword16

    (@edword16)

    mmm ya te entendí, pero en este caso si quiero hacer un insert como seria? Ya que estuve probando pero no logre la forma para hacer un insert con lo que describiste anteriormente..

    Gracias
    Saludos

    Nunca he utilizado el método wpdb::insert(), pero lo que yo entiendo es que si tu table se llama escomp_prueba, la consulta sería:

    $consulta = $wpdb->insert( 'escomp_prueba', array( 'pnombre' => $name, 'snombre' => $snombre ), array('%s','%s') );

    Iniciador del debate edword16

    (@edword16)

    Es que en mi base de datos hay unas tablas de wordpress que tienen un prefijo al comienzo por ejemplo el de una tabla: dfg_prueba y tengo otras en esa misma base de datos que yo las hice pero con otra estructura: escomp_prueba.

    Al momento de realizar esa consulta que me indicas no funciona para esa tabla, pero si le cambio la estructura y le pongo la misma de las tablas de wordpress ejemplo: escomp_prueba a dfg_prueba ahi si me hace la inserción de los datos.

    entonces según lo que comento LGrusin hay una forma pero para hacer un SELECT pero la verdad no se como hacerlo para un insert…

    Gracias
    Saludos

    Pues si el nombre de la tabla es correcto, y el nombre de las columnas a insertar también, no se me ocurre nada. Podrias probar a ver si la consulta devuelve algún error:

    global $wpdb;
    $wpdb->insert( 'escomp_prueba', array( 'pnombre' => $name, 'snombre' => $snombre ), array('%s','%s') );
    $wpdb->print_error();
    Iniciador del debate edword16

    (@edword16)

    hola pues acabe de probar y me funciono por arte de magia jajaj con lo que comentaste no se depronto que tenia mal. Te muestro el código..
    <?php

    include_once(‘../../wp-load.php’);
    include_once(‘../../wp-config.php’);
    global $wpdb;

    $name = $_POST[‘pname’];
    $snombre = $_POST[‘sname’];

    if($name && $snombre)
    {
    $wpdb->insert(‘escomp_prueba’, array(‘nombre’ => $name, ‘snombre’ => $snombre));
    $wpdb->print_error();

    }

    ?>

    Pues me alegro!!! Un placer ayudar.

    Viendo tu código veo que estás cargando WordPress en tu propio script PHP. Creo que es mucho mejor procesar cualquier tipo de solicitud utilizando directamente WordPress en lugar de tener que cargarlo manualmente.

    Para procesar solicitudes tipo POST, tienes el action admin_post_{tu_accion}, similar al Ajax API (y no solo para la parte de administracion, aunque tenga ese nombre). Pero también es muy común, puede que más, utilizar el action init:

    add_action( 'init', 'pocess_my_form' );
    function process_my_form() {
    
        $name = isset( $_POST['pname'] ) ? $_POST['pname'] : false;
        $snombre = isset( $_POST['sname'] ) ? $_POST['sname'] : false;
    
        if( $name && $snombre ) {
            $insert = $wpdb->insert(
                'escomp_prueba',
                array(
                    'nombre' => sanitize_text_field( $name ),
                    'snombre' => sanitize_text_field( $snombre )
                 )
             );
             if( ! $insert ) {
                 $wpdb->print_error();
             }
        }
    
    }
    Iniciador del debate edword16

    (@edword16)

    si muchas gracias.
    Estaba probando el código que me pusiste pero no me funciono, no se si tengo que iniciar una etiqueta javascript para que funcione o como debería ser…y pues cual es la diferencia de usar el codigo anterior al tuyo?

    <?php
    include_once(‘../../wp-load.php’);
    include_once(‘../../wp-config.php’);
    global $wpdb;

    /*
    $name = $_POST[‘pname’];
    $snombre = $_POST[‘sname’];

    if($name && $snombre)
    {
    $wpdb->insert(‘escomp_prueba’, array(‘nombre’ => $name, ‘snombre’ => $snombre));
    $wpdb->print_error();
    //$wpdb->insert(‘sj_options’, array(‘option_name’ => ‘my_name’, ‘option_value’ => ‘chayon’));

    }

    */

    add_action( ‘init’, ‘pocess_my_form’ );
    function process_my_form() {

    $name = isset($_POST[‘pname’]) ? $_POST[‘pname’] : false;
    $snombre = isset($_POST[‘sname’]) ? $_POST[‘sname’] : false;

    if( $name && $snombre ) {
    $insert = $wpdb->insert(
    ‘escomp_prueba’,
    array(
    ‘nombre’ => sanitize_text_field( $name ),
    ‘snombre’ => sanitize_text_field( $snombre )
    )
    );
    if( ! $insert ) {
    $wpdb->print_error();
    }
    }

    }
    ?>

    El código que puse lo tienes que poner en un plugin u otro archivo cargado durante la ejecución de WordPress. No en un script fuera de WordPress. Espero que veas la diferencia.

    Iniciador del debate edword16

    (@edword16)

    mmm si sospechaba que tenia que hacerlo en un plugin.
    Oye y también estaba probando otra forma de hacer la consulta pero no me dio resultado.

    <?php
    include_once(‘../../wp-load.php’);
    include_once(‘../../wp-config.php’);
    global $wpdb;

    $name = $_POST[‘pname’];
    $snombre = $_POST[‘sname’];
    if($name && $snombre)
    {
    $sql = «INSERT INTO ‘escomp_prueba’
    (‘nombre’,’snombre’)
    values ($name, $snombre)»;

    $wpdb->query($sql);
    }
    ?>

Viendo 12 respuestas - de la 1 a la 12 (de un total de 12)
  • El debate ‘insertar en base de datos wpdb’ está cerrado a nuevas respuestas.