저는 Angular/Bootstrap로 개발하는 데 익숙하며 전자 메일을 보내는 PHP 파일에 AJAX 호출을 위해 각도 컨트롤러를 사용하는 연락처 양식을 내 사이트에 가지고 있습니다.각형 컨트롤러가 메시지를 표시하지 않습니다
모든 것이 작동하는 동안 ~ AJAX는 &으로 전자 메일을 보내고, 화면에 경고 표시 줄을 표시해야한다고 가정합니다. 웬일인지, 그것은 단지 "bg-danger"바를 표시한다 (성공했을 때 bg-ssuccess 바를 표시해야한다). 그리고 결코 텍스트 메시지를 표시하지 않는다. 여기
는 문의 양식의 무슨의 이미지와 그 이후에 성공적으로 메시지를 보냈연락처 양식에 대한 나의 HTML :
<div class="container" ng-controller="ContactController">
<div class="row">
<div class="col-md-12">
<div class="well well-sm">
<form class="form-horizontal" method="post" role="form" ng-submit="submit(contactform)" name="contactform">
<fieldset>
<legend class="text-center header">Send us a Message</legend>
<div class="form-group" ng-class="{ 'has-error': contactform.inputFirstName.$invalid && submitted }">
<span class="col-md-1 col-md-offset-2 text-center"><i class="fa fa-user bigicon"></i></span>
<div class="col-md-8">
<!--<input id="firstname" name="firstname" type="text" placeholder="First Name" required="required" class="form-control">-->
<input ng-model="formData.inputFirstName" type="text" class="form-control" id="inputFirstName" name="inputFirstName" placeholder="First Name" required>
</div>
</div>
<div class="form-group" ng-class="{ 'has-error': contactform.inputLastName.$invalid && submitted }">
<span class="col-md-1 col-md-offset-2 text-center"><i class="fa fa-user bigicon"></i></span>
<div class="col-md-8">
<!--<input id="lastname" name="lastname" type="text" placeholder="Last Name" required="required" class="form-control">-->
<input ng-model="formData.inputLastName" type="text" class="form-control" id="inputLastName" name="inputLastName" placeholder="Last Name" required>
</div>
</div>
<div class="form-group" ng-class="{ 'has-error': contactform.inputEmail.$invalid && submitted }">
<span class="col-md-1 col-md-offset-2 text-center"><i class="fa fa-envelope-o bigicon"></i></span>
<div class="col-md-8">
<!--<input id="emailid" name="emailid" type="text" placeholder="Email Address" required="required" class="form-control">-->
<input ng-model="formData.inputEmail" type="email" class="form-control" id="inputEmail" name="inputEmail" placeholder="Email Address" required>
</div>
</div>
<div class="form-group" ng-class="{ 'has-error': contactform.inputPhone.$invalid && submitted }">
<span class="col-md-1 col-md-offset-2 text-center"><i class="fa fa-phone-square bigicon"></i></span>
<div class="col-md-8">
<!--<input id="phone" name="phone" type="text" placeholder="Phone" required="required" class="form-control">-->
<input ng-model="formData.inputPhone" type="tel" class="form-control" id="inputPhone" name="inputPhone" placeholder="Phone" required>
</div>
</div>
<div class="form-group" ng-class="{ 'has-error': contactform.inputMessage.$invalid && submitted }">
<span class="col-md-1 col-md-offset-2 text-center"><i class="fa fa-pencil-square-o bigicon"></i></span>
<div class="col-md-8">
<!--<textarea class="form-control" id="message" name="message" required="required" placeholder="Enter your massage for us here. We will get back to you within 2 business days." rows="7"></textarea>-->
<textarea ng-Model="formData.inputMessage" class="form-control" id="inputMessage" name="inputMessage" placeholder="Enter your message for us here. We will get back to you shortly..." rows="7" required></textarea>
</div>
</div>
<div class="form-group">
<div class="col-md-12 text-center">
<button type="submit" class="btn btn-primary btn-lg" ng-disabled="submitButtonDisabled">Submit</button>
</div>
</div>
</fieldset>
<p ng-class="result" style="padding: 15px; margin: 0;">{{ resultMessage }}</p>
</form>
</div>
</div>
</div>
</div>
내 각도 컨트롤러 :
var app = angular.module("myApp", ["ngRoute", "ngAnimate", "ngCsv"]);
app.config(function ($routeProvider) {
$routeProvider.when("/", {
templateUrl: "templates/home.html"
}).when("/contact", {
controller: 'ContactController',
templateUrl: "templates/contact.html"
})
});
app.controller('ContactController', function ($scope, $http) {
$scope.result = 'hidden'
$scope.resultMessage;
$scope.formData; //formData is an object holding the name, email, subject, and message
$scope.submitButtonDisabled = false;
$scope.submitted = false; //used so that form errors are shown only after the form has been submitted
$scope.submit = function(contactform) {
$scope.submitted = true;
$scope.submitButtonDisabled = true;
if (contactform.$valid) {
$http({
method : 'POST',
url : 'php/contact.php',
data : $.param($scope.formData), //param method from jQuery
headers : { 'Content-Type': 'application/x-www-form-urlencoded' } //set the headers so angular passing info as form data (not request payload)
}).success(function(data){
console.log(data);
if (data.success) { //success comes from the return json object
$scope.submitButtonDisabled = false;
$scope.result='bg-success';
$scope.resultMessage = data.message;
//$scope.result='alert alert-success';
} else {
$scope.submitButtonDisabled = true;
$scope.resultMessage = data.message;
$scope.result='bg-danger';
}
});
} else {
$scope.submitButtonDisabled = false;
$scope.resultMessage = 'Failed <img src="http://www.chaosm.net/blog/wp-includes/images/smilies/icon_sad.gif" alt=":(" class="wp-smiley"> Please fill out all the fields.';
$scope.result='bg-danger';
}
}
});
이메일을 보내기위한 서버 측 PHP 코드.
<?php
require_once ("class.phpmailer.php"); // Include phpmailer class
ini_set('display_errors', 'On');
error_reporting(E_ALL | E_STRICT);
if (isset($_POST['inputFirstName']) && isset($_POST['inputLastName']) && isset($_POST['inputEmail']) && isset($_POST['inputPhone']) && isset($_POST['inputMessage'])) {
//check if any of the inputs are empty
if (empty($_POST['inputFirstName']) || empty($_POST['inputLastName']) || empty($_POST['inputEmail']) || empty($_POST['inputPhone']) || empty($_POST['inputMessage'])) {
$data = array('success' => false, 'message' => 'Please fill out the form completely.');
echo json_encode($data);
exit;
}
$message=
'First Name: '.$_POST['inputFirstName'].'<br />
Last Name: '.$_POST['inputLastName'].'<br />
Phone: '.$_POST['inputPhone'].'<br />
Email: '.$_POST['inputEmail'].'<br />
Comments: '.$_POST['inputMessage'].'
';
$mail = new PHPMailer(); // Instantiate the PHPMailer Class
$mail->IsSMTP(); // enable SMTP
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only
$mail->SMTPAuth = true; // SMTP authentication enabled
$mail->SMTPSecure = 'ssl'; // secure transfer enabled + REQUIRED for Gmail (either SSL or TLS)
$mail->Host = "smtp.gmail.com"; //Gmail SMTP Server to relay thru
$mail->Port = 465; // Port 465 as we're using SSL... or use Port 587 for TLS
$mail->IsHTML(true); // We're sending a HTML formatted message
$mail->Username = "*****@gmail.com"; // Gmail account for authentication
$mail->Password = "*********"; // Gmail password for authentication
$mail->SetFrom("*****@gmail.com"); // The email is being sent from this address
$mail->Subject = "Website Contact Form Enquiry"; // The subject line of the email
$mail->Body = ($message); // The actual email message to be sent
$mail->AddAddress("*****@gmail.com"); // The email is being sent to this address
//if (isset($_POST['ref'])) {
// $mail->Body .= "\r\n\r\nRef: " . $_POST['ref'];
// }
if(!$mail->send()) {
$data = array('success' => false, 'message' => 'Message could not be sent. Mailer Error: ' . $mail->ErrorInfo);
echo json_encode($data);
exit;
}
$data = array('success' => true, 'message' => 'Thanks! We have received your message.');
error_log("Data: ".$data['success']." Message: ".$data['message']);
echo json_encode($data);
//error_log("Data: ".$data['success']);
} else {
$data = array('success' => false, 'message' => 'Please fill out the form completely.');
echo json_encode($data);
}
?>
** 업데이트 - 문제는 각 측에 있고이 코드에 컨트롤러를 변경,하지만 지금은 항상 성공. 또한, 콘솔 로그 디스플레이는 PHP에서 메시지를 얻고있는 동안 내가, 시도 중요하지, 그것은 메시지를 표시하지 :
if (contactform.$valid) {
var request = $http({
method : 'POST',
url : 'php/contact.php',
data : $.param($scope.formData), //param method from jQuery
headers : { 'Content-Type': 'application/x-www-form-urlencoded' } //set the headers so angular passing info as form data (not request payload)
});
if (request.success) { //success comes from the return json object
console.log(request);
$scope.submitButtonDisabled = false;
$scope.result='bg-success';
$scope.resultMessage = "'Thanks!... We have received your message, and will be in contact shortly"
} else {
$scope.submitButtonDisabled = true;
$scope.resultMessage = "Opps!... something went wrong. Please Contact OpenHouse directly to let them know of this error.";
$scope.result='bg-danger';
};
//);
데이터가이 브래지어처럼 보이도록. 성공한 일? 지금은 메시지를 표시하지 않으므로 data.success가 참이 아니라고 가정합니다. –
PHP 측에서 출력 및 성공은 'true'입니다. 하지만 PHP를 수정하더라도 (전자 메일 보내기에 실패 할 수 있음), 여전히 메시지가 표시되지 않고 동일한 막대가 나타납니다. - 문제는 Angular 측과 관련 있다고 가정하지만 어디에 있는지 전혀 모릅니다. – BlissSol
편집 - PHP 측에서 '성공'을 배열에 = 1 기록했을 때 (이메일 전송에 성공했을 때). 부울 true/false (?)에 대한 작업을하고 있다고 가정합니다. – BlissSol