Pregunta sobre Developing with WordPress de Wordpress:

Guardar datos del formulario en la tabla de la base de datos

Un usuario preguntó 👇

Estoy tratando de crear un sistema de archivo de correo en línea para mi empresa y, para ello, intento crearlo como una especie de sistema de intranet con wordpress.

Tengo una expectativa para eso en el que ingreso los detalles del trabajo y una pestaña al lado de este formulario que me permite ver todas las publicaciones ingresadas.

Para que los datos se guarden y no se pierdan después de una actualización, necesito guardar la entrada del formulario en la tabla de la base de datos mySQL que he creado.

Código que utilicé:

La forma:

    <div class="addjob tab-pane show active" id="home" role="tabpanel" aria-labelledby="home-tab">
        <h2>Add Job</h2>
        <form id="dataForm" name="dataform" method="POST" action="wp-content/themes/mytheme/database.php">
	    <span>
	        <label>Job Date:</label>
		<input class="add-date" type="date" placeholder="Placeholder Text" name="adddate">
	    </span>
	    <span>
	        <label>Client Name:</label>
		<select name="addclient" class="limitedNumbChosen add-client" multiple="false">
		    <option value="1">ClientA</option>
		    <option value="2">ClientB</option>
		</select>
		<div id="add-company" class="fas fa-plus"> Add New Client</div>
	    </span>
            <span>
	        <label>Contact Name:</label>
		<input class="add-contact" type="text" placeholder="John Doe"name="addcontact">
	    </span>
	    <span>	
	        <label>From:</label>
		<input id="add_from" class="add-from" type="text" placeholder="Postcode from" name="addfrom">
	    </span>
	    <span>
	        <label>To:</label>
		<input class="add-to" type="text" placeholder="Postcode to" name="addto">
            </span>
	    <span>
	        <label>Who Done Job:</label>
		<select name="subbie_name" class="limitedNumbSelect2 add-driver" multiple="true">
		    <option value="1">Dave</option>
		</select>
		<div id="add-subbie" class="fas fa-plus"> Add Subbie </div>
	    </span>
	    <span>
	        <label>Income (£):</label>
		<input class="add-income" type="number" placeholder="£120" name="addincome">
	    </span>
	    <span>
	        <label>Driver Payment (£):</label>
		<input class="add-payment" type="number" placeholder="£100" name="addpayment">
	    </span>
	    <span>
	        <button id="submit" type="submit" value="submit">Submit</button>
	    </span>
	</form>
    </div> 

El PHP:

    <?php
    
    //Register variables
    
    $adddate = $_POST['adddate']
    $addcontact = $_POST['addcontact']
    $addfrom = $_POST['addfrom']
    $addto = $_POST['addto']
    $addincome = $_POST['addincome']
    $addpayment = $_POST['adddate']
    $addsubbie = $_POST['addsubbie']
    $addclient = $POST['addlient']

    //connect with Database

    $host_name = 'xxx.hosting-data.io';
        $database = 'xxx';
        $user_name = 'xxx';
        $password = 'xxx';
        $connect = mysql_connect($host_name, $user_name, $password, $database);

    //Send to database

    if (mysql_errno()) {
        die('<p>Failed to connect to MySQL: '.mysql_error().'</p>');
    }     else {
              $wpdb = $connect->prepare("insert into add_job(adddate, addcontact, addfrom, addto, addincome, addpayment adddriver addcompany)
                      values(?, ?, ?, ?, ?, ?, ?, ?,)");
              $wpdb->bind_param("ssssiiss",  $adddate, $addcontact, $addfrom, $addto, $addincome, $addpayment, $addsubbie, $addcoclient) ;
              $wpdb->execute();
              echo "Job Submited"
              $wpdb->close();
              $connection->close();
          }

Nunca he intentado enviar información a una base de datos. Agradeceríamos cualquier ayuda

Este tema fue modificado hace 1 año, 4 meses por. Este tema fue modificado hace 1 año, 4 meses por. Este tema fue modificado hace 1 año, 4 meses por.

(@suplementogenie)

Hace 1 año, 4 meses

@joyously @bcworkz sí, el mysqli estaba mal escrito pero modifiqué ese earleir, no es que haya hecho ninguna diferencia lol.

la forma en que se presentó en la pregunta no estaba mal, intenté editar pero era demasiado tarde. Agregué «a los términos entre corchetes en la parte inferior, pero todo lo que hizo fue agregar áreas verdes jajaja … Y esta es una gran área gris para mí

Siento que usé el código correcto, no veo nada que deba cambiar. Pero no estoy seguro de cómo determinar qué está causando el error.

Cuando reviso consolas y parámetros, me da todos los parámetros correctos con los títulos correctos.

Pero el php no parece tomarlos y ponerlos en la mesa. No estoy seguro de cómo depurar esto ya que las declaraciones de eco que agregué no parecen funcionar, lo que dificulta saber dónde está el error

(@ alegremente)

Hace 1 año, 4 meses

Todo lo que resuena en la llamada ajax vuelve en respuesta. Deberías usar PHP error_log función.

(@suplementogenie)

Hace 1 año, 4 meses

@joyously @bcworkz sí, el mysqli estaba mal escrito pero modifiqué ese earleir, no es que haya hecho ninguna diferencia lol.

Ahora tengo mensajes de error que muestran …

Después de algunos retoques y aparece el mensaje de error:

Error: INSERT INTOadd_job(carné de identidad,agregar fecha,agregar contacto,Agrega un,addb,agregar ingresos,pago adicional,addubbie,VALUES addclient`) (NULL ‘2019-09-06’, ‘test’, ‘test’, ‘test’, ‘test’, ‘test’, ‘test’, «) Tiene un error en su sintaxis SQL; verifique el manual correspondiente a la versión del servidor MySQL para usar la sintaxis correcta cerca de ”2019-09-06 ′, ‘prueba’, ‘prueba’, ‘prueba’, ‘prueba’, ‘prueba’, ‘prueba’,”) ‘en línea 2`

Cambié el código a:

JS

    jQuery(document).ready(function () {
    $("#addsubmit").click(function(e) {
        e.preventDefault();
        e.stopPropagation();

        var date = document.getElementById("adddate").value;
        var contact = document.getElementById("addcontact").value;
        var a = document.getElementById("adda).value;
        var b = document.getElementById("addb").value;
        var income = document.getElementById("addincome").value;
        var payment = document.getElementById("adddate").value;
        var subbie = document.getElementById("addsubbie").value;
        var client = document.getElementById("addclient").value;

        // Returns successful data submission message when the entered information is stored in database.
        var dataForm = 'date1=' + date + '&contact1=' + contact + '&a1=' + a + '&b1=' + b + '&income1=' + income + '&payment1=' + payment + '&subbie1=' + subbie + '&client1=' + client;
        if (date == '' || contact == '' || a == '' || b == '' || income == '' || payment == '' || subbie == '' || client == '') {
        alert("Please Fill All Fields");
        } 
        else {
        // AJAX code to submit form.
            jQuery.ajax({
                type: "POST",
                url: 'wp-content/themes/EazyFreight/database.php',
                data: dataForm,
                dataType:"json", 
                success:function(strMessage) {
                    $("#message").text(strMessage);
                    $("#dataForm")[0].reset();
                }
            });
            return false;  
        }
    });

PHP

<?php

    //Register variables
    $adddate = $_POST['date1'];
    $addcontact = $_POST['contact1'];
    $adda = $_POST['a1'];
    $addb = $_POST['b1'];
    $addincome = $_POST['income1'];
    $addpayment = $_POST['payment1'];
    $addsubbie = $_POST['subbie1'];
    $addclient = $POST['client1'];

    //connect with Database
    if (!empty($adddate) || !empty($addcontact) || !empty($adda) || !empty($addb) || !empty($addincome) || !empty($addpayment) || !empty($addsubbie) || !empty($addclient)){
        $host_name = 'xxx.hosting-data.io';
        $database = 'xxx';
        $user_name = 'xxx';
        $password = 'xxx';
        $conn = mysqli_connect($host_name, $user_name, $password, $database);
    }
    // Check connection

    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }

    $sql = "INSERT INTO <code>add_job</code>(<code>id</code>, <code>adddate</code>, <code>addcontact</code>, <code>adda</code>, <code>addb</code>, <code>addincome</code>, <code>addpayment</code>, <code>addsubbie</code>, <code>addclient</code>)
    VALUES (NULL '$adddate', '$addcontact', '$adda', '$addb', '$addincome', '$addpayment', '$addsubbie', '$addclient')";
    
    if (mysqli_query($conn, $sql)) {
        echo "New record created successfully";
    } 
    else {
        echo "Error: " . $sql . "<br>" . mysqli_error($conn);
    }
    mysqli_close($conn);
    die();

¿Tiene alguna idea de qué podría estar causando el error? o la mejor manera de debutar

(@ alegremente)

Hace 1 año, 4 meses

Debe leer el error y hacer lo que dice. Falta una coma NULL en su SQL. No estoy seguro de qué más.

(@suplementogenie)

Hace 1 año, 4 meses

@joyously Configuración simple, gracias, eso está funcionando ahora 😀

Con toda la honestidad en las pocas respuestas que me dio, fue muy útil … También me ayudó a ver que cuando estoy depurando gastando demasiado tiempo mirando el código y lo que estoy diciendo arriba, mi código tengo toda la información correcta etc. No paso mucho tiempo mirando otros detalles como la puntuación, que pueden tener un gran efecto en el código.

Lo miré una y otra vez y nunca noté lo que faltaba. ,

Gracias de nuevo y perdón por mi negligencia 🙁 lol

(@ alegremente)

Hace 1 año, 4 meses

Ahora puede concentrarse en tapar los agujeros de seguridad en su código. Debe desinfectar todas las entradas del usuario, validar que sea del tipo correcto para el campo y usarlo prepare en su SQL. Además, valdría la pena usar un nonce y verificar la competencia del usuario para escribir en la base de datos, pero su código está fuera de WP. Con un archivo PHP en su servidor, cualquiera puede invocarlo directamente, especialmente si las comprobaciones están en otro archivo.

(@suplementogenie)

Hace 1 año, 4 meses

@joyously @bcworkz Gracias por la ayuda. El formulario está destinado a ser utilizado internamente y solo será accesible para los usuarios que hayan iniciado sesión en la empresa, por lo que es de esperar que la seguridad no sea un problema.

Puedo preguntar, he intentado algunas cosas diferentes, pero ninguna parece ser la correcta.

basado en el código, sí… Después de enviar el formulario, estoy ansioso por borrar el formulario, sin embargo, tal como está, una vez enviado, todos los campos del formulario permanecen.

JQuery / Ajax captura todos los datos para procesarlos con PHP, así que creo que PHP es el mejor lugar para poner el código …

Traté de agregar al final:

echo:"<script></script>"

e inserte un código diferente después del

if (mysqli_query($conn, $sql)) {
        echo "New record created successfully";
    } 

así como después del ajax:

success: function() {
                    alert('Message sent');
                    document.getElementById('dataForm').reset();
                }

¿Existe una manera mejor de hacer esto que realmente funcione? jajaja

Actualizar…

Resolver el problema ..

success: function() {
                    alert('Message sent');
                },
                complete: function(){
                    $('#dataForm').each(function(){
                        this.reset();   //Here form fields will be cleared.
                    });
                }

La parte que no puedo limpiar es la <select> áreas, están pobladas. sin embargo, si completo los otros campos y luego presiono enter, aunque contienen valores, el script no recuerda que existen, así que tengo que borrar los valores y volver a ingresar

Esta respuesta fue modificada hace 1 año, 4 meses. Esta respuesta fue modificada hace 1 año, 4 meses. Esta respuesta fue modificada hace 1 año, 4 meses. Esta respuesta fue modificada hace 1 año, 4 meses.

(@ alegremente)

Hace 1 año, 4 meses

El formulario está destinado a ser utilizado internamente y solo será accesible para los usuarios que hayan iniciado sesión en la empresa, por lo que es de esperar que la seguridad no sea un problema.

El objetivo de un hack es hacer algo involuntario.

Con un archivo PHP en su servidor, cualquiera puede invocarlo directamente, especialmente si las verificaciones están en otro archivo.

¿Solucionó tu problema??

0 / 0

Deja una respuesta 0

Tu dirección de correo electrónico no será publicada.