2015-04-29 6 views
2

Не удалось сделать $http почтовый запрос, получив undefined для $_POST["name"] в php и для всех остальных опубликованных данных. но в моей консоли правильно печатают все данные, может ли помочь мне, где я ошибся. Я посылаю данные при срабатывании события click, я новичок в угловом, пожалуйста, помогите мне решить эту проблему, благодаря ответам заранее.

angular.element(document.querySelector('#applyJob')).unbind('click').bind('click', function() { 
    console.log($scope.userName+$scope.userEmail+$scope.userMobileNo+$scope.subject+$scope.userCoverLetter+$scope.attach); 
    $http({ 
     method: "POST", 
     url: "mailer.php", 
     data: { 
      name : $scope.userName, 
      mail : $scope.userEmail, 
      no : $scope.userMobileNo, 
      subject : $scope.subject, 
      message : $scope.userCoverLetter, 
      attach : $scope.attach 
     }, 
     headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} 
    }); 
}); 

мой php код выглядит ниже

require ('smtp_lib/phpmailer.php'); 
require ('smtp_lib/smtp.php'); 
$mail = new PHPMailer(); // create a new object 
$mail->IsSMTP(); // enable SMTP 
$mail->SMTPDebug = 1; // debugging: 1 = errors and messages, 2 = messages only 
$mail->SMTPAuth = true; // authentication enabled 
$mail->SMTPSecure = 'ssl'; // secure transfer enabled REQUIRED for GMail 
$mail->Host = "smtp.gmail.com"; 
$mail->Port = 465; // or 587 
$mail->IsHTML(true); 
$mail->Username = "[email protected]"; 
$mail->Password = "yyyyyy"; 
$mail->FromName = $_POST["name"]; 
$mail->Subject = $_POST["subject"]; 
$mail->AddAddress("[email protected]"); 
$mail->AddReplyTo($_POST["mail"]); 
$mail->Body = $_POST["message"].'<br>'.$_POST["no"]; 
$mail->AddAttachment($_POST["attach"]); 
$mail->Send(); 

если я открываю php_error_log я получаю эти ошибки

[29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: name in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 16 

[29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: subject in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 17 

[29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: mail in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 20 

[29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: message in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 21 

[29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: name in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 21 

[29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: mail in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 21 

[29-Apr-2015 08:44:36 Europe/Berlin] PHP Notice: Undefined index: no in C:\xampp\htdocs\wwwroot\contact-form\files\contact_mailer.php on line 21 
+0

Ваш код кажется правильным, можете ли вы 'var_dump ($ _ POST)' и делиться результатом –

+0

@yiiframe i updated – Selva

+0

В этом нет никакой подсказки. Можете ли вы проверить свою консоль, если на сервер отправлен запрос ajax, и если да, то он отправляется как сообщение формы, как это в примере http://blog.yiiframe.com/wp-content/uploads/2014/11/form -post-angularjs.jpg –

ответ

1
$post = json_decode(file_get_contents('php://input'), true); 

Я добавил это выше одной линии в mailer.php, моя проблема решена. Спасибо за все ответы.

4

Это известная проблема Угловая с Php вы можете решить эту проблему с;

var form = {name:"x",mail:"x",no:0,subject:"x",message:"x",attach:"x"}; 
var formData = new form(); 
formData.name = $scope.userName, 
formData.mail = $scope.userEmail, 
formData.no = $scope.userMobileNo, 
formData.subject = $scope.subject, 
formData.message = $scope.userCoverLetter, 
formData.attach = $scope.attach 

$http({ 
     method: "POST", 
     url: "mailer.php", 
     data: formData 
}); 

В РНР вы принимаете это с file_get_contents("php://input");

$postdata = file_get_contents("php://input"); 
$formData = json_decode($postdata); 
echo $formData->name; 
+2

Я понял спасибо. – hurricane

+0

Я не буду говорить о своей проблеме, ее просто по умолчанию 'content-type' установлен в' угловой' '' application/json'.вы можете изменить их в соответствии с вашими потребностями и выбором. –

+0

@hurricane. Я запускаю ваш код с ошибкой, как этот 'Uncaught TypeError: не могу установить свойство 'name undefined' – Selva

0

Сначала проверьте $scope.userName, если он определен в консоли, прежде чем отправить запрос, и вы можете написать это:

var data = { 
      name : $scope.userName, 
      mail : $scope.userEmail, 
      no : $scope.userMobileNo, 
      subject : $scope.subject, 
      message : $scope.userCoverLetter, 
      attach : $scope.attach 
      } 

$http.post('mailer.php', { params: data }). 
    success(function(data, status, headers, config) { 
    // something 
    }). 
    error(function(data, status, headers, config) { 
    // something else 
    }); 
0

Добавить директиву для установки в качестве формы поста для все вашего запроса HTTP POST. ваш код PHP будет оставаться такой же

//Directive - change App with your app name 
    App.factory("setAsFormPost", ['$rootScope', function($rootScope) { 
     function transformRequest(data, getHeaders) { 
      var headers = getHeaders(); 
      headers[ "Content-type" ] = "application/x-www-form-urlencoded; charset=utf-8"; 
      return($.param(data)); 
     } 
     return(transformRequest); 
    }]); 

// you need to pass setAsFormPost to your controller like this 
     App.controller('ControllerName', 
     ['$scope','setAsFormPost', '$http', function($rootScope, $scope, messageHandler, settings, yiiBox, yiiHttp) { 
     $http.post('mailer.php', {name : $scope.userName, mail : $scope.userEmail, 
       no : $scope.userMobileNo, subject : $scope.subject, message : $scope.userCoverLetter, 
       attach : $scope.attach}, {transformRequest: setAsFormPost}).success(function (result) { 
      //something 
     }).error(function (error) { 
      //something 
     }); 
    }]);