【问题标题】:Problems with $_POST returning undefined index$_POST 返回未定义索引的问题
【发布时间】:2020-01-17 18:48:33
【问题描述】:

首先,是的,我知道还有其他问题与这个问题非常相似,但是没有一个对我有帮助。

这个想法是通过 POST 发送值,它应该去数据库并说明用户是否存在。 但是我一直收到 PHP 错误,使用isset 和三元运算符,我无法收到错误,但他仍然存在。就我所见,变量在那里(formControlName),我真的迷路了。

错误:

Notice: Undefined index: email in /srv/http/database_vee/connection_php/connect_user.php on line 11

Notice: Undefined index: password in /srv/http/database_vee/connection_php/connect_user.php on line 12
{ "sucesso": false, "usuario": "" }

html表单:

<form [formGroup]="formularioLogin" (ngSubmit)="login(formularioLogin.value)">

<ion-input placeholder="email"  formControlName="email" required="true"></ion-input>

<ion-input placeholder="senha"  formControlName="password" required="true"></ion-input>

<div class="flexbox-2-of-1">
  <ion-button fill="clear" type="button" (click)="cadastrar()">Cadastrar</ion-button>
  <ion-button color="dark" type="submit" [disabled]="formularioLogin.invalid">Entrar</ion-button>
</div>

.ts 文件

export class LoginPage {

  formularioLogin;

  constructor(private toastController: ToastController,
    private navCtrl: NavController,
    private formBuilder: FormBuilder,
    private userService: UserService,
    private storage: Storage) {

    this.formularioLogin = this.formBuilder.group({
      email: "",
      password: ""
    });
  }

  async presentToast() {
    const toast = await this.toastController.create({
      message: 'Usuário não encontrado!',
      duration: 2000
    });
    toast.present();
  }

  login(dadosLogin: any) {

    const formData = new FormData();
    formData.append("email", dadosLogin.email);
    formData.append("password", dadosLogin.password);

    this.userService.login(formData).subscribe((data: any) => {
      console.log(data);

      if (data.sucesso) {
        this.storage.set("user", data.user).then(() => {
          this.navCtrl.navigateRoot("/home");
        });
      } else {
        this.presentToast();
      }
    });

    console.log(dadosLogin);



  }
<?php
    header("Access-Control-Allow-Origin: *");

    require_once("./connect_bd.php");

    $connect = AbreConexaoBD();
/* 
    $user_mail = (isset($_POST["email"]) ? $_POST['email'] : '');
    $user_password = (isset($_POST["password"]) ? $_POST['password'] : ''); 
 */
    $user_mail = $_POST["email"];
    $user_password = $_POST["password"];

    $sql = "SELECT id, name FROM tb_user
             WHERE user_mail = '".$user_mail."'
               AND user_password = '".$user_password."'";

    $resultado = mysqli_query($connect, $sql);
    if (mysqli_num_rows($resultado) > 0) {
        $user = mysqli_fetch_assoc($resultado);
        echo '{ "sucesso": true, "usuario": { "id": '.$user["id"].', "nome": "'.$user["name"].'" } }';
    } else {
        echo '{ "sucesso": false, "usuario": "" }';
    }

?>

【问题讨论】:

  • var_dump($_POST) - 先看看发生了什么。我不知道 ionic,所以我的第一个假设可能是错误的。
  • 注意:未定义索引:第 11 行 /srv/http/database_vee/connection_php/connect_user.php 中的电子邮件 NULL
  • 错误信息保存在 $_POST 变量中?

标签: php angular typescript ionic-framework


【解决方案1】:

这是因为 PHP 通过解析以查询字符串形式发送的 POST 数据自动构建 $_POST 变量。但是 Angular 发送原始 JSON。

如果你想从 PHP 脚本访问你的 POST 数据,你需要这样做:

$input = file_get_contents("php://input");
try {
    $post = json_decode($input, 1);
} catch (Exception $e) {
    $post = $_POST;
}
$_POST = $post;

我个人所做的是将这个脚本放在 index.php 中包含的文件中,以便每个请求都通过它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-04
    • 1970-01-01
    • 2018-03-05
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    • 2020-07-16
    相关资源
    最近更新 更多