2016-08-20 14 views
0

私はいくつかのPHPを学んでいて、ログインフォームを作成しました。私はこれを複製しようとしたとき、全く動作しません。 --MY HTML--PHPのログインフォームが機能しない

<!DOCTYPE html> 
<html> 
<head> 
    <title>Login</title> 
</head> 
<body> 
    <form method="post" action="login.php"> 
    <input type="text" name="usrname" placeholder=" Username"> 
    <br /> 
    <br /> 
    <input type="password" name="passwd" placeholder=" Password"> 
    <br /> 
    <br /> 
    <input type="password" name="pin" placeholder=" PIN #"> 
    <br /> 
    <br /> 
    <input type="submit" value="Login"> 
    </form> 
</body> 
</html> 

--LOGIN.PHP--

<?php 
    session_start(); 
    include('php/db.php'); 
    $usrname = $_POST['usrname']; 
    $passwd = $_POST['passwd']; 
    $pin = $_POST['pin']; 


    $sql = "SELECT * FROM users WHERE usrname = 'usrname'"; 
    $query = mysql_query($sql); 
    $row = mysql_fetch_array($query); 
    $usrnameFromDB = $row['usrname']; 
    $passwdFromDB = $row['passwd']; 
    $pinFromDB = $row['pin']; 

    if($usrnameFromDB == $usrname && $passwdFromDB == $passwd && $pinFromDB == $pin) { 
     echo "Correct"; 
    } else { 
     echo "noooooo"; 
    } 
?> 

<!DOCTYPE html> 
<html> 
<head> 
    <title>trhhytrh</title> 
</head> 
<body> 

</body> 
</html> 

P.S.

コードを比較するときには、名前と大きな違いはありません。また、提供されているコードは機能していないコードです。前もって感謝します! :)

+1

**廃止予定の 'mysql_ *' APIを使用して**停止してください。代わりに 'mysqli_ *'や 'PDO'を使用してください – Jens

+0

私は適切なサイトを作っていますが、mysqliを使っていますが、このサイトは子供のためのものです。セキュリティについては心配していませんが、とにかく感謝しています。 – orbit

+0

'' usrname''あなたがここで逃したものを推測しますか? –

答えて

2

私はコメントで述べたように:

WHERE usrname = 'usrname'";それはあなたが現在使用しているデータベースの「USRNAME」の文字列リテラルではなく、POST配列のために照会/探しているWHERE usrname = '$usrname'";

として読まなければなりません変数。

SQLインジェクションに関する警告に注意してください。 password_hash()のように、サイトが公開されたときに準備された文と安全なパスワードハッシュ関数を使用する必要があります。

あなたは人々にそれほどの信頼を置いてはいけません。

参考文献:

+0

これをマークしますそれが私にできるときの答えとして、私はまたランダムな6 varchar塩でmd5を使うことを計画しています。また、それが役立つかどうかは分かりませんが、私のサイトがライブになったときにも 'mysqli_real_escape_string'を使用します。助けていただきありがとうございました! – orbit

+0

@Skyeよろしくお願いします。 MD5は、もはやパスワード保存方法として安全だとは考えられていないので、MD5を使用しないことをお勧めします。以下のhttp://security.stackexchange.com/questions/19906/is-md5-considered-insecureを読んで、理由を説明します。 –

0

これを試してみてください:

変更このHTML

012に

次にPHP

<?php 
session_start(); 
include('php/db.php'); 
if(isset $_POST['submit']){ 
$usrname = $_POST['usrname']; 
$passwd = $_POST['passwd']; 
$pin = $_POST['pin']; 


$sql = "SELECT * FROM users WHERE usrname = '$usrname'"; 
$query = mysql_query($sql); 
$row = mysql_fetch_array($query); 
$usrnameFromDB = $row['usrname']; 
$passwdFromDB = $row['passwd']; 
$pinFromDB = $row['pin']; 

if($usrnameFromDB == $usrname && $passwdFromDB == $passwd && $pinFromDB == $pin) { 
    echo "Correct"; 
} else { 
    echo "noooooo"; 
} 
}//End of if 

else 
{ 
echo "Form is not submitted"; 
} 
?> 

にフォームを提出していません。あなたはあなたの質問に間違いを犯しました。あなたはそこで変数を使用していませんでした。

+0

私は 'isset($ _ POST [' submit '])が事実であることは知らなかった。私は将来のすべてのサイトでこれを使用します、ありがとう! – orbit

+0

あなたのフォーム要素をすべて単一の条件でラップする方が良いと思います。 –

関連する問題