注意:未定义的索引:第28行的C:\ xampp \ htdocs \ 8990API \ login.php中的用户名

时间:2019-09-30 09:09:40

标签: php sql ionic3

  

注意:未定义索引:C:\ xampp \ htdocs \ 8990API \ login.php中的用户名   在第28行

login.html

<ion-content class="cont">
  <div class="topgrad">
    <img src="assets/imgs/login.png">
    </div>

    <div class="userlogin">
      <img class="userimg" src="assets/imgs/loginuser.png">
    </div>

    <div class="p-text">
      <p text-center>***********</p>
    </div>

    <form>
      <input type="text" placeholder="Username" #username>
      <input type="password" placeholder="Password" #userpass>
    </form>

    <div class="signin-btn">
      <button ion-button (click)="signIn()">Sign In</button>
    </div>

    <div class="reglink">
      <a ion-label (click)="RegisterPage()">Create Account</a>
    </div>

</ion-content>

login.ts

import { Component, ViewChild } from '@angular/core';
import { IonicPage, NavController, NavParams, AlertController } from 'ionic-angular';
import { Http, Headers, RequestOptions } from "@angular/http";
import { LoadingController } from 'ionic-angular';
import 'rxjs/add/operator/map';

import { RegisterPage } from '../register/register';
import { TabsPage } from '../tabs/tabs';
import { HomePage } from '../home/home';


@IonicPage()
@Component({
  selector: 'page-login',
  templateUrl: 'login.html',
})
export class LoginPage {

  @ViewChild("username") username;
  @ViewChild("userpass") userpass;

  data: string;
  items: any;

  constructor(public navCtrl: NavController, 
              public navParams: NavParams,
              public alertCtrl: AlertController,
              private http: Http, 
              public loading: LoadingController) {
  }

  RegisterPage() {
    this.navCtrl.push(RegisterPage)
  }

  signIn() {

    //// check to confirm the username and userpass fields are filled

    if (this.username.value == "") {

      let alert = this.alertCtrl.create({

        title: "ATTENTION",
        subTitle: "Username field is empty",
        buttons: ['OK']
      });

      alert.present();
    } else

    if (this.userpass.value == "") {

      let alert = this.alertCtrl.create({

        title: "ATTENTION",
        subTitle: "Password field is empty",
        buttons: ['OK']
      });

      alert.present();

    } else {

      var headers = new Headers();
      headers.append("Accept", 'application/json');
      headers.append('Content-Type', 'application/json');
      let options = new RequestOptions({
        headers: headers
      });

      let data = {
        username: this.username.value,
        userpass: this.userpass.value
      };

      let loader = this.loading.create({
        content: 'Processing please wait...',
      });

      loader.present().then(() => {

        this.http.post('http://localhost/8990API/login.php', data, options)
          .map(res => res.json())
          .subscribe(res => {
            console.log(res)
            loader.dismiss()
            if (res == "Login successfully") {

              let alert = this.alertCtrl.create({
                title: "CONGRATS",
                subTitle: (res.message),
                buttons: ['OK']
              });

              alert.present();
              this.navCtrl.push(HomePage, data);
            } 
            else {
              let alert = this.alertCtrl.create({
                title: "Incorrect entry please try again.",
                subTitle: (res.message),
                buttons: ['OK']
              });
              alert.present();
            }
          });
      });
    }

  }

}

login.php     

if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400'); // cache for 1 day
}

// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
    }

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
        header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
    }

    exit(0);
}

require "dbconnect.php";

$data = file_get_contents('php://input');
    if (isset($data)) {
        $request = json_decode($data,true);
        $username = $request['username'];
        $userpass = $request['userpass'];
    }

$sql = "SELECT id FROM useraccount 
        WHERE username = '$username' and userpass = '$userpass' ";
$result = mysqli_query($con, $sql);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
//$active = $row['active'];

$count = mysqli_num_rows($result);

// If result matched $myusername and $myuserpass, table row must be 1 row

if ($count > 0) {
    $status = "success";
    $message = "Login successfully";
} else {
    $status = "fail";
    $message = "Your Login Username or Password is invalid";

}

echo json_encode(array('status' => $status, 'message' => $message, 'data' => $data));

?>

enter image description here

2 个答案:

答案 0 :(得分:2)

在表单字段中添加名称属性?

 <form>
      <input type="text" name="username" placeholder="Username" #username>
      <input type="password" name="password" placeholder="Password" #userpass>
 </form>

答案 1 :(得分:0)

要删除PHP警告,可以使用Null coalescing operator

$data = file_get_contents('php://input');
if (isset($data)) {
    $request = json_decode($data,true);
    $username = $request['username'] ?? '';
    $userpass = $request['userpass'] ?? '';
}

尽管我认为这不是您的核心问题,但是当您输入的格式错误时,它可以消除噪声。

甚至更好的是,您可能会在服务器端检测到输入的确切问题:

<?php

if (isset($_SERVER['HTTP_ORIGIN'])) {
    header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
    header('Access-Control-Allow-Credentials: true');
    header('Access-Control-Max-Age: 86400'); // cache for 1 day
}

// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD'])) {
        header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
    }

    if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS'])) {
        header("Access-Control-Allow-Headers:        {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
    }

    exit(0);
}

require "dbconnect.php";

try {

    $data = file_get_contents('php://input');
    if (!isset($data) || empty($data)) {
        throw new Exception('No data is received');
    }
    if (isset($data)) {
        $request = json_decode($data,true);
        if (!isset($request['username'])) {
            throw new Exception('username is not set');
        }
        if (empty($request['username'])) {
            throw new Exception('username is empty');
        }
        if (!isset($request['userpass'])) {
            throw new Exception('userpass is not set');
        }
        if (empty($request['userpass'])) {
            throw new Exception('userpass is empty');
        }
        $username = $request['username'];
        $userpass = $request['userpass'];
    }

    $sql = "SELECT id FROM useraccount 
            WHERE username = '$username' and userpass = '$userpass' ";
    $result = mysqli_query($con, $sql);
    $row = mysqli_fetch_array($result, MYSQLI_ASSOC);
    //$active = $row['active'];

    $count = mysqli_num_rows($result);

    // If result matched $myusername and $myuserpass, table row must be 1 row

    if ($count <= 0) {
        throw new Exception('Your Login Username or Password is invalid');
    }

    echo json_encode(array(
        'status' => 'success',
        'message' => 'Login successfully',
        'data' => $data,
    ));
} catch (Exception $e) {
    echo json_encode(array(
        'status' => 'fail',
        'message' => $e->getMessage(),
        'data' => $data,
    ));
}