1

さて、最近私はチュートリアルを見て、それに沿って Notepad++ でコーディングしました。単純な MYSQL ログイン/登録フォームを試行していますが、ログインすると、「間違った U/P」というエラー エコーが表示されます。データベース内のすべてを md5 などとして保存します。これが私のコードです。

register.php

<?php
require('config.php');

if(isset($_POST['submit'])){

//Preform the verification of the nation
$email1 = $_POST['email1'];
$email2 = $_POST['email2'];
$pass1 = $_POST['pass1'];
$pass2 = $_POST['pass2'];

if($email1 == $email2) {
if($pass1 == $pass2) {
//All good.  Carry on.


$name = mysql_escape_string($_POST['name']);
$lname = mysql_escape_string($_POST['lname']);
$uname = mysql_escape_string($_POST['uname']);
$email1 = mysql_escape_string($_POST['email1']);
$email2 = mysql_escape_string($_POST['email2']);
$pass1 = mysql_escape_string($_POST['pass1']);
$pass2 = mysql_escape_string($_POST['pass2']);

$pass1 = md5($pass1);


$sql = mysql_query("SELECT * FROM `users` WHERE `uname` = '$uname'");
if(mysql_num_rows($sql) > 0) {
echo "Sorry, that user already exists!";
exit();
}

mysql_query("INSERT INTO `users` (`id`, `name`, `lname`, `uname`, `email`, `pass`) VALUES (NULL, '$name',  '$lname',  '$uname',  '$email1',  '$pass1')");




}else{
echo "Sorry, your passwords do not match<br><br>";
exit();

}
}else{
echo "Sorry, your emails do not match.<br><br>";

}






}else{

$form = <<<EOT
<form action="register.php" method="POST">
First Name: <input type="text" name="name" /><br />
Last Name: <input type="text" name="lname" /><br />
Username: <input type="text" name="uname" /><br />
Email: <input type="text" name="email1" /><br />
Confirm Email: <input type="text" name="email2" /><br />
Password: <input type="password" name="pass1" /><br />
Confirm Password: <input type="password" name="pass2" /><br />
<input type="submit" value="Register" name="submit" />
</form>
EOT;

echo $form;

}

?>

login.php

<?php
require('config.php');

if(isset($_POST['submit'])){
$uname = mysql_real_escape_string($_POST['uname']);
$pass = mysql_real_escape_string($_POST['pass']);
$pass = md5($pass);

$sql = mysql_query("SELECET * FROM `users` where `uname` = '$uname' and `pass` = '$pass'");
if(mysql_num_rows($sql) > 0){
echo "You are now logged in.";


exit();
}else{
echo "Wrong U/P combination";
}


}else{
$form = <<<EOT
<form action="login.php" method="POST">
Username: <input tye="text" name="uname" /><br>
Password: <input type="password" name="pass" /><br>
<input type="submit" name="submit" value="Login" />
</form>
EOT;

echo "$form";
}

?>

およびconfig.php

<?php
mysql_connect("localhost", "X", "X");
mysql_select_db("X");

?>

config.php コードは正しいですが、私は X を提供していません。

ご覧のとおり、login.php が正しくない場合、このコードはエラーを出力します。たとえそれが正しいとしても、それは私にそのエラーを与えます。MD5 ハッシュ パスを使用したので、助けてください!

4

3 に答える 3

1

まず、そこに ` タグを使用しています - これは ' である必要があります。

変数を補間または連結する必要があります。すなわち; それ以外の

mysql_query("INSERT INTO `users` (`id`, `name`, `lname`, `uname`, `email`, `pass`) VALUES (NULL, '$name',  '$lname',  '$uname',  '$email1',  '$pass1')");

使用する;

mysql_query("INSERT INTO 'users' ('id', 'name', 'lname', 'uname', 'email', 'pass') VALUES (NULL, '{$name}',  '{$lname}',  '{$uname}',  '{$email1}',  '{$pass1}')");

とにかく、いくつかの良い習慣は別として、この行を見てください。

$sql = mysql_query("SELECET * FROM `users` where `uname` = '$uname' and `pass` = '$pass'");

あなたのすべてを台無しにするほんの小さなタイプミス。SELECT を SELECT に変更すると、準備完了です。

頑張ってください!

  • エオガン
于 2012-06-26T02:51:32.483 に答える
0
  1. 次の行は必要ありません。

    $email2 = mysql_escape_string($_POST['email2']);

`$pass2 = mysql_escape_string($_POST['pass2']);`

2. SELECET * FROM usersuser/pwd が実際に DB に到達したことを確認するために実行します
。 3. ログイン フォームに追加echo "$uname $pass <br>";して、正しく渡されたことを確認します。

于 2012-06-26T02:54:13.980 に答える
0

他の 2 つの答えは正しいですが、これにはもっと根本的な問題があります。古い非推奨の mysql_* 関数を使用しているということです。これらの関数は、MySQL への古い手続き型インターフェイスであり、その RDBMS の最新の機能をサポートしていません。データベース アクセスへの OOP アプローチには、mysqli または PDO を使用することをお勧めします。

この古いコードに固執する場合は、少なくともmysql_real_escape_string()代わりに を使用する必要がありmysql_escape_string()ます。

于 2012-06-26T02:54:26.997 に答える