AJAXを使用してデータベースを挿入するにはどうすればよいですか?
モジュールを作成し、AJAXpostを使用してデータベースにレコードを挿入していますが、 _insertdata.php
_ファイルが呼び出されることを知っている_php_error_log
_に構文エラーが記録されると、サイレントエラーが発生し、データベースが更新されません。
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;
}
_
さらに検索した結果、なんとか解決しました。うまくいけば、以下は、私がそうであったように、失われたjoomla魂に小さな慈悲を提供するでしょう。主な課題は、URLを作成して応答を取得することでした。これが私の解決策です
url: "index.php?option = com_ajax&module = CompanyPage&method = updateDetails&format = raw"
Ajaxリクエストを使用する場合は必須:index.php?option = com_ajax
_mod_CompanyPage
_であるモジュールは、mod _なしで次のように呼び出されます:&module = CompanyPage
ヘルパークラスのメソッドでは、関数の最後にWordAjaxキーが必要です。 function updateDetailsAjax()
ですが、Word Ajaxasなしで作成されます:&method = updateDetails
最後に&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か月前にこの情報を知っていれば、人生はずっと楽になったでしょう。
完全に説明されているJoomlaのAjaxインターフェースを使用してください here 。ホイールを再発明せず、独自のAjax呼び出しを使用しないでください。これは、セキュリティとスケーラビリティの両方に悪影響を及ぼします。