2014-02-20 3 views
-1

Привет, мой первый пост!PHP и MySQL Форма входа в систему

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

Так что я попытался просто поместить мои значения POST в запрос MySQL, а когда пользователь найден, он отображает его в цикле while или отображает предупреждение, но мой код приводит только к пустым местам.

Я позабочусь о деталях index.php, потому что это действительно просто форма POST.

<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
</head> 
<body> 

<div id="wrapper"> 
<?php 

include "connect.php"; 

$query = "SELECT * FROM members WHERE username = '".mysql_real_escape_string($_POST['username'])."' AND password = '".mysql_real_escape_string($_POST['password'])."'"; 
$result = mysql_query($query); 

if (mysql_fetch_assoc($result) > 0) { 
    while ($row = mysql_fetch_assoc($result)) { 
     $username = $row['username']; 
     $password = $row['password']; 

    ?><h3>Username - <?php echo $username; ?></h3><?php 
     ?><h3>Password - <?php echo $password; ?></h3><?php 

     unset($_POST['username']); 
    unset($_POST['password']); 
    } // endwhile 
} // endif 
else { 
    ?><h3>Wrong Username of Password. Try again.</h3><?php 

    unset($_POST['username']); 
    unset($_POST['password']); 
} 
?> 
<input type="button" name="back" value="Back" onclick="location.href='index.php'"> 
</div> 

</body> 
</html> 
+0

Это совершенно неправильно! Не пытайтесь создать систему входа, если вы не знаете, как это сделать! Ваша заявка может быть взломана в миллисекундах. – Sliq

+0

Я получаю определенное чувство дуджа вю здесь - см. Http://stackoverflow.com/questions/21858047/php-login-form-with-html-form/21859859 (как самый последний пример, с которым я столкнулся практически идентичного вопроса) – CD001

+0

Привет @Roy и добро пожаловать в SO. При размещении вопросов здесь, пожалуйста, предоставьте полную информацию о том, чего вы пытаетесь достичь, что вы пробовали до сих пор (например, код), что не так (например, сообщения об ошибках, неправильное поведение программы и т. Д.). – tftd

ответ

1

Вам следует избегать использования функций mysql_*, поскольку они и не будет поддерживаться! Вместо этого рассмотрите возможность использования PDO, поскольку он обеспечивает общий способ подключения ко всем типам баз данных. Mysqli - также вариант, но это ограничивает вас только MySQL.

В вашем примере кода я вижу, что вы используете открытые пароли. Это считается крайне плохой практикой - он предоставляет простой способ людям, которые имеют доступ к вашей базе данных, чтобы узнать пароли всех пользователей приложения. Вы должны рассмотреть возможность использования hash, например md5 или sha1 для защиты паролей пользователя. Это хорошая идея добавить пароль salt к уравнению, чтобы сделать вещи немного сложнее взломать хакеров.

Вот пример того, как ваш код должен выглядеть используя PDO

// connect.php 
$db_host = '127.0.0.1'; 
$db_user = 'user'; 
$db_pass = 'pass'; 
$db_name = 'database_name'; 
$db = new PDO('mysql:host='.$db_host.';dbname='.$db_name, $db_user, $db_pass); 

// login.php 
<!DOCTYPE html> 
<html> 
<head> 
    <title></title> 
    <link rel="stylesheet" type="text/css" href="style.css"> 
</head> 
<body> 

<div id="wrapper"> 
    <?php 

    include('connect.php'); 

    // Using prepared statements almost eliminates the possibility of SQL Injection. 
    $preparedQuery = $db->prepare("SELECT * FROM members WHERE username = :username AND password = :password"); 
    $preparedQuery->bindValue(":username", $_POST['username']); 
    $preparedQuery->bindValue(":password", sha1($_POST['password'])); 
    $preparedQuery->execute(); 

    // Retrieve the results from the database 
    $user = $preparedQuery->fetch(PDO::FETCH_ASSOC); 

    // If there is a user record print the user & pass... 
    if($user != ""){ 
     $message = "<h3>Username - ".$user['username']."</h3>"; 
     $message .= "<h3>Password - ".$user['password']."</h3>"; 
     // start user session? 
    } else { 
     $message = "<h3>Wrong Username of Password. Try again.</h3>"; 
     unset($_POST[ 'username' ]); 
     unset($_POST[ 'password' ]); 
    } 
    ?> 
    <?php echo $message; ?> 
    <input type="button" name="back" value="Back" onclick="location.href='index.php'"> 
</div> 

</body> 
</html> 
+0

Большое спасибо, изучая меня сегодня, я обнаружил, что функции mysql_ * вот-вот потеряют поддержку, как вы сказали, поэтому я буду следовать вашим советам и использовать PDO! – Roy

0

вам нужно использовать mysql_num_rows(), Попробуйте это,

if (mysql_num_rows($result) > 0) { 

вместо

if (mysql_fetch_assoc($result) > 0) { 

ПРИМЕЧАНИЕ: Используйте mysqli_ * функции или PDO вместо mysql_ * функции (устаревшее)

+0

уже пробовал, что, по-прежнему не дает мне никаких результатов. – Roy

Смежные вопросы