Форма регистрации PHP - SQL - PullRequest
       7

Форма регистрации PHP - SQL

0 голосов
/ 24 октября 2009

Я хочу сделать регистрационную форму из PHP, чтобы зарегистрировать их имя пользователя и пароль в моей базе данных SQL. Вот что у меня есть:

config.php:

   <?php
$host['naam'] = 'localhost';                // my host
$host['gebruikersnaam'] = 'root';       // my database username
$host['wachtwoord'] = '';   // my database password
$host['databasenaam'] = 'project';       // my database name

$db = mysql_connect($host['naam'], $host['gebruikersnaam'], $host['wachtwoord']) OR die ('Cant connect to the database');
mysql_select_db($host['databasenaam'], $db);
?> 

index.php:

    <head>
    <title>Deltalus Account Registration</title>
    <style>
    *{ FONT-SIZE: 8pt; FONT-FAMILY: verdana; } b { FONT-WEIGHT: bold; } .listtitle { BACKGROUND: #425984; COLOR: #EEEEEE; white-space: nowrap; } td.list { BACKGROUND: #EEEEEE; white-space: nowrap; } </style>
    </head>
    <center><br><br><br><br>
    <h1>Deltalus Database</h1>
    <table cellspacing=1 cellpadding=5>
    <tr>
    <td class=listtitle colspan=2>Register at my server</td></tr>
    <form action="register_do.php" method="POST">
    <tr><td class=list align=right>Username:</td><td class=list><input type=text name=name maxlength="30"></td></tr>
    <tr><td class=list align=right>Password:</td><td class=list><input type=password name=pass maxlength="30"></td></tr>
    </td></tr>
    <tr><td class=listtitle align=right colspan=2><input type=submit name=submit value='Register'></td></tr>
    </form>
    </table>
    <br>

    </center></body></html

>

register_do.php:

   <?php
print '<title>Deltalus Database Server</title>';
$name = $_POST['name'];
$pass = $_POST['pass'];
include('config.php');
$sel = 'SELECT * FROM user WHERE username="'.$_POST['name'].'"';
if($name == ""){
echo 'No username filled in';
exit();
}elseif(mysql_num_rows(mysql_query($sel)) >= 1 ){
echo 'This username does already exists!';
exit();
}elseif($pass == ""){
echo 'No password filled in';
exit();
}else{
$d = 'INSERT INTO users (username, password) VALUES ("'.$name.'", "'.$pass.'")';
mysql_query($d) OR die (mysql_error());
echo 'Your account has been created, you can now login.';
}
?> 

Хорошо, проблема в том, что когда я публикую это на своем сайте. Это дает мне эту ошибку, говоря, что POST не доступен или что-то. Подождите, позвольте мне вернуться, когда я нажимаю зарегистрироваться, он говорит, что ошибка. Как бы я это исправить? Что-то не так с моим кодированием?

Спасибо

Кевин

Ответы [ 2 ]

6 голосов
/ 24 октября 2009

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

Подумайте, что произойдет, если кто-то определит имя пользователя:

blah","blah");DELETE TABLE users;

Вы не опубликовали свой код для этого, но, учитывая текущий стиль кодирования, подумайте, не указал ли кто-нибудь пароль при входе в систему:

asdf" OR "1" = "1

Это позволит эффективно войти в систему любому пользователю без пароля.

Также пароли никогда не должны храниться в виде простого текста. Они должны храниться как минимум в зашифрованном виде. Почти во всех случаях их следует хешировать. То есть они должны храниться с использованием одностороннего шифрования, такого как SHA256. Недавнее обсуждение этого вопроса.

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

Попробуйте использовать библиотеку mysqli вместо mysql. MySQL в PHP является старым и намного медленнее, чем MySQL. Mysqli также предлагает то, что называется подготовленных запросов , что может устранить риск внедрения SQL-кода при правильном использовании. Класс, который я написал, чтобы упростить его использование.

Помимо этих проблем, похоже, что вы не включили config.php в ваш register_do.php. Ваши операторы SQL не будут работать без него.

Какую версию php и mysql вы используете?

0 голосов
/ 24 октября 2009

Похоже, ваш HTTP-сервер неправильно настроен и / или не принимает запросы POST. У вас есть эта страница в Интернете, чтобы я мог посмотреть и, возможно, уточнить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...