2017-08-28 6 views
0

継続的にエラーが発生しています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 Injections](http://php.net/manual/en/security.database.sql-injection.php)を広く利用していますので、[Prepared Statements](http:// php。 net/manual/en/mysqli.quickstart.prepared-statements.php)を実行してください。 'htmlentities()'はデータベースの値をエスケープするのに十分な方法ではありません。 DBに値を保存する前に、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)。 5.5よりも低いバージョンのPHPを実行している場合は、[password_compat library](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という値はありません。したがって、未定義のインデックスエラー。

代わりの方法として、必要な値をクラスメソッドに渡す方法があります。次に、メソッドを呼び出すときにそれらの値を渡すことを確認する必要があります。

例:それは、その後$username$passwordに値を渡すためにあなた次第です

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

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); 
} 

そして、あなたがデータを渡すことができます。

+0

データを送信するためのフォームは必要ありません。 OPが値をアプリケーションからPHPスクリプトに正しく渡していない場合、そのメソッドに渡すことは実際には機能しません。 –

関連する問題