編集: さて、フォームフィールドにタイプミスをしました。まだMySQLAPIをミキシングしています。mysql_real_escape_string()
を使用したミキシング関数については、以下を参照してください。 。
name="myusername"
を見てください そしてあなたのPOST割り当てとあなたのパスワードのためのもの。
一致しません。
name="myusername"
を変更します name="username"
へ
およびname="mypassword"
name="password"
へ
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
エラーレポートを使用した 、未定義のインデックスとヘッダーがすでに警告を送信していることを通知します。以下を参照してください。
<?php
の前にもスペースがあります これにより、ヘッダーの前に出力が発生します。それらを削除します。
さらに、MySQLAPIをmysql_error()
と混合しています 。 mysql_error()
mysqli_error($con)
と読み替えてください そしてこれは以下のとおりです:
$myusername = mysql_real_escape_string($myusername);
$mypassword = mysql_real_escape_string($mypassword);
と読む必要があります
$myusername = mysqli_real_escape_string($con,$myusername);
$mypassword = mysqli_real_escape_string($con,$mypassword);
または
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
-
mysqli_
およびmysql_
関数は混ざり合いません。
セキュリティについて
パスワードをプレーンテキストで保存している可能性があることに気づきました。この場合、お勧めできません。
CRYPT_BLOWFISHを使用することをお勧めします
またはPHP5.5のpassword_hash()
働き。 PHP <5.5の場合は、 password_hash() compatibility pack
を使用します。
。
さらに、SQLインジェクションに関しては、使用mysqli
プリペアドステートメント付き
、またはプリペアドステートメントを使用したPDO
、はるかに安全です 。
脚注
exit;
を追加することをお勧めします 各ヘッダーの後。
header("location:login_success.php");
exit;
およびすべてのヘッダー。
編集:
削除
$myusername=$_POST["username"];
$mypassword=$_POST["password"];
echo $myusername . "<br>";
echo $mypassword . "<br>";
次に、次のように置き換えます:
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($con,$_POST['username']);
$mypassword = mysqli_real_escape_string($con,$_POST['password']);
編集#2 :
これは私があなたのコードをテストして成功したものであり、したがってあなたの現在のコードの何が悪いのかわかりません。
HTMLフォーム
<form action="main_login.php" method="post" style="text-align:right;">
Username:
<input type="text" name="username" value="" size=20 style="display:inline-block;margin-left:10px"required>
<br>
Password:
<input type="text" name="password" value="" size=20 style="margin-left:12px"required>
<br>
<input type="submit" value="Log In" style="margin-left:75px"=>
</form>
MySQL
<?php
$DB_HOST = 'xxx';
$DB_USER = 'xxx';
$DB_PASS = 'xxx';
$DB_NAME = 'xxx';
$conn = new mysqli($DB_HOST, $DB_USER, $DB_PASS, $DB_NAME);
if($conn->connect_errno > 0) {
die('Connection failed [' . $conn->connect_error . ']');
}
$myusername = stripslashes($_POST["username"]);
$mypassword = stripslashes($_POST["password"]);
$myusername = mysqli_real_escape_string($conn,$_POST['username']);
$mypassword = mysqli_real_escape_string($conn,$_POST['password']);
echo $myusername; // echos
echo "<br>";
echo $mypassword; // echos
$sql="SELECT * FROM register WHERE username='$myusername' and password='$mypassword'";
$result=mysqli_query($conn,$sql);
$count=mysqli_num_rows($result);
if($count==1){
echo "Yep";
}
else{
echo "nope";
}
N.B .: また、セッションをクリアする必要があります(セッションの破棄 )、サーバー上に古いユーザー名とパスワードをキャッシュしているものがある可能性があります。
また、列にスペースがないこと、タイプが正しく、長さがデータを保持するのに十分な長さであることを確認してください。通常、VARCHAR(255)
十分すぎるほどですが、password_hash()
によって生成されたハッシュパスワードを使用する場合に推奨されます 、パスワードを保存するときに使用する必要がある関数。
参照:
スタック上。