#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);