入力フィールドに入力されたユーザー名とパスワードがデータベースに格納されているかどうかを確認しようとしています。そして、それがなければエラーメッセージを出さなければならない。私のデータベースにユーザがいます: ユーザ名:Alexander
パスワード:alexalex
しかし、ログインするために自分のコードを実行すると、正しいログインとは言えません。sqliteログインフォームが正常に動作しない
<?php
try{
$db = new PDO('sqlite:users.db');
}
catch(PDOException $err){}
if(isset($_POST['username'])){
$username = $_POST['username'];
$password = $_POST['password'];
try{
$sql = "SELECT * FROM players WHERE username='$username' AND password='$password'";
$st = $db->prepare($sql);
$st->execute();
if($st->fetchColumn() == 1){
//SUCCES LOGIN
}else{
//FAILED LOGIN
}
}catch(PDOException $err){}
}
...HTML CODE...
<form action="" method="POST" class="login-form">
<input type="text" id="one" name="username" placeholder="Username">
<input type="password" id="two" name="password" placeholder="Password">
<input type="submit" value="LOGIN" class="three">
</form>
このログインを解決できる人には非常に感謝しています。ジェイ・ブランチャードで述べたように
**プレーンテキストのパスワードを保存しないでください!**パスワードのセキュリティを処理するには、PHPの[組み込み関数](http://jayblanchard.net/proper_password_hashing_with_PHP.html)を使用してください。 5.5より小さいPHPバージョンを使用している場合、 'password_hash()' [互換パック](https://github.com/ircmaxell/password_compat)を使用することができます。ハッシュする前に[パスワードを逃さないでください](http://stackoverflow.com/q/36628418/1011527)、または他のクレンジングメカニズムを使用していることを確認してください。パスワードを変更すると、パスワードが変更され、不要な追加のコーディングが発生します。 –
[Little Bobby](http://bobby-tables.com/)は、[あなたのスクリプトはSQLインジェクション攻撃の危険にさらされていると言います。](http://stackoverflow.com/questions/60174/how-can-i-prevent -sql-injection-in-php)を実行します。 [文字列をエスケープする](http://stackoverflow.com/questions/5741187/sql-injection-that-gets-around-mysql-real-escape-string)でも安全ではありません! [PDO](http://php.net/manual/en/pdo.prepared-statements.php)の[prepared](http://en.wikipedia.org/wiki/Prepared_statement)のステートメントについて学んでください。 –
'fetchColumn()'ではなく 'fetch()'を使うべきです。http://php.net/manual/en/pdostatement.fetch.php –