AngularJS (Post-метод не разрешен)

#php #angularjs #node.js #xampp

#php #angularjs #node.js #xampp

Вопрос:

Я пытаюсь вставить данные в базу данных MySQL, но не удалось, я пытался часами и безуспешно, пожалуйста, помогите мне. В консоли ошибок указано angular.js:12011 POST http://localhost:8000/insert.php 405 (метод не разрешен). Я использую Xampp. Вот мои коды

view1.html

 <div ng-app="myApp.view1" ng-controller="empcontroller">
    <form>
        Employe No. <input type="text" ng-model="fName" /><br/>
        First Name. <input type="text" ng-model="lName" /><br/>
        Last Name.  <input type="text" ng-model="eMail" /><br/>
        Department. <input type="text" ng-model="userName" /><br/>
        Department. <input type="text" ng-model="passWord" /><br/>
        Department. <input type="text" ng-model="tel" /><br/>

         <button ng-click='SignUp();' >Submit</button><br>
    </form> 
</div>
  

view1.js

 'use strict';

angular.module('myApp.view1', ['ngRoute'])

.config(['$routeProvider', function($routeProvider) {
  $routeProvider.when('/view1', {
    templateUrl: 'view1/view1.html',
    controller: 'empcontroller'
  });
}])

.controller('empcontroller', function ($scope, $http) {

                $scope.errors = [];
                $scope.msgs = [];
                $scope.SignUp = function() {

                    $scope.errors.splice(0, $scope.errors.length); // remove all error messages
                    $scope.msgs.splice(0, $scope.msgs.length);

                    $http.post('insert.php', {'fName': $scope.fName,
            'lName': $scope.lName,
            'Lastname': $scope.last_name,
            'eMail': $scope.eMail,
            'userName': $scope.userName,
            'passWord': $scope.passWord,
            'tel': $scope.eMail}
                    ).success(function(data, status, headers, config) {
                        if (data.msg != '')
                        {
                            $scope.msgs.push(data.msg);
                        }
                        else
                        {
                            $scope.errors.push(data.error);
                        }
                    }).error(function(data, status) { // called asynchronously if an error occurs
// or server returns response with an error status.
                        $scope.errors.push(status);
                    });
                }
});
  

insert.php

 <?php
 $data = json_decode(file_get_contents("php://input"));

    $request = json_decode($postdata);
    $fName  = mysql_real_escape_string($data->fName);
    $lName= mysql_real_escape_string($data->lName);
    $eMail = mysql_real_escape_string($data->eMail);
    $userName = mysql_real_escape_string($data->userName);
$passWord= mysql_real_escape_string($data->passWord);
$tel = mysql_real_escape_string($data->tel);

$con = mysql_connect('localhost', 'root', '');
mysql_select_db('MiddleWork', $con);

$qry_em = 'select count(*) as cnt from UserTest where Username ="' . $userName . '"';
$qry_res = mysql_query($qry_em);
$res = mysql_fetch_assoc($qry_res);

if ($res['cnt'] == 0) {
    $qry = 'INSERT INTO UserTest (Username,Password,Firstname,Lastname,Email,Tel) values ("' . $userName . '","' . $passWord . '","' . $fName . '","' . $lName . '","' . $eMail . '","' . $tel . '")';
    $qry_res = mysql_query($qry);
    if ($qry_res) {
        $arr = array('msg' => "User Created Successfully!!!", 'error' => '');
        $jsn = json_encode($arr);
        print_r($jsn);
    } else {
        $arr = array('msg' => "", 'error' => 'Error In inserting record');
        $jsn = json_encode($arr);
        print_r($jsn);
    }

} else {
    $arr = array('msg' => "", 'error' => 'User Already exists with same email');
    $jsn = json_encode($arr);
    print_r($jsn);
}
?>
  

Комментарии:

1. Итак, два варианта: перенастроить сервер, чтобы разрешить POST, или использовать GET или PUT . Конечно, мне кажется, что вы на самом деле пытаетесь использовать STDIN, который вполне может быть источником сообщения об ошибке….

2. Спасибо за комментарий, но GET и PUT по-прежнему не работают: (

3. То же сообщение об ошибке?

4. Да, сэр, angular.js:12011 ПОСТАВИЛ localhost:8000/insert.php 405 (Метод не разрешен)

5. Итак, ваше приложение Angular запущено на HTTP-сервере NodeJS на порту 8000. Это не приведет к выполнению PHP-скриптов. Проще всего было бы поместить ваше приложение Angular в htdocs папку XAMPP и запустить его оттуда

Ответ №1:

Попробуйте :

 $http({
        method: 'POST',
        url: 'insert.php',
        data: {
            fName: $scope.fName,
            lName: $scope.lName,
            Lastname: $scope.last_name,
            eMail: $scope.eMail,
            userName: $scope.userName,
            passWord: $scope.passWord,
            tel: $scope.eMail
        }
    }).success(function(data){

    })
  

И в вашем php-файле:

 $data = json_decode(file_get_contents("php://input"));

$fName  = mysql_real_escape_string($data->fName);