2017-08-28 39 views
0

我不断收到错误未定义的索引在尝试从我的Android应用程序登录或注册时在PHP中。我试图更改PHP版本,但它没有解决问题。以下是错误我得到的error_log:在插入或从数据库中选择数据时在PHP中的错误

[28-Aug-2017 15:15:33 America/Denver] PHP Notice: Undefined index: full_name in /home2/heratarm/public_html/socialnetwork-api/Classes/user.php on line 33 
[28-Aug-2017 15:15:33 America/Denver] PHP Notice: Undefined index: username in /home2/heratarm/public_html/socialnetwork-api/Classes/user.php on line 34 
[28-Aug-2017 15:15:33 America/Denver] PHP Notice: Undefined index: email in /home2/heratarm/public_html/socialnetwork-api/Classes/user.php on line 35 
[28-Aug-2017 15:15:33 America/Denver] PHP Notice: Undefined index: password in /home2/heratarm/public_html/socialnetwork-api/Classes/user.php on line 36 
[28-Aug-2017 15:15:57 America/Denver] PHP Notice: Undefined index: username in /home2/heratarm/public_html/socialnetwork-api/Classes/user.php on line 12 
[28-Aug-2017 15:15:57 America/Denver] PHP Notice: Undefined index: password in /home2/heratarm/public_html/socialnetwork-api/Classes/user.php on line 13 

,这里是我的PHP代码:

class user 
{ 

public function login() 
{ 
    $data = []; 
    require $_SERVER['DOCUMENT_ROOT'].'/socialnetwork-api/Config/db.php'; 
    $DB = new DB();$db=$DB->connection; 
    $username =htmlentities($_POST['username'],ENT_QUOTES,"UTF-8"); 
    $password =htmlentities($_POST['password'],ENT_QUOTES,"UTF-8"); 
    $sql = "SELECT * FROM `tbl_users` WHERE `username`='$username' AND `password`='$password'"; 
    $result = $db->query($sql); 
    $result = $result->fetch(); 
    if($result != null) 
    { 
     $data["result"]=$result['id']; 
    } 
    else 
    { 
     $data["result"]="0"; 
    } 
    echo json_encode($data); 
} 

public function signup() 
{ 
    $data = []; 
    require $_SERVER['DOCUMENT_ROOT'].'/socialnetwork-api/Config/db.php'; 
    $DB = new DB();$db=$DB->connection; 
    $fullname = htmlentities($_POST['full_name'],ENT_QUOTES,"UTF-8"); 
    $username = htmlentities($_POST['username'],ENT_QUOTES,"UTF-8"); 
    $email = $_POST['email']; 
    $password = htmlentities($_POST['password'],ENT_QUOTES,"UTF-8"); 
    $sql = "SELECT * FROM `tbl_users` WHERE `username`='$username'"; 
    $result = $db->query($sql); 
    $result = $result->fetch(); 
    if($result != null) 
    { 
     $data["result"] = "username"; 
    } 
    else 
    { 
     $sql = "SELECT * FROM `tbl_users` WHERE `email`='$email'"; 
     $result = $db->query($sql); 
     $result = $result->fetch(); 
     if($result != null) 
     { 
      $data["result"] = "email"; 
     } 
     else 
     { 
      $sql = "INSERT INTO `tbl_users` (`full_name`,`username`,`email`,`password`) VALUES ('$fullname','$username','$email','$password')"; 
      $result = $db->prepare($sql); 
      $result = $result->execute(); 

      if($result) 
      { 
       $data["result"]="1"; 
      } 
      else 
      { 
       $data["result"]="0"; 
      } 
     } 
    } 
    echo json_encode($data); 
} 

我希望有人可以帮助我,因为我不熟悉PHP这么多,我需要为我的在大学的项目。

+0

您可以[SQL注入](http://php.net/manual/en/security.database.sql-injection.php)开放,并且确实应该使用[Prepared Statements](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php)而不是串联你的查询。 'htmlentities()'不是一种转义数据库值的充分方法。在将它们存储在数据库中之前,您不应该使用htmlentities()来转义这些值。您应该在输出数据之前使用htmlentities()。 –

+0

**切勿以明文形式存储密码!**。只存储密码哈希!使用PHP的['password_hash()'](http://php.net/manual/en/function.password-hash.php)和['password_verify()'](http://php.net/manual/en /function.password-verify.php)。如果您运行的PHP版本低于5.5(我希望不是),那么可以使用[password_compat库](https://github.com/ircmaxell/password_compat)来获得相同的功能。 –

+0

@MagnusEriksson我正在运行php版本5.6,我会尽你所说,但我没有得到我的问题的答案。 你能特别告诉我为什么我得到这个错误? –

回答

0

未定义的索引错误对应于您在班级中使用$_POST。这意味着当你调用这些类函数时,这些值不会被设置。

通常,如果您打算使用$_POST,那么您的窗体会调用您的PHP脚本,并且每个窗体输入对应于$_POST的值。

举例来说,如果你有一个表单的输入,如:

<input type="text" name="username" value=""> 

然后,当用户提交表单,你可以得到$_POST['username']值。

但是,如果您没有表单提交,那么您将不会有任何$_POST值。因此,未定义的索引错误。

另一种方法是将所需的值传递给类方法。然后,当您调用方法时,您需要确保您传递这些值。

例子:

public function login($username = '', $password = '') 
{ 
    $data = []; 
    require $_SERVER['DOCUMENT_ROOT'].'/socialnetwork-api/Config/db.php'; 
    $DB = new DB();$db=$DB->connection; 
    $username =htmlentities($username,ENT_QUOTES,"UTF-8"); 
    $password =htmlentities($password,ENT_QUOTES,"UTF-8"); 
    $sql = "SELECT * FROM `tbl_users` WHERE `username`='$username' AND `password`='$password'"; 
    $result = $db->query($sql); 
    $result = $result->fetch(); 
    if($result != null) 
    { 
     $data["result"]=$result['id']; 
    } 
    else 
    { 
     $data["result"]="0"; 
    } 
    echo json_encode($data); 
} 

那么你可以传递数据:

$class = new user(); 
$class->login($username, $password); 

这是给你,然后在值传递的$username$password

+0

您不需要表单来发布数据。如果OP没有将应用程序中的值正确地传递给他的PHP脚本,那么将它们传递给该方法也不会真正起作用。 –

相关问题