Php Joomla 3.0自定义模块:在ajax提交表单上上载文件

Php Joomla 3.0自定义模块:在ajax提交表单上上载文件,php,file,joomla,upload,Php,File,Joomla,Upload,目前,我正在开发一个自定义模块,其中包含一个表单并通过ajax提交 田野 <input type="file" id="file" name="file" accept="image/*" disabled="disabled" /> ajax提交(使用json) $.ajax({ 类型:“POST”, url:“modules/mod_custom_form/submit_form.php”, 数据:dataString, 数据类型:“JSON”, 超时:6000, 成功:功

目前,我正在开发一个自定义模块,其中包含一个表单并通过ajax提交

田野

<input type="file" id="file" name="file" accept="image/*" disabled="disabled" />

ajax提交(使用json)

$.ajax({
类型:“POST”,
url:“modules/mod_custom_form/submit_form.php”,
数据:dataString,
数据类型:“JSON”,
超时:6000,
成功:功能(响应){
//论成功
如果(response.success==1){
$('#customForm').html(“”);
$('#message').html(“表单已发送!”)
.append(“更多文本。

”) .hide() .fadeIn(1500,函数(){ $(“#消息”)。追加(“”); }); } //论失败 否则{ $('#customForm').html(“”); $('#message').html(“失败”); } } });
提交_form.php文件

// no direct access
define('_JEXEC', 1);
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );

require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );
require_once( JPATH_BASE . DS . 'libraries' . DS . 'joomla' . DS . 'factory.php' );
$mainframe =& JFactory::getApplication('site');

// sender email
$email = 'maarten@mail.com';
$subject = 'Aanvraag';
// create the header array
$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/html; charset=iso-8859-1";
$headers[] = "From: beheer <maarten@mail.com>";
$headers[] = "Bcc: beheer <maarten@mail.com>";
$headers[] = "Reply-To: Recipient Name <receiver@domain3.com>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/" . phpversion();

// get all posted data and put them in variables
$bedrijfsnaam = $_POST['bedrijfsnaam'];
$_FILES = $_POST['uploaded_file'];

// create the full message
$message = 'email';

// send mail
if (mail($to, $subject, $message, implode("\r\n", $headers))) {
    //save file function
    getInput($_FILES);
    // return message
    echo json_encode(array('success' => 1));
    // insert the email into the database
    $database =& JFactory::getDBO();
    $query = "INSERT INTO #__email_forms (mid, email, message) VALUES ('2', 'myemail@mail.com', '$message')";
    $database->setQuery($query);
    $database->query();
}
else {
    echo json_encode(array('success' => 0));
}
//无法直接访问
定义(1);
定义('DS',目录\分隔符);
定义('JPATH_BASE',$_SERVER['DOCUMENT_ROOT']);
require_once(JPATH_BASE.DS.'includes'.DS.'defines.php');
require_once(JPATH_BASE.DS.'includes.DS.'framework.php');
require_once(JPATH_BASE.DS.'libraries.DS.'joomla.DS.'factory.php');
$mainframe=&JFactory::getApplication('site');
//发件人电子邮件
$email='1maarten@mail.com';
$subject='Aanvraag';
//创建标头数组
$headers=array();
$headers[]=“MIME版本:1.0”;
$headers[]=“内容类型:text/html;字符集=iso-8859-1”;
$headers[]=“From:beheer”;
$headers[]=“密件抄送:beheer”;
$headers[]=“回复:收件人姓名”;
$headers[]=“主题:{$Subject}”;
$headers[]=“X-Mailer:PHP/”。phpversion();
//获取所有发布的数据并将其放入变量中
$bedrijfsnaam=$_POST['bedrijfsnaam'];
$\u FILES=$\u POST['uploaded\u file'];
//创建完整的消息
$message='email';
//寄信
if(邮件($to、$subject、$message,内爆(“\r\n”,$headers))){
//保存文件功能
getInput($\u文件);
//回信
echo json_编码(数组('success'=>1));
//将电子邮件插入数据库
$database=&JFactory::getDBO();
$query=“插入到#uu电子邮件u表单(mid、电子邮件、消息)值('2','myemail@mail.com“,“$message”)”;
$database->setQuery($query);
$database->query();
}
否则{
echo json_编码(数组('success'=>0));
}
我如何实现上传文件并使用ajax保存表单的可能性?我已经找了好几个小时了,但到目前为止还没有找到任何有用的东西


提前感谢您的建议。

Ajax文件上传是一件棘手的事情,特别是如果您涉及会话数据,以确保用户上传实际上是允许的。当它是一个公共上传时,它变得更加危险,因为你需要做更多的服务器端验证

我通常使用valums提供的ajax文件上传器进行ajax上传,如下所示:


它的运行非常简单,而且它还有一个jQuery插件,可以使它更简单(因为您已经在使用jQuery)。

您的问题是什么?请参阅更新的问题:)您是否将这两个文件都放在同一个文件夹中?发布submitform.phpI的代码我不太清楚你的意思,我想把文件保存在media或images文件夹中。表单文件和submit_form.php文件位于同一个模块文件夹中。发布submitform.php的代码。以及在submit-form.php中打印时获得的数据。
// no direct access
define('_JEXEC', 1);
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE', $_SERVER[ 'DOCUMENT_ROOT' ] );

require_once( JPATH_BASE . DS . 'includes' . DS . 'defines.php' );
require_once( JPATH_BASE . DS . 'includes' . DS . 'framework.php' );
require_once( JPATH_BASE . DS . 'libraries' . DS . 'joomla' . DS . 'factory.php' );
$mainframe =& JFactory::getApplication('site');

// sender email
$email = 'maarten@mail.com';
$subject = 'Aanvraag';
// create the header array
$headers   = array();
$headers[] = "MIME-Version: 1.0";
$headers[] = "Content-type: text/html; charset=iso-8859-1";
$headers[] = "From: beheer <maarten@mail.com>";
$headers[] = "Bcc: beheer <maarten@mail.com>";
$headers[] = "Reply-To: Recipient Name <receiver@domain3.com>";
$headers[] = "Subject: {$subject}";
$headers[] = "X-Mailer: PHP/" . phpversion();

// get all posted data and put them in variables
$bedrijfsnaam = $_POST['bedrijfsnaam'];
$_FILES = $_POST['uploaded_file'];

// create the full message
$message = 'email';

// send mail
if (mail($to, $subject, $message, implode("\r\n", $headers))) {
    //save file function
    getInput($_FILES);
    // return message
    echo json_encode(array('success' => 1));
    // insert the email into the database
    $database =& JFactory::getDBO();
    $query = "INSERT INTO #__email_forms (mid, email, message) VALUES ('2', 'myemail@mail.com', '$message')";
    $database->setQuery($query);
    $database->query();
}
else {
    echo json_encode(array('success' => 0));
}