我在ionic 2框架中使用http.post请求插入数据时遇到问题。但是它不会将数据发送到我宁静的api,而是增加了mysql数据库中具有空字段的行。我尝试了许多解决方案,但未找到结果,仍然出现相同的错误。这是我发布数据的代码。
设置
import { Component } from '@angular/core';
import { NavController, NavParams } from 'ionic-angular';
import { Http, Headers, RequestOptions } from "@angular/http";
@Component({
selector: 'page-setting',
templateUrl: 'setting.html',
})
export class Setting {
name: string;
lname: string;
email: string;
pass: string;
gender: string;
constructor(public navCtrl: NavController, public navParams: NavParams, public http: Http) {
}
insertData() {
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded' );
let options = new RequestOptions({ headers: headers });
let postParams = {
name: this.name,
last_name: this.lname,
email: this.email,
gender: this.gender,
password: this.pass,
}
this.http.post("http://localhost:9090/restexample/RestController.php?view=insert", JSON.stringify(postParams), options)
.subscribe(data => {
console.log(data['_body']);
}, error => {
console.log(error);// Error getting the data
});
}
}
setting.html
<ion-header>
<ion-navbar>
<ion-title>Setting</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item>
<ion-label>Name</ion-label>
<ion-input type="text" [(ngModel)]="name"></ion-input>
</ion-item>
<ion-item>
<ion-label>Last Name</ion-label>
<ion-input type="text" [(ngModel)]="lname"></ion-input>
</ion-item>
<ion-item>
<ion-label>Gender</ion-label>
<ion-input type="text" [(ngModel)]="gender"></ion-input>
</ion-item>
<ion-item>
<ion-label>Email</ion-label>
<ion-input type="email" [(ngModel)]="email"></ion-input>
</ion-item>
<ion-item>
<ion-label>Password</ion-label>
<ion-input type="text" [(ngModel)]="pass"></ion-input>
</ion-item>
<button ion-button block color="primary" (click)="insertData();">Insert Data</button>
</ion-list>
</ion-content>
Mobile.php
<?php
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE');
header('Access-Control-Allow-Credentials: true');
header("Access-Control-Allow-Headers: Origin, X-Requested-With, Content-Type, Accept");
class Mobile {
function __construct() {
try {
$this->conn = new PDO("mysql:host=localhost;dbname=users", "root", "");
$this->conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch(PDOException $e) {
echo "Error: " . $e->getMessage();
}
}
public function getAllusers(){
$stmt = $this->conn->prepare("SELECT * FROM users");
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
$this->mobiles= $stmt->fetchAll();
return $this->mobiles;
}
public function getUser($id){
$stmt = $this->conn->prepare("SELECT * FROM users where id = '$id'");
$stmt->execute();
$result = $stmt->setFetchMode(PDO::FETCH_ASSOC);
return $stmt->fetchAll();
}
public function delUser($id){
$stmt = $this->conn->prepare("delete FROM users where id = '$id'");
$stmt->execute();
}
public function insUser(){
$data = json_decode($_POST['data'], true);
$stmt = $this->conn->prepare("INSERT INTO `users` (`name`, `last_name`, `gender`, `email`, `password`, `ip_address`, `avatar`) VALUES (\"{$data['name']}\", \"{$data['last_name']}\", \"{$data['gender']}\", \"{$data['email']}\", \"{$data['password']}\", \"{$data['ip_address']}\", \"{$data['avatar']}\");");
$stmt->execute();
}
public function updUser($id){
$stmt = $this->conn->prepare("UPDATE users
SET name = \"{$_POST['name']}\", last_name= \"{$_POST['last_name']}\", gender = \"{$_POST['gender']}\" , email = \"{$_POST['email']}\", password = \"{$_POST['password']}\", ip_address= \"{$_POST['ip_address']}\", avatar= \"{$_POST['avatar']}\ WHERE id = $id;");
$stmt->execute();
}
}
?>
浏览器错误:
最佳答案
您的PHP代码正在$ _POST数组(在insUser()函数中)内寻找“数据”索引,因此在ts文件中,您需要将post参数放在data属性内:
let postParams = { data: {
name: this.name,
last_name: this.lname,
email: this.email,
gender: this.gender,
password: this.pass,
}};
这将解决当前错误,但仍然无法正常工作,因为我看到插入查询正在寻找“ ip_address”和“ avatar”,但您未在postParams中提供它们。