我有一个AngularJS和PHP应用程序,可以在mysql
数据库中保存和搜索。
在我的index.html中,我有一个显示数据库中所有记录的表,一个包含两个输入文本的表单和一个保存信息的按钮。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<title>Insert title here</title>
</head>
<body ng-app="carApp" ng-controller="carCtrl">
<div class="container">
<div class="jumbotron">
<p>Simple CRUD in AngularJS and PHP</p>
</div>
<table class="table">
<tr>
<th>ID</th>
<th>Name</th>
<th>Plate</th>
</tr>
<tr ng-repeat="c in cars">
<td>{{c.car_id}}</td>
<td>{{c.car_name}}</td>
<td>{{c.car_plate}}</td>
</tr>
</table>
<br /> <br />
<h3>New Car</h3>
<form role="form">
<div class="row">
<div class="col-sm-6">
<div class="form-group">
<label>Car Name: {{name}}</label> <input type="text" ng-model="name" class="form-control">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<label>Car Plate: {{plate}}</label> <input type="text" ng-model="plate" class="form-control">
</div>
</div>
</div>
<button type="button" ng-click="save()" class="btn btn-primary">Save</button>
</form>
</div>
<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
<script>
var app = angular.module('carApp', []);
app.controller('carCtrl', function($scope, $http) {
$scope.cars = [];
$scope.name = '';
$scope.plate = '';
getCars();
$scope.save = function() {
var car = {
name : $scope.name,
plate : $scope.plate
};
$http.post("../database/insert/newCar.php", car).success(
function() {
console.log(car);
getCars();
});
};
function getCars() {
$http.get("../database/select/cars.php").success(
function(response) {
$scope.cars = response;
});
}
;
});
</script>
</body>
</html>
数据库中的搜索是可以的,但当我尝试插入时,只有当两个字段都填充了numbers
时,应用程序才会保存。当我尝试保存strings
时,没有保存任何内容。我不知道为什么会发生这种情况,因为我在两个字段中都使用了输入类型text
,而数据库中的列是varchar
。
EG:
车名:111111111,车牌:1111111111
结果:已保存信息
车名:333333333,车牌:12345667
结果:信息已保存
车辆名称:333333333,车牌:12 34 56 67
结果:无信息已保存
车辆名称:333 33 33 33,车牌号:12345667
结果:信息未保存
车辆名称:aaaaaaaaaa,车辆车牌:bbbbbbbbb
结果:信息未保存
汽车名称:hj3k4hjk34h,车牌号:1a2b3ce49
结果:无信息已保存
这是新的Car.php:
<?php
include '../connector/mysql_connection.inc';
$json = file_get_contents('php://input');
$car = json_decode($json);
$sql = "INSERT INTO `testing_angular`.`car` (`car_name`, `car_plate`) VALUES (" . $car->name . ", " . $car->plate . ");";
$connection->query($sql);
$connection->close();
?>
这是桌子"汽车":
CREATE TABLE IF NOT EXISTS `car`(
`car_id` int(11) NOT NULL AUTO_INCREMENT,
`car_name` varchar(255) NOT NULL,
`car_plate` varchar(50) NOT NULL,
PRIMARY KEY (`car_id`),
UNIQUE KEY `car_plate` (`car_plate`)
);
我认为如果你这样引用插入值会更好:
"INSERT INTO `testing_angular`.`car` (`car_name`, `car_plate`)
VALUES ('" . $car->name . "', '" . $car->plate . "');";
当然,当以这种方式构造语句时,SQL注入也会出现常见的问题。
不要这样做$http.post("../database/insert/newCar.php", car).success(
function() {
console.log(car);
getCars();
});
$http.post("../database/insert/newCar.php", car).success(
function(respone) {
$scope.cars = response;
});
在保存后的php文件中,将搜索到的数据发送到前台。这是更有效的方法。
试着这样做$car = json_decode($json, TRUE);
$sql =
"INSERT INTO
测试_角.
车(
车名称,
车_板)
VALUES ('" . $car['name'] . "', '" . $car['plate'] . "');";
解码后尝试var_dump$car。
用要保存的数据手工编写sql解码函数后的chceck数据