我在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 - 如何使用ionic 2在mysql数据库中插入数据?我尝试了许多解决方案,但结果仍然相同-LMLPHP

最佳答案

您的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中提供它们。

09-26 16:29
查看更多