web-dev-qa-db-fra.com

AJAX post impossible de mettre à jour la base de données

Comment puis-je réaliser une insertion de base de données en utilisant AJAX?

J'ai créé un module et j'utilise AJAX post pour insérer un enregistrement dans la base de données, mais il semble que obtenir une erreur silencieuse et aucune mise à jour de la base de données; je sais que le fichier insertdata.php est appelé car une erreur de syntaxe est enregistrée dans mon php_error_log .

  1. Une idée d'où je me trompe avec mon insert?
  2. Est-il possible d'afficher le journal des erreurs ou le journal de la console dans le fichier insertdata.php?
    error_log('My Error: ', 0); ne semble pas travailler

Ci-dessous le contenu de mon 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>

Et celui de mon insertdata.php fichier:

<?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

Après plusieurs recherches, j'ai réussi à comprendre. Espérons que la liste ci-dessous offrira une petite pitié à une âme perdue comme joomla. Le principal défi consistait à construire l'URL et à obtenir une réponse. Alors voici ma solution

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

  1. Obligatoire si vous utilisez une requête ajax: index.php? Option = com_ajax

  2. Votre module étant mod_CompanyPage Est appelé sans le mod _ en tant que: & module = CompanyPage

  3. Votre méthode dans la classe d'assistance doit avoir la clé Word Ajax à la fin de la fonction. function updateDetailsAjax() mais est construit sans le mot Ajaxas: & method = updateDetails

  4. Enfin, le & format = raw à la fin. (Je n'ai pas encore compris pourquoi)

Pour obtenir une réponse de la classe d'assistance, envoyez-le simplement en écho.

<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;
        }
    }
}

Fort de cette connaissance, j’ai pu appeler la fonction backend pour insérer, télécharger et supprimer un enregistrement de base de données. J'ai également réussi à télécharger des fichiers sur le serveur en utilisant dropzone.js

La vie aurait été tellement plus facile si j'avais su cette information il y a un mois.

3
Phillip

S'il vous plaît, utilisez l'interface Ajax de Joomla qui est entièrement expliquée ici . Ne réinventez pas la roue et utilisez vos propres appels Ajax, ce qui nuit à la sécurité et à l’évolutivité.

1
itoctopus