表单提交 AJAX + PHP
form Submit AJAX + PHP
周日,我制作了一个工作脚本,用于将表单数据发送到我的数据库并使用 Mandrill 发送电子邮件。
从星期三开始,我的脚本就不能用了。我正在尝试查找错误,但没有任何解决方法。
我想我的 PHP 脚本有错误,但我不知道哪里出错了。
我的 AJAX returns 正确数据的控制台日志但是 PHP 没有做任何事情。它不接收数据。
还有我的HTML
<form method="POST" id="formContact" action"#">
<input type="text" placeholder="Prénom" name="name" id="formName">
<input type="email" placeholder="Email" name="email" id="formEmail">
<input type="text" placeholder="Sujet" name="subject" id="formSubject">
<textarea cols="30" rows="10" placeholder="Ton message" name="message" id="formMessage"></textarea>
<button type="submit" id="formSubmit">Envoyer</button>
</form>
JavaScript
$(document).ready(function() {
$('#formContact').submit(function(event) {
var formData = {
'name' : $('#formName').val(),
'email' : $("#formEmail").val(),
'subject' : $("#formSubject").val(),
'message' : $("#formMessage").val()
};
$.ajax({
url: "commons/test.php",
type: "POST",
data: formData,
dataType: 'json',
encode: true
})
.done(function(data){
console.log(formData);
console.log(data);
if( ! data.success){
alert('Error');
}else{
alert('Success');
}
});
event.preventDefault();
});
});
PHP
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include('../adm/dbconnect.php'); <- this work well
$data = array();
if (!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['subject']) && !empty($_POST['message']))
{
// var_dump($_POST['name']);
// var_dump($_POST['email']);
// var_dump($_POST['subject']);
// var_dump($_POST['message']);
$to = 'contact@sheguey.land';
$content = ''.$_POST['message'].'';
$subject = 'Nouveau message de '.$_POST['email'].' - Sheguey Land';
$from = ''.$_POST['email'].'';
$uri = 'https://mandrillapp.com/api/1.0/messages/send.json';
$api_key = 'my mandrill api key';
$content_text = strip_tags($content);
$postString = '{
"key": "' . $api_key . '",
"message": {
"html": "' . $content . '",
"text": "' . $content_text . '",
"subject": "' . $subject . '",
"from_email": "' . $from . '",
"from_name": "' . $from . '",
"to": [
{
"email": "' . $to . '",
"name": "' . $to . '"
}
],
"track_opens": true,
"track_clicks": true,
"auto_text": true,
"url_strip_qs": true,
"preserve_recipients": true
},
"async": false
}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
$result = curl_exec($ch);
$req = $bdd->prepare('INSERT INTO contactform (name, email, subject, message) VALUES( :name, :email, :subject, :message)');
$req->execute(array(
'name' => $_POST['name'],
'email' => $_POST['email'],
'subject' => $_POST['subject'],
'message' => $_POST['message']
));
$data['success'] = true;
}else{
$data['success'] = false;
}
echo json_encode($data);
经过两天的研究(更改 PHP 脚本、AJAX 脚本等),我不明白为什么这不再有效。
您可能需要在 formData '"' + $('#formName').val() + '"'
中使用引号
双单引号的原因是什么?
$content = ''.$_POST['message'].'';
$subject = 'Nouveau message de '.$_POST['email'].' - Sheguey Land';
$from = ''.$_POST['email'].'';
我会按如下方式完成:
$content = (string)$_POST['message'];
$subject = "Nouveau message de ".$_POST['email']." - Sheguey Land";
$from = (string)$_POST['email'];
如果您取消注释,是否 var_dump if 语句后的 $_POST 值?
var_dump($_POST); //as a whole
您可能需要设置 error_reporting(E_ALL);至 error_reporting(E_ALL & E_STRICT);有时会为您提供更多信息。
我已经找到问题并解决了。
一个 .htaccess 文件与 PHP 文件位于同一文件夹中,我不知道它为什么在那里。脚本有效。
无论如何谢谢你的帮助;)
周日,我制作了一个工作脚本,用于将表单数据发送到我的数据库并使用 Mandrill 发送电子邮件。
从星期三开始,我的脚本就不能用了。我正在尝试查找错误,但没有任何解决方法。
我想我的 PHP 脚本有错误,但我不知道哪里出错了。 我的 AJAX returns 正确数据的控制台日志但是 PHP 没有做任何事情。它不接收数据。
还有我的HTML
<form method="POST" id="formContact" action"#">
<input type="text" placeholder="Prénom" name="name" id="formName">
<input type="email" placeholder="Email" name="email" id="formEmail">
<input type="text" placeholder="Sujet" name="subject" id="formSubject">
<textarea cols="30" rows="10" placeholder="Ton message" name="message" id="formMessage"></textarea>
<button type="submit" id="formSubmit">Envoyer</button>
</form>
JavaScript
$(document).ready(function() {
$('#formContact').submit(function(event) {
var formData = {
'name' : $('#formName').val(),
'email' : $("#formEmail").val(),
'subject' : $("#formSubject").val(),
'message' : $("#formMessage").val()
};
$.ajax({
url: "commons/test.php",
type: "POST",
data: formData,
dataType: 'json',
encode: true
})
.done(function(data){
console.log(formData);
console.log(data);
if( ! data.success){
alert('Error');
}else{
alert('Success');
}
});
event.preventDefault();
});
});
PHP
<?php
error_reporting(E_ALL);
ini_set("display_errors", 1);
include('../adm/dbconnect.php'); <- this work well
$data = array();
if (!empty($_POST['name']) && !empty($_POST['email']) && !empty($_POST['subject']) && !empty($_POST['message']))
{
// var_dump($_POST['name']);
// var_dump($_POST['email']);
// var_dump($_POST['subject']);
// var_dump($_POST['message']);
$to = 'contact@sheguey.land';
$content = ''.$_POST['message'].'';
$subject = 'Nouveau message de '.$_POST['email'].' - Sheguey Land';
$from = ''.$_POST['email'].'';
$uri = 'https://mandrillapp.com/api/1.0/messages/send.json';
$api_key = 'my mandrill api key';
$content_text = strip_tags($content);
$postString = '{
"key": "' . $api_key . '",
"message": {
"html": "' . $content . '",
"text": "' . $content_text . '",
"subject": "' . $subject . '",
"from_email": "' . $from . '",
"from_name": "' . $from . '",
"to": [
{
"email": "' . $to . '",
"name": "' . $to . '"
}
],
"track_opens": true,
"track_clicks": true,
"auto_text": true,
"url_strip_qs": true,
"preserve_recipients": true
},
"async": false
}';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $uri);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postString);
$result = curl_exec($ch);
$req = $bdd->prepare('INSERT INTO contactform (name, email, subject, message) VALUES( :name, :email, :subject, :message)');
$req->execute(array(
'name' => $_POST['name'],
'email' => $_POST['email'],
'subject' => $_POST['subject'],
'message' => $_POST['message']
));
$data['success'] = true;
}else{
$data['success'] = false;
}
echo json_encode($data);
经过两天的研究(更改 PHP 脚本、AJAX 脚本等),我不明白为什么这不再有效。
您可能需要在 formData '"' + $('#formName').val() + '"'
中使用引号双单引号的原因是什么?
$content = ''.$_POST['message'].'';
$subject = 'Nouveau message de '.$_POST['email'].' - Sheguey Land';
$from = ''.$_POST['email'].'';
我会按如下方式完成:
$content = (string)$_POST['message'];
$subject = "Nouveau message de ".$_POST['email']." - Sheguey Land";
$from = (string)$_POST['email'];
如果您取消注释,是否 var_dump if 语句后的 $_POST 值?
var_dump($_POST); //as a whole
您可能需要设置 error_reporting(E_ALL);至 error_reporting(E_ALL & E_STRICT);有时会为您提供更多信息。
我已经找到问题并解决了。
一个 .htaccess 文件与 PHP 文件位于同一文件夹中,我不知道它为什么在那里。脚本有效。
无论如何谢谢你的帮助;)