0

良い一日!

私はウェブ上でさまざまな解決策を探していましたが、問題を解決するための解決策を1つも見つけていません

基本的には登録機能付きのログインシステムを作っていますが、登録しようとすると自分の作ったデータベースに入らない以外はすべてうまくいっています。次に、テーブルに値を挿入してログインしようとしましたが、パスワードを間違えたにもかかわらずログインするだけでした。

データベースは次のとおりです。

+----------+-------------+------+-----+---------+----------------+
| Field    | Type        | Null | Key | Default | Extra          |
+----------+-------------+------+-----+---------+----------------+
| studID   | int(11)     | NO   | PRI | NULL    | auto_increment |
| fname    | varchar(30) | NO   |     | NULL    |                |
| lname    | varchar(30) | NO   |     | NULL    |                |
| address  | varchar(80) | NO   |     | NULL    |                |
| username | varchar(20) | NO   |     | NULL    |                |
| password | varchar(20) | NO   |     | NULL    |                |
+----------+-------------+------+-----+---------+----------------+

index.html

<html>
<head>
<title>Welcome!</title>
<style>
</head>
<body>
<form name="form1" method="post" action="login.php">
<div align="center">
<p><img src="images/welcome.jpg" /></p>
  <table id="title">
    <tr>
      <td>Username:</td>
          <td><input type="text" name="username" /></td>
      </tr>
    <tr>
      <td>Password:</td>
        <td><input type="password" name="password" /></td>
      </tr>
    <tr>
      <td>&nbsp;</td>
        <td><input type="submit" name="submit" value="Log In" /></td>
      </tr>
  </table>
<p>New here? <a href="signup.php">Register!</a></p>
</div>
</form>
</body>
</html>

login.php

<?php
include("db.php");

session_start(); 

$username=($_POST['username']);
$password=($_POST['password']);

$result=mysql_query("SELECT count(*) FROM student WHERE username='$username' and password='$password'");

$count=mysql_fetch_array($result);

if($count==0){
  session_register("username");
  session_register("password");
  header("location:success.php");
} else {
  echo 'Wrong Username or Password! Return to <a href="index.html">login</a>';
  }
?>

およびdb.php

<?php  
    $conn = mysql_connect('localhost', 'root', 'ella');
     if (!$conn)
    {
     die('Could not connect: ' . mysql_error());
    }
    mysql_select_db("studrecord", $conn);
?>

signup.php (かなり長いので不要な部分をカットします)

<html>
<head>
<title>Register</title>
</head>
<body>
<form action="index.html">
  <table id="title">
    <tr>
      <td>First Name:</td>
        <td><input type="text" name="fname" /></td>
      </tr>
    <tr>
      <td>Last Name:</td>
        <td><input type="text" name="lname" /></td>
      </tr>
    <tr>
      <td>Address:</td>
        <td><input type="text" name="address" /></td>
      </tr>
    <tr>
      <td>Username:</td>
        <td><input type="text" name="username" /></td>
      </tr>
    <tr>
      <td>Password:</td>
        <td><input type="password" name="password" /></td>
      </tr>
    <tr>
      <td>&nbsp;</td>
        <td><input type="submit" name="submit" value="Sign Up" /></td>
      </tr>
  </table>
</div>
</form>

<?php
if (isset($_POST['submit']))
    {      
    include 'db.php';

                    $fname=$_POST['fname'];
                            $lname=$_POST['lname'];                 
                    $address=$_POST['address'];
                    $username=$_POST['username'];
                    $password=$_POST['password'];

         mysql_query("INSERT INTO student(fname,lname,address,username,password) 
         VALUES ('$fname','$lname','$address','$username','$password')"); 
            }
?>
</...

前もって感謝します!

4

4 に答える 4

1

ドキュメントを見るとsignup.php、フォーム アクションによってページに戻るように見えindex.phpます。つまり、次の PHP コードのロジックは実際には実行されません。これを使って:

<form action="signup.php" method="post">

の代わりに<form action="index.html">

フォーム アクションをページ自体に変更して、テーブルにデータが挿入されるかどうかを確認してください。

いくつかの補足事項:

  • 他の人がここで言っているように、mysqlコマンドは現在のバージョンの PHP では推奨されていないため、mysqli または PDO を使用する方がよいでしょう。
  • を求める代わりに、単純'SELECT count(*) FROM student WHERE username='$username' and password='$password'に に置き換えて、結果行自体を求めるほうがよい場合があります。その後、 を使用して行を数えることができます。COUNT(*)*mysqli_num_rows
  • 何も見逃していないことを願っていますが、あなたのindex.phpページのロジックに少し混乱しています. あなたは言う

    if($count==0){
        // Register a session ...
    } else { 
        // Wrong password/username...
    }
    

    if($count > 0)そのユーザー名とパスワードの組み合わせで行が存在するようにしたいので、あなたが意味していると思います。

  • プロジェクトでデータベース クエリを広範囲に使用する予定がある場合は、特にPDO準備済みステートメントに関するドキュメントを読むことを強くお勧めします。これにより、SQL インジェクションの問題を大幅に回避でき、柔軟なクエリをより簡単に準備できます。

あなたの努力に頑張ってください!

于 2013-08-04T13:29:17.127 に答える
0

カウントクエリをこれに変更してみてください。また、価値が低下しているため、mysql_* 関数には近づかないでください。

<?php
include("db.php");

session_start(); 

$username=($_POST['username']);
$password=($_POST['password']);

$result=mysql_query("SELECT * FROM student WHERE username='$username' and password='$password'");

$count=mysql_num_rows($result);

if($count==0){
  session_register("username");
  session_register("password");
  header("location:success.php");
} else {
  echo 'Wrong Username or Password! Return to <a href="index.html">login</a>';
  }
?>
于 2013-08-04T13:07:13.547 に答える
0

データベースに存在するかどうかを確認していないため、間違ったパスワードでログインしています。コードをこれに変更してください。

これを変える

   $count=mysql_fetch_array($result);

 if($count==0){
 session_register("username");
 session_register("password");
 header("location:success.php");
 } else {
   echo 'Wrong Username or Password! Return to <a href="index.html">login</a>';
 }

     $count=mysql_num_rows($result);

 if($count > 0){
  session_register("username");
  session_register("password");
  header("location:success.php");
 } else {
   echo 'Wrong Username or Password! Return to <a href="index.html">login</a>';
 }

register yfile で、ログインとサインアップの同じ名前でチェックしています

   if (isset($_POST['submit']))
                      ^^^-------name

レジスター入力の名前を変更します。

これに

    if (isset($_POST['register_form'])) 

そしてそれをあなたのフォームに入れます。

そして形を変える

      <form action="index.html">

     <form action="signup.php" method ="POST" name="register_form">
于 2013-08-04T13:09:34.583 に答える
0

あなたの質問に対する回答者ではありませんが、変更してください

$username=($_POST['username']);
$password=($_POST['password']);

$username=mysqli_real_escape_string($_POST['username']);
$password=mysqli_real_escape_string($_POST['password']);
于 2013-08-04T13:12:58.597 に答える