2013-08-04 2 views
0

Добрый день!Регистрация/Вход в систему PHP MySQL

Я искал для различных решений в Интернете, но я не прошел ни одного, чтобы решить мою проблему

В основном я делал систему входа с функцией регистрации, и все работает хорошо кроме случаев, когда я пытаюсь зарегистрироваться, он не входит в базу данных, которую я создал. Затем я попытался вставить значения в таблицу и попытался войти в систему, но все, что он сделал, это войти в систему, хотя я неправильно сделал пароль.

Вот база данных:

+----------+-------------+------+-----+---------+----------------+ 
| 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')"); 
      } 
?> 
</... 

Спасибо заранее!

+0

если система входа в систему работает хорошо и не регистрируется, то почему вы показываете свой login.php, а не signup.php? –

+0

ой, правый-- полностью упустил это. Спасибо за напоминание! –

+2

mysql устарел, попробуйте mysqli или pdo –

ответ

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 и prepared statements в частности. Это позволит вам во многом избежать проблем с SQL-инъекциями, а также более легко подготовить гибкие запросы.

Удачи вам в ваших усилиях!

+0

спасибо за более подробное объяснение! –

+0

@EllaDurban В любое время. Там есть хорошая публикация о подготовленных заявлениях [здесь] (http://stackoverflow.com/questions/60174/how-to-prevent-sql-injection-in-php/60496#60496). Это по-прежнему актуально, хотя на него ответили пять лет назад. – jreut

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>'; 
    } 
?> 
+0

«Затем я попытался вставить значения в таблицу и попытался войти в систему, но все, что было сделано, это войти в систему, даже если я сделал пароль неправильно». –

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 вы проверяете с таким же именем входа и Signup

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

изменить имя входного регистра.

к этому

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

и положить его в форму.

и изменить вашу форму

 <form action="index.html"> 

в

 <form action="signup.php" method ="POST" name="register_form"> 
+0

Спасибо, логин теперь работает хорошо. Я отредактировал файл регистра, как вы сказали, но любой из моих входов, когда я регистрируюсь, по-прежнему не может быть вставлен в базу данных. –

+0

вы просто меняете действие на 'signup.php', потому что вы использовали index.html в действии, и вроде бы все должно работать :).Жаль, что я не смог помочь вам. Сорири меня здесь не было –

0

Не является awnser на ваш вопрос, но изменить

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

в

$username=mysqli_real_escape_string($_POST['username']); 
$password=mysqli_real_escape_string($_POST['password']); 
+1

он не использует mysqli –

+1

ах, да, вы правы. Он должен, хотя, поскольку функции mysql_ * устарели. – Elpy