簡體   English   中英

Ionic 3-如何將id參數傳遞到“ http delete”功能中並僅刪除特定用戶?

[英]Ionic 3 - How do I pass id parameter into “http delete” function and delete specific user only?

我正在嘗試從數據庫服務器中刪除數據。 如何將特定的用戶ID傳遞到HTTP刪除請求中,以便僅刪除一個用戶而不刪除所有用戶數據? 我正在使用核心PHP DB和Ionic 3。

下面是我的代碼:

Home.html中

<ion-content padding>
  <ion-list>

    <ion-item *ngFor="let user of (users | async)?.users" (click)="viewItem(user._id)">

      <ion-avatar item-left>
        <img src="assets/imgs/logo.png">
      </ion-avatar>
      <h1>{{user.id}}</h1>
      <h2>{{user.name}}</h2>
      <p>{{user.bday}}</p>

      <ion-icon name='trash' (click)="deleteitem(user._id)" item-end color="secondary"></ion-icon>

    </ion-item>

  </ion-list>
</ion-content>

home.ts

deleteitem(id: number){
    let users = {
            userId: id
        };
    this.restProvider.deleteItem(users)
    .subscribe(data => {
                this.items = data;
            }, err => {
                console.error(err);
            });
  }

provider.ts

import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
import { Observable } from  'rxjs/Observable';
import { Headers, RequestOptions } from '@angular/http';
.
.
baseUrl = 'http://url/project_folder';
.
.
deleteItem(user) {
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');

    return new Promise((resolve, reject) => {
      this.http.delete(this.baseUrl+'/delete_info.php'+'/?id=' + '{user.userId}')
        .subscribe(res => {
          resolve(res);
        }, (err) => {
          reject(err);
        });
    });
  }

delete.php

<?php
header("Access-Control-Allow-Origin: *");
header("Content-Type: application/json; charset=UTF-8");
header("Access-Control-Allow-Methods: POST");
header("Access-Control-Max-Age: 3600");
header("Access-Control-Allow-Headers: Content-Type, Access-Control-Allow-Headers, Authorization, X-Requested-With");
$id=$_GET['id'];
        $servername = "servername";
        $username = "username";
        $password = "password";
        $database = "database";
        // Create connection

        $conn = new mysqli($servername, $username, $password, $database);

        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

  $sql="delete from tbl_userinfo where id=$id";

  if ($conn->query($sql))
  {
      echo "delete data";
  }
  else
  {
      echo "Try again";
  }
?>

如果我這樣輸入:

http://url/project_folder/delete.php/?id=6

當我單擊刪除按鈕時,顯示如下錯誤:

core.js:1449 ERROR Error: Uncaught (in promise): [object Object]
at c (polyfills.js:3)
at polyfills.js:3
at SafeSubscriber._error (rest.ts:56)
at SafeSubscriber.__tryOrUnsub (Subscriber.js:242)
at SafeSubscriber.error (Subscriber.js:201)
at Subscriber._error (Subscriber.js:132)
at Subscriber.error (Subscriber.js:106)
at MapSubscriber.Subscriber._error (Subscriber.js:132)
at MapSubscriber.Subscriber.error (Subscriber.js:106)
at FilterSubscriber.Subscriber._error (Subscriber.js:132)

網絡響應:

http://url/project_folder/delete_info.php/?id={user.userId}
  1. 將點擊附加到圖標不是一個好主意
  2. provider.ts:... id ='+'{user.userId}'應該是... id ='+ user.userId。
  3. provider.ts:如果要返回Promise,應返回this.http.delete()。toPromise(),並且必須使用“ then”而不是home.ts進行訂閱
  4. provider.ts:如果您不想返回承諾,則返回this.http.delete()可以,然后在home.ts上使用subscription
  5. php必須返回json數據。

下面的例子:

<ion-button (click)="deleteitem(user)">
    <ion-icon name='trash' slot="icon-only"></ion-icon>
</ion-button>
function deleteitem(user) {
    this.restProvider.deleteitem(user._id).subscribe(data => {
                for(let i = 0, l = this.users.length; i < l; i++)
                    if (this.users[i]._id == user._id)
                        this.users.splice(i, 1);
            }, err => {
                console.error(err);
            });
}
function deleteitem(userId) {
    let headers = new Headers();
    headers.append('Content-Type', 'application/json');
    return this.http.delete(`${this.baseUrl}/delete_info.php?id=${userId}`);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM