Formulario personalizado que almacena datos en la base de datos

26 dic 2012, 00:15:16
Vistas: 158K
Votos: 7

Nunca he usado WordPress antes, pero tengo mucha experiencia en programación. Mi pregunta es, ¿cómo crear formularios personalizados en WordPress?

Necesito crear un formulario donde un usuario complete algunos campos de entrada y al enviarlo, los datos deben almacenarse en la base de datos. No necesito ninguna notificación al guardar.

También necesito consultar los datos y obtener la salida en una tabla HTML.

Gracias

1
Comentarios

Aquí hay un ejemplo de datos de usuario.

fuxia fuxia
26 dic 2012 01:49:55
Todas las respuestas a la pregunta 7
2

Encontré la solución al problema yo mismo. Mira el código a continuación, esto lo resolverá.

Coloca el código dentro de tu plantilla personalizada recién creada.

<?php
    if (!empty($_POST)) {
        global $wpdb;
        $table = wp_achord;
        $data = array(
            'name' => $_POST['yourname'],
            'chord'    => $_POST['chord']
        );
        $format = array(
            '%s',
            '%s'
        );
        $success=$wpdb->insert( $table, $data, $format );
        if($success){
            echo 'Los datos han sido guardados'; 
        }
    } else {
        ?>
        <form method="post">
            <input type="text" name="yourname">
            <textarea name="chord"></textarea>
            <input type="submit">
        </form>
        <?php 
    }  
?>
30 jul 2013 20:06:09
Comentarios

Dios mío. Ni siquiera una sola forma de validación.

Jürgen Paul Jürgen Paul
10 may 2015 13:53:01

Esta solución es susceptible a ataques de inyección SQL. Por favor valida la entrada.

Jon Winstanley Jon Winstanley
23 feb 2018 17:16:08
4

Mi sugerencia:

Utiliza Contact Form 7 junto con Contact Form DB. Puedes "diseñar" tu formulario en el backend y colocarlo en el frontend mediante un simple shortcode.

La extensión Contact Form DB te permite guardar tus datos en la base de datos y ofrece shortcodes para mostrarlos (o puedes consultar los datos directamente desde la base de datos si lo prefieres)

26 dic 2012 01:40:42
Comentarios

He probado Contact Form 7 y se ve genial, pero tengo algunas preguntas. ¿Es posible añadir un identificador incremental como columna a la tabla? También necesito establecer los valores del dropdown basados en los valores de una tabla. Nunca he trabajado con un CMS antes y no sé cuánto deberías y necesitas personalizar por ti mismo.

boje boje
26 dic 2012 22:48:44

@boje puedes hacerlo con el plugin de extensión Post My CF7 Form, reorganiza la tabla del dashboard de CF7, permitiéndote usar la funcionalidad estándar de WP para añadir una columna personalizada a la tabla.

Aurovrata Aurovrata
17 oct 2016 11:25:52

¿Puedo mostrar los registros de CF7 de un sitio en otro sitio?

Mohammad Fareed Mohammad Fareed
29 may 2017 13:30:01

Esta sigue siendo una solución válida. CFDB soporta incluso más plugins generadores de formularios.

mrmut mrmut
1 feb 2020 01:04:45
2

Voy a usar esta solución, pero parece ser muy personalizada y ¿podría ser un problema con los temas y actualizaciones?

27 dic 2012 00:48:07
Comentarios

Desde mi punto de vista, deberías separar la lógica del archivo de plantilla. Tu método que maneja los datos POST debe ubicarse en functions.php e inicializarse mediante un hook de inicialización.

Para manejar solo los datos enviados para una plantilla de página específica, podrías verificar un campo de entrada con nombre (opcionalmente oculto) que sea único para esa plantilla. También podrías beneficiarte usando is_page_template()

estrar estrar
11 jul 2014 09:50:30

enlace realmente útil

Rohit Rohit
3 ene 2020 08:26:33
6

Ofrece diferentes formas. Para almacenar datos, como opciones está la tabla de opciones, la API de opciones, el lugar correcto con una entrada y un array como elemento de almacenamiento. Pero para almacenar datos y usarlos como entradas (posts), es mejor guardar cada solicitud del formulario también como entrada. Aunque aquí también hay diferentes posibilidades. Puedes guardar para diferentes tipos de entrada. El predeterminado es 'post' y también puedes guardar en un tipo de entrada personalizado (custom post type). Usa la función wp_insert_post() para guardar en todos los tipos de entrada después de enviar el formulario desde los usuarios. Encontrarás respuestas muy buenas aquí sobre esta función, este tema y también en la vastedad de la web. También puedes ver un pequeño ejemplo en esta respuesta 73653, incluyendo adjuntos en el formulario.

26 dic 2012 01:39:57
Comentarios

Al usar 'wp_insert_post()', ¿no es eso solo para comentarios? Y si no, ¿por qué es bueno usar esa función? No entiendo la idea de la tabla de opciones. Una búsqueda rápida en Google no me ayuda :(

boje boje
26 dic 2012 22:59:09

La función wp_insert_post() no es para comentarios, es para el contenido de publicaciones, crear una nueva publicación. Actualicé mi respuesta ahora, estaba desde un móvil; no es muy fácil en WPSE. La otra respuesta con la sugerencia de plugins es la misma, Contact Form 7 u otros crean nuevas publicaciones, pero tienes los requisitos de un plugin. Si quieres controlar esto, también el código fuente y tienes suficientes conocimientos sobre programación, entonces un plugin personalizado para crear publicaciones es la mejor opción.

bueltge bueltge
27 dic 2012 14:29:27

Gracias por tu ayuda hasta ahora Bueltge. Mi entendimiento de wp_insertpost es que es una función de ayuda para insertar algo de manera rápida y segura en una tabla de la base de datos. Si tengo una tabla (nombre=Curso) con estas columnas (id, nombrecurso, participante, fechainicio, fechafin). ¿Dónde defino el nombre de la tabla? Tal vez lo entendí completamente mal. Ejemplo de código enlace

boje boje
28 dic 2012 11:50:09

No, la función crea datos en las tablas predeterminadas de WordPress; como mínimo en _posts y si tienes archivos adjuntos o metadatos de entrada, también en las otras tablas relacionadas con las publicaciones. Pero preguntas sobre guardar datos de formularios en WordPress y creo que esta es la mejor manera. Obtienes sin esfuerzo una interfaz de usuario con muchas soluciones para editar y mantener los elementos del formulario. Si ves el código del enlace de comportamiento que compartí, entonces verás la solución.

bueltge bueltge
28 dic 2012 13:41:04

Gracias, creo que necesito leer un poco más o encontrar algunos tutoriales para entender mejor la configuración

boje boje
28 dic 2012 14:02:56

Sí, como el enlace que compartí en la otra respuesta o un enlace de la web, como este.

bueltge bueltge
28 dic 2012 14:27:08
Mostrar los 1 comentarios restantes
0

También podrías utilizar el excelente plugin Contact Form 7 junto con la extensión Post My CF7 Form que te permitirá guardar cualquier formulario personalizado en una publicación, incluyendo imágenes como adjuntos destacados, y entradas de tipo select/checkbox/radio como taxonomías.

El plugin Post My CF7 Form tiene una funcionalidad muy completa que puede aprovecharse para personalizar y ajustar aún más la forma en que se guardan tus formularios. También hay una sección de documentación detallada.

17 oct 2016 11:26:56
2
-1

Tu solución es buena y puede funcionar muy bien. Pero, hay algunas limitaciones. Por ejemplo:

1) ¿Qué pasa con la búsqueda y ordenación de entradas que se publican a través de tu formulario? 2) ¿Qué hay de exportar los datos ingresados en tu formulario a Excel, CSV o PDF? 3) ¿Y si deseas imprimir los datos insertados?

Todo eso se puede lograr con los plugins Contact Form 7 + Save Contact Form 7.

Ambos son plugins gratuitos ampliamente utilizados: http://savecontactform7.com/ http://contactform7.com/

20 may 2016 16:44:49
Comentarios

Por favor, declara tu afiliación y haz que la respuesta sea específica a los requisitos de la pregunta. Esto parece más un anuncio que una solución genuina.

Rarst Rarst
20 may 2016 17:55:10

Estoy de acuerdo, esto parece un anuncio, y soy dueño de Save Contact Form 7. Pero, la solución y la respuesta se alinean perfectamente con los requisitos de la pregunta. Así que, definitivamente esto ayudará a la persona que hizo la pregunta.

Nimblechapps Nimblechapps
22 may 2016 10:34:37
0
-1
<?php
/**
 * Usa estas líneas de código, funcionan en más del 100% de los casos
 */
get_header();?> <?php
        if (!empty($_POST)) {
        global $wpdb;
            $table = wp_contact;
            $data = array(
                'name' => $_POST['aname'],
                'email'    => $_POST['aemail'],
                 'subject' => $_POST['asubject'],
                'msg'    => $_POST['amsg']
            );
            $format = array(
                '%s',
                '%s'
            );
            $success=$wpdb->insert( $table, $data, $format );
            if($success){
            echo 'los datos han sido guardados' ; 
}
}
else   {
?>
        <form action="<?php echo get_option('siteurl'); ?>/form/" method="post">
        <input type="text" name="aname">
         <input type="text" name="aemail">
          <input type="text" name="asubject">
        <textarea type="text" name="amsg"></textarea>

        <input type="submit">
        </form>

       <?php }  ?>
7 feb 2017 14:55:43