Я относительно новнький в mysql и пхп, поэтому писал скрипт не с нуля а по мануалам, но почему-то часть где должна проверятся валидность данных неработает, скорее всего это ошибка в mysql синтаксисе, исправте если найдете ошибку, буду очень благодарен. PHP: <?php session_start(); require_once($_SERVER['DOCUMENT_ROOT'].'/db.php'); if (!session_is_registered('username') && $_SESSION['logged_in'] != TRUE) { // user is not logged in. if (isset($_POST['Login'])) { if($_POST['username']!='' && $_POST['password']!='') { // retrieve the username and password sent from login form // First we remove all HTML-tags and PHP-tags, then we create a md5-hash // This step will make sure the script is not vurnable to sql injections. $u = strip_tags($_POST['username']); $p = md5(strip_tags($_POST['password'])); //Now let us look for the user in the database. $query = sprintf("SELECT user_id, username, plevel FROM users WHERE username = '%s' AND user_password = '%s' LIMIT 1;", mysql_real_escape_string($u), mysql_real_escape_string($p)); $result = mysql_query($query); // If the database returns a 0 as result we know the login information is incorrect. // If the database returns a 1 as result we know the login was correct and we proceed. // If the database returns a result > 1 there are multple users // with the same username and password, so the login will fail. if (mysql_num_rows($result) != 1) { // invalid login information echo "Wrong username or password!"; //show the loginform again. include($_SERVER['DOCUMENT_ROOT'].'/templates/login.tpl'); }else{ // Login was successfull $row = mysql_fetch_array($result); // Сохраняем инфу в сесии $_SESSION['user_id'] = $row['user_ID']; $_SESSION['logged_in'] = TRUE; $_SESSION['username'] = $u; // Now we show the userbox show_userbox(); } }else{ // Поля были оставлены пустыми $error = 'Please user both your username and password to access your account'; include($_SERVER['DOCUMENT_ROOT'].'/templates/login.tpl'); } }else{ // User is not logged in and has not pressed the login button // so we show him the loginform include($_SERVER['DOCUMENT_ROOT'].'/templates/login.tpl'); } }else{ // The user is already logged in, so we show the userbox. show_userbox(); } ?>
В чем проявляется нерабочесть? Код (Text): require_once($_SERVER['DOCUMENT_ROOT'].'/db.php'); Этот файлик было-бы неплохо показать. Ну и, естественно, ошибки. (mysql_error() в частности);
Чтобы точно понять, почему не работает, нужен код, который заносит нового юзера в базу. Потому что вот этот код, хоть и немного странный, но рабочий.
Почему странный? Как его зделать лучше? Проблему решил, при регистрации вместе с именем юзера добавлялись 2 невидимых символа...
Я бы его назвал "книжным". Потому что, например, вот этот кусок: я бы написал так: PHP: $result = mysql_fetch_array(mysql_query("SELECT user_id, username, plevel FROM users WHERE username = '".mysql_real_escape_string($u)."' AND user_password = '".mysql_real_escape_string($p)."'"));
Так писать нежелательно. Если выйдет mysql-ошибка, то после скрипт вообще остановится с фатальной ошибкой из-за отсутствия параметров в функции mysql_fetch_array. ИМХО.
Не остановится. Просто в $result будет false. И, соответственно, можно написать: PHP: <?php if ($result = mysql_fetch_array(mysql_query("SELECT user_id, username, plevel FROM users WHERE username = '".mysql_real_escape_string($u)."' AND user_password = '".mysql_real_escape_string($p)."'"))) { } else { echo "Что-то не прошёл запрос.".mysql_error()."<br />"; }; Меньше переменных - меньше работы интерпретатору, меньше возможности кодеру запутаться в переменных.