web-dev-qa-db-ja.com

AJAX投稿はデータベースを更新できません

AJAXを使用してデータベースを挿入するにはどうすればよいですか?

モジュールを作成し、AJAXpostを使用してデータベースにレコードを挿入していますが、 _insertdata.php_ファイルが呼び出されることを知っている_php_error_log_に構文エラーが記録されると、サイレントエラーが発生し、データベースが更新されません。

  1. 挿入が間違っているときの考えはありますか?
  2. _insertdata.php_ファイルにエラーログまたはコンソールログを表示する方法はありますか?
    error_log('My Error: ', 0);と思われない動作します。

以下は私の内容です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>
_

そして、私のinsertdata.phpファイル:

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

さらに検索した結果、なんとか解決しました。うまくいけば、以下は、私がそうであったように、失われたjoomla魂に小さな慈悲を提供するでしょう。主な課題は、URLを作成して応答を取得することでした。これが私の解決策です

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

  1. Ajaxリクエストを使用する場合は必須:index.php?option = com_ajax

  2. _mod_CompanyPage_であるモジュールは、mod _なしで次のように呼び出されます:&module = CompanyPage

  3. ヘルパークラスのメソッドでは、関数の最後にWordAjaxキーが必要です。 function updateDetailsAjax()ですが、Word Ajaxasなしで作成されます:&method = updateDetails

  4. 最後に&format = rawが終わりです。 (まだ理由がわかりません)

ヘルパークラスから応答を取得するには、それをエコー出力します。

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

この知識があれば、データベースレコードを挿入、アップロード、削除するバックエンド関数を呼び出すことができました。 dropzone.jsを使用してファイルをサーバーにアップロードすることもできました

1か月前にこの情報を知っていれば、人生はずっと楽になったでしょう。

3
Phillip

完全に説明されているJoomlaのAjaxインターフェースを使用してください here 。ホイールを再発明せず、独自のAjax呼び出しを使用しないでください。これは、セキュリティとスケーラビリティの両方に悪影響を及ぼします。

1
itoctopus