使用 AngularJS 中的 $routeParams 将 ID 参数从 url 传递到 php 脚本?
Passing ID parameter from url to a php script using $routeParams in AngularJS?
我喜欢将 ID 参数传递给 php,这样我就可以在脚本中检索 sql 数据库的特定行。
ID 参数在 URL 中可用,例如 (http://localhost/RoutingAngularJS/index.php#/students/1)。最后一位数字 1 是数据库中的行 ID,因此可以检索该行中的人的信息。
$routeParams 在控制器中用作
var app = angular.module("Demo", ["ngRoute"])
.config(function($routeProvider){
$routeProvider
.
.when("/students/:id", {
templateUrl:"Templates/studentDetails.html",
controller:"studentDetailsController"
})
})
.controller("studentDetailsController", function ($scope, $http, $routeParams) {
$http({
url:"api/ReadOneStudent.php",
params:{id:$routeParams.id},
method: "get"
}).then(function(response){
$scope.student = response.records;
})
});
我的 ReadOneStudent.php 是
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
// include database and object files
include_once 'database.php';
include_once 'Students.php';
// instantiate database and product object
$database = new Database();
$db = $database->getConnection();
// initialize object
$student = new Students($db);
// get id of product to be edited
//$data = json_decode(file_get_contents("php://input"));
// set ID property of product to be edited
$student->id = ????;
// read the details of product to be edited
$student->readOneStudent();
// create array
$student_arr[] = array(
"id" => $student->id,
"name" => $student->name,
"gender" => $student->gender,
"city" => $product->city
);
echo '{"records":[' . $student_arr . ']}';
// make it json format
//print_r(json_encode($student_arr));
?>
我喜欢把id传给$student->id,现在是用????。
谢谢
编辑:
var app = angular.module("Demo", ["ngRoute"])
.config(function($routeProvider){
$routeProvider
.
.when("/students/:id", {
templateUrl:"Templates/studentDetails.html",
controller:"studentDetailsController"
})
})
.controller("studentDetailsController", function ($scope, $http, $routeParams) {
$http({
url:"api/ReadOneStudent.php",
params:$routeParams,
method: "get"
}).then(function(response){
$scope.student = response.data;
})
});
ReadOneStudent.php
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
// include database and object files
include_once 'database.php';
include_once 'Students.php';
// instantiate database and product object
$database = new Database();
$db = $database->getConnection();
// initialize object
$student = new Students($db);
// get id of product to be edited
//$data = json_decode(file_get_contents("php://input"));
// set ID property of product to be edited
if (!isset($_GET['id'])) {
http_response_code(400); // bad request
exit;
}
$student->id = $_GET['id'];
// read the details of product to be edited
$found = $student->readOneStudent(); // assuming this returns something useful
if (!$found) {
http_response_code(404);
exit;
}
// create array
// Seeing as this is called "read ONE student", why return an array?
header('Content-type: application/json');
echo json_encode([
'id' => $student->id,
'name' => $student->name,
'gender' => $student->gender,
'city' => $student->city
]); // maybe you can even just use json_encode($student)
exit;
// make it json format
//print_r(json_encode($student_arr));
?>
Students.php
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
class Students{
// database connection and table name
private $conn;
private $table_name = "tblStudents";
// object properties
public $id;
public $name;
public $gender;
public $city;
// constructor with $db as database connection
public function __construct($db){
$this->conn = $db;
}
public function readOneStudent(){
// query to read single record
$query = "SELECT
id, name, gender, city
FROM
" . $this->table_name . "
WHERE
id = ?
LIMIT
0,1";
// prepare query statement
$stmt = $this->conn->prepare( $query );
// bind id of product to be updated
$stmt->bindParam(1, $this->id);
// execute query
$stmt->execute();
// get retrieved row
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// set values to object properties
$this->name = $row['name'];
$this->gender = $row['gender'];
$this->city = $row['city'];
}
}
?>
尝试使用 $_GET['id']
在 PHP
中使用密钥 id 访问 GET
你在这里做了一些奇怪的事情。首先,您的 PHP
Students.php - 制作 readOneStudent()
return 有用的东西
if (!$row = $stmt->fetch(PDO::FETCH_ASSOC)) {
return false;
}
// set values to object properties
$this->name = $row['name'];
$this->gender = $row['gender'];
$this->city = $row['city'];
$stmt->closeCursor();
return true;
ReadOneStudent.php - 回复有用的状态和 JSON
if (!isset($_GET['id'])) {
http_response_code(400); // bad request
exit;
}
$student->id = $_GET['id'];
if (!$student->readOneStudent()) {
http_response_code(404);
exit;
}
// Seeing as this is called "read ONE student", why return an array?
header('Content-type: application/json');
echo json_encode([
'id' => $student->id,
'name' => $student->name,
'gender' => $student->gender,
'city' => $student->city
]); // maybe you can even just use json_encode($student)
exit;
接下来,我会在路由配置中使用resolve
属性
$routeProvider.when("/students/:id", {
templateUrl: "Templates/studentDetails.html",
controller:"studentDetailsController",
resolve: {
student: function($routeParams, $http) {
return $http.get('api/ReadOneStudent.php', {
params: {id: $routeParams.id}
}).then(function(response) {
return response.data
});
}
}
})
最后在您的控制器中
.controller('studentDetailsController', function($scope, student) {
$scope.student = student;
})
我喜欢将 ID 参数传递给 php,这样我就可以在脚本中检索 sql 数据库的特定行。
ID 参数在 URL 中可用,例如 (http://localhost/RoutingAngularJS/index.php#/students/1)。最后一位数字 1 是数据库中的行 ID,因此可以检索该行中的人的信息。
$routeParams 在控制器中用作
var app = angular.module("Demo", ["ngRoute"])
.config(function($routeProvider){
$routeProvider
.
.when("/students/:id", {
templateUrl:"Templates/studentDetails.html",
controller:"studentDetailsController"
})
})
.controller("studentDetailsController", function ($scope, $http, $routeParams) {
$http({
url:"api/ReadOneStudent.php",
params:{id:$routeParams.id},
method: "get"
}).then(function(response){
$scope.student = response.records;
})
});
我的 ReadOneStudent.php 是
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
// include database and object files
include_once 'database.php';
include_once 'Students.php';
// instantiate database and product object
$database = new Database();
$db = $database->getConnection();
// initialize object
$student = new Students($db);
// get id of product to be edited
//$data = json_decode(file_get_contents("php://input"));
// set ID property of product to be edited
$student->id = ????;
// read the details of product to be edited
$student->readOneStudent();
// create array
$student_arr[] = array(
"id" => $student->id,
"name" => $student->name,
"gender" => $student->gender,
"city" => $product->city
);
echo '{"records":[' . $student_arr . ']}';
// make it json format
//print_r(json_encode($student_arr));
?>
我喜欢把id传给$student->id,现在是用????。
谢谢
编辑:
var app = angular.module("Demo", ["ngRoute"])
.config(function($routeProvider){
$routeProvider
.
.when("/students/:id", {
templateUrl:"Templates/studentDetails.html",
controller:"studentDetailsController"
})
})
.controller("studentDetailsController", function ($scope, $http, $routeParams) {
$http({
url:"api/ReadOneStudent.php",
params:$routeParams,
method: "get"
}).then(function(response){
$scope.student = response.data;
})
});
ReadOneStudent.php
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
// include database and object files
include_once 'database.php';
include_once 'Students.php';
// instantiate database and product object
$database = new Database();
$db = $database->getConnection();
// initialize object
$student = new Students($db);
// get id of product to be edited
//$data = json_decode(file_get_contents("php://input"));
// set ID property of product to be edited
if (!isset($_GET['id'])) {
http_response_code(400); // bad request
exit;
}
$student->id = $_GET['id'];
// read the details of product to be edited
$found = $student->readOneStudent(); // assuming this returns something useful
if (!$found) {
http_response_code(404);
exit;
}
// create array
// Seeing as this is called "read ONE student", why return an array?
header('Content-type: application/json');
echo json_encode([
'id' => $student->id,
'name' => $student->name,
'gender' => $student->gender,
'city' => $student->city
]); // maybe you can even just use json_encode($student)
exit;
// make it json format
//print_r(json_encode($student_arr));
?>
Students.php
<?php
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
class Students{
// database connection and table name
private $conn;
private $table_name = "tblStudents";
// object properties
public $id;
public $name;
public $gender;
public $city;
// constructor with $db as database connection
public function __construct($db){
$this->conn = $db;
}
public function readOneStudent(){
// query to read single record
$query = "SELECT
id, name, gender, city
FROM
" . $this->table_name . "
WHERE
id = ?
LIMIT
0,1";
// prepare query statement
$stmt = $this->conn->prepare( $query );
// bind id of product to be updated
$stmt->bindParam(1, $this->id);
// execute query
$stmt->execute();
// get retrieved row
$row = $stmt->fetch(PDO::FETCH_ASSOC);
// set values to object properties
$this->name = $row['name'];
$this->gender = $row['gender'];
$this->city = $row['city'];
}
}
?>
尝试使用 $_GET['id']
在 PHP
你在这里做了一些奇怪的事情。首先,您的 PHP
Students.php - 制作 readOneStudent()
return 有用的东西
if (!$row = $stmt->fetch(PDO::FETCH_ASSOC)) {
return false;
}
// set values to object properties
$this->name = $row['name'];
$this->gender = $row['gender'];
$this->city = $row['city'];
$stmt->closeCursor();
return true;
ReadOneStudent.php - 回复有用的状态和 JSON
if (!isset($_GET['id'])) {
http_response_code(400); // bad request
exit;
}
$student->id = $_GET['id'];
if (!$student->readOneStudent()) {
http_response_code(404);
exit;
}
// Seeing as this is called "read ONE student", why return an array?
header('Content-type: application/json');
echo json_encode([
'id' => $student->id,
'name' => $student->name,
'gender' => $student->gender,
'city' => $student->city
]); // maybe you can even just use json_encode($student)
exit;
接下来,我会在路由配置中使用resolve
属性
$routeProvider.when("/students/:id", {
templateUrl: "Templates/studentDetails.html",
controller:"studentDetailsController",
resolve: {
student: function($routeParams, $http) {
return $http.get('api/ReadOneStudent.php', {
params: {id: $routeParams.id}
}).then(function(response) {
return response.data
});
}
}
})
最后在您的控制器中
.controller('studentDetailsController', function($scope, student) {
$scope.student = student;
})