【发布时间】:2014-07-06 05:39:00
【问题描述】:
这个联系表格已经困扰我大约一周了,任何帮助都会很棒。
我已经设置好我的服务器和控制器,所以它会抓取我的 php 数据,并希望在提交表单时通过 php 处理数据。
控制器似乎正确地发布了数据,并且proccess.php 接收到了数据,我的 express、nginx 等日志确认这一切正常;数据似乎也可以发布;问题似乎出在我的 PHP 中。
我设置它来查询数据,并返回一个确认成功的 JSON 数组并随后邮寄数据;或报告失败;而且由于某种原因,它似乎每次都失败。
这是我的控制器:
mainControllers.controller('ContactCtrl', function ($scope, $http) {
$scope.formData;
$scope.processForm = function() {
console.log('Im in the controller');
console.log($scope.formData);
$http({
method : 'POST',
url : '/process.php',
data : $.param($scope.formData),
headers : { 'Content-Type': 'application/x-www-form-urlencoded' }
}).success(function(formData) {
console.log(formData);
if (formData.success) {
console.log('Success');
} else {
console.log('Fail');
}
});
};
});
我的php:
<?php
error_reporting(E_ALL);
ini_set('display_errors', '1');
require_once 'phpmailer/PHPMailerAutoload.php';
if (isset($_POST['inputName']) && isset($_POST['inputEmail']) && isset($_POST['inputPhone']) && isset($_POST['inputMessage'])) {
//check if any of the inputs are empty
if (empty($_POST['inputName']) || empty($_POST['inputEmail']) || empty($_POST['inputPhone']) || empty($_POST['inputMessage'])) {
$formData = array('success' => false, 'message' => 'Please fill out the form completely.');
echo json_encode($formData);
exit;
}
//create an instance of PHPMailer
$mail = new PHPMailer();
$mail->From = $_POST['inputEmail'];
$mail->FromName = $_POST['inputName'];
$mail->AddAddress('something@test.com'); //recipient
$mail->Subject = $_POST['inputName'];
$mail->Body = "Phone: " . $_POST['inputPhone'] . "\r\n\r\nMessage: " . stripslashes($_POST['inputMessage']);
if (isset($_POST['ref'])) {
$mail->Body .= "\r\n\r\nRef: " . $_POST['ref'];
}
if(!$mail->send()) {
$formData = array('success' => false, 'message' => 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo);
echo json_encode($formData);
exit;
}
$formData = array('success' => true, 'message' => 'Thanks! We have received your message.');
echo json_encode($formData);
} else {
$formData = array('success' => false, 'message' => 'Please fill out the form completely.');
echo json_encode($formData);
}
和html:
<form id="myform" name="myForm" data-abide role="form" ng-submit="processForm()">
<div class="formData.inputName-field">
<label>Your name <small>required</small>
<input type="text" name="formData.inputName" id="formData.inputName" required pattern="[a-zA-Z]+" ng-model="formData.inputName">
</label>
<small class="error">Name is required.</small>
</div>
<div class="formData.inputEmail-field">
<label>Email <small>required</small>
<input type="email" name="formData.inputEmail" id="formData.inputEmail" required ng-model="formData.inputEmail">
</label>
<small class="error">An email address is required.</small>
</div>
<div class="formData.inputPhone-field">
<label>Phone #
<input type="text" name="formData.inputPhone" id="formData.inputPhone"required pattern="^([0-9]( |-)?)?(\(?[0-9]{3}\)?|[0-9]{3})( |-)?([0-9]{3}( |-)?[0-9]{4}|[a-zA-Z0-9]{7})$" ng-model="formData.inputPhone">
</label>
<small class="error">Please enter your number in the format '123-456-7890'.</small>
</div>
<div class="formData.inputMessage-field">
<label>Message
<textarea name="formData.inputMessage" id="formData.inputMessage" ng-model="formData.inputMessage"></textarea> </label></div>
<button type="submit" class="columns small-centered">Submit</button>
<div class="panel">
<p>{{formData}}</p>
<p>{{codeStatus}}</p>
</div>
</form>
【问题讨论】:
-
它到底在哪里失败了?响应是什么样的?
-
我添加了一些日志来尝试查明问题,一个在
if (formData.success) { console.log('Success'); } else { // if successful, bind success message to message console.log('Fail'); }的控制器中调用,另一个在else { $formData = array('success' => false, 'message' => 'Please fill out thsdffe form completely.'); echo json_encode($formData); }的php 文件中 -
所以在 .success(function(formData) 块以及 php 的第二个
$formData =块中......另外,我尝试修改 php 以取消验证并看到'空字符串'(我相信那是消息'..这是来自控制台的屏幕,分别显示响应和 POST 选项卡;gyazo.com/6046ac608bd42ef4b8797950cf69f1e6gyazo.com/5188e4b02a2aba85b14193b23e062b9f 似乎数据已正确发布,但似乎 PHP 没有解释formData 符合预期。 -
尝试
var_dump($_POST)。它看起来像什么? -
将我的 php 文件更改为
<?php var_dump($_POST);产生array(0) { }