0

再会!

我一直在网上寻找各种解决方案,但我没有通过一个解决我的问题

基本上我一直在制作一个具有注册功能的登录系统,一切都运行良好,除了当我尝试注册时,它没有进入我制作的数据库。然后我尝试将值插入到我的表中,并尝试登录,但它所做的只是登录,即使我输入了错误的密码。

这是数据库:

+----------+-------------+------+-----+---------+----------------+
| 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    |                |
+----------+-------------+------+-----+---------+----------------+

索引.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>

登录.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">.

尝试将表单操作更改为页面本身,看看是否将数据插入到表中。

一些旁注:

  • 正如其他人在这里所说,在当前版本的 PHP 中不推荐使用mysql命令,因此使用 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

不是你的问题,而是改变

$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 回答
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>';
 }

在您的注册 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 回答