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
.
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;
}
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"
Obligatoire si vous utilisez une requête ajax: index.php? Option = com_ajax
Votre module étant mod_CompanyPage
Est appelé sans le mod _ en tant que: & module = CompanyPage
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
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.
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é.