it-swarm.it

AJAX post non in grado di aggiornare il database

Come posso ottenere un inserimento del database usando AJAX?

Ho creato un modulo e sto usando AJAX post per inserire un record nel database ma sembra che ottengo un errore silenzioso e nessun aggiornamento del database; so che il file insertdata.php viene chiamato mentre ottengo un errore di sintassi registrato nel mio php_error_log .

  1. Hai idea di dove mi sbagli quando inserisco?
  2. Esiste un modo per mostrare il registro errori o il registro console nel file insertdata.php?
    error_log('My Error: ', 0); non sembra al lavoro.

Di seguito è riportato il contenuto del mio default.php:

<div id="update_dialog" title="Update Details" style = "display:none">
    <form method="post" id="my_form" action="modules/mod_myPage/insertdata.php">
        <label>Company Name :</label><input id="Company_Name" type="text"></input>
        <label>Company Address :</label><input id="Company_Address" type="text"></input>
        <input id="submit" type="button" value="Submit">
    </form>
</div>

<script>
jQuery(document).ready(function () {
    jQuery("#submit").click(function () {

        _Company_Name = jQuery("#Company_Name").val();
        _Company_Address = jQuery("#Company_Address").val();

        jQuery.post("modules/mod_myPage/insertdata.php",
            {
                Company_Name: _Company_Name,
                Company_Address: _Company_Address
            },
            function (data, status) {
                alert("Data: " + data + "\nStatus: " + status);
            });
    });
});
</script>

E quello del mio insertdata.php file:

<?php
defined ( '_JEXEC' ) or die ();


if( isset( $_POST['Company_Name'] ) )
    {
        $_Company_Name = $_POST['Company_Name'];
        $_Company_Address = $_POST['Company_Address'];

        $insert_query = "INSERT INTO #__myCompany (Company_Name, Company_Address, Create_Date)
        VALUES('".$_Company_Name."','".$_Company_Address."','".date("Y-m-d H:i:s")."')";

        $db = JFactory::getDbo();
        $query = $db->getQuery(true);

        try
        {
            $db->setQuery($insert_query);
            $db->query();
        }
        catch (RuntimeException $e)
        {
            $e->getMessage();
            error_log('This query failed: '.$insert_query, 0);
            error_log($e->getMessage(), 0);
            return false;
        }
        return true;
    }
3
Phillip

Dopo altre ricerche, sono riuscito a risolverlo. Spero che il seguito offrirà un po 'di misericordia all'anima di joomla perduta come me. La sfida principale era costruire l'URL e ottenere una risposta. Quindi ecco la mia soluzione

url: "index.php? opzione = com_ajax & module = CompanyPage & method = updateDetails & format = raw"

  1. Richiesto se si utilizza la richiesta Ajax: index.php? Opzione = com_ajax

  2. Il tuo modulo essendo mod_CompanyPage Viene chiamato senza il mod _ come: & module = CompanyPage

  3. Il tuo metodo nella classe helper deve avere la chiave Word Ajax alla fine della funzione. function updateDetailsAjax() ma è costruito senza Ajaxas di Word: & method = updateDetails

  4. Alla fine il & format = raw alla fine. (Non ho ancora capito perché)

Per ottenere una risposta dalla classe helper, fai semplicemente eco.

<script>
jQuery(document).ready(function () {
    jQuery("#submit").click(function () {
    $.ajax({
       type: "POST",
       url: "index.php?option=com_ajax&module=CompanyPage&method=updateDetails&format=raw",
       data: dataString,
       success: function(data){
       alert(data);    // alert box pop up either show "We did it" or the error message from data connection
       }
        });

    });
});
</script>

helper.php

class modCompanyPageHelper
{

    function updateDetailsAjax()
    {  

        if( isset( $_POST['Company_Name'] ) )
        {

            $jinput = JFactory::getApplication()->input;

            $_Company_Name = $jinput->get('Company_Name', 'default_value', 'RAW');
            $_Company_Address = $jinput->get('Company_Address', 'default_value', 'RAW');

            $insert_query = "INSERT INTO #__myCompany (Company_Name, Company_Address, Create_Date)
            VALUES('".$_Company_Name."','".$_Company_Address."','".date("Y-m-d H:i:s")."')";

            $db = JFactory::getDbo();
            $query = $db->getQuery(true);

            try
            {
                $db->setQuery($insert_query);
                $db->query();
            }
            catch (RuntimeException $e)
            {

                echo $e->getMessage();
                return false;
            }
            echo "We did it";
            return true;
        }
    }
}

Con questa conoscenza, sono stato in grado di chiamare la funzione di backend per inserire, caricare ed eliminare i record del database. Sono anche riuscito a caricare i file sul server utilizzando dropzone.js

La vita sarebbe stata molto più semplice se avessi saputo queste informazioni un mese fa.

3
Phillip

Per favore, usa l'interfaccia Ajax di Joomla che è completamente spiegata qui . Non reinventare la ruota e utilizzare le tue chiamate Ajax: questo è negativo sia per la sicurezza che per la scalabilità.

1
itoctopus