Цель страницы в том чтобы определить пользователя, возможны 3 варианта: 1) Имя и пароль не совпадают. 2)Имя совпадает с паролем, но пользователь не зарегисрировал персонажа. 3)Пользовательможет войти в игру. PHP: <?php session_start(); include "conf.php"; $email = htmlspecialchars($_POST['email']); $passHash = md5(htmlspecialchars($_POST['pass'])); $data = mysql_connect($base_name, $base_user, $base_pass); if(!$data){ echo "<BR>"; echo mysql_error(); die(); } mysql_select_db($db_name); $query = mysql_query("SELECT * FROM users WHERE email='".$email."' AND pass='".$passHash."'"); $row = mysql_fetch_array($query); $num = mysql_num_rows($query); if ($num > 0){ $_SESSION['user'] = $email; $_SESSION['ip'] = $row['ip']; $_SESSION['name'] = $row['name']; mysql_query("UPDATE users SET online='1' WHERE email='".$email."'"); mysql_select_db($db_name); $query1 = mysql_query("SELECT * FROM users WHERE email='".$email."' AND name='1246875568'"); $row1 = mysql_fetch_array($query1); $num1 = mysql_num_rows($query1); if(4 > 1) { echo "<script>location.href='hreg.php';</script>"; } else { echo "<script>location.href='game.php';</script>"; } else { echo "<script>location.href='index.php';</script>"; } ?> Без этого код работает: PHP: mysql_select_db($db_name); $query1 = mysql_query("SELECT * FROM users WHERE email='".$email."' AND name='1246875568'"); $row1 = mysql_fetch_array($query1); $num1 = mysql_num_rows($query1); if(4 > 1) { echo "<script>location.href='hreg.php';</script>"; } else {....} Значит ошибка в этой части, но где? Пояснения: 4>1 поставлено только для теста, а имя по умолчанию 1246875568 потому, что я слышал, что MySql в таблицах NULL не находит. Пожалуйста помогите найти ошибку, почему он не работает?
Не особо понятно, но напрашивается следующий алгоритм: 1. Запрос к базе на email и пароль зарегистрированного пользователя -если такого нет, перейти на регистрацию пользователя 2. Если такой пользователь есть -проверить поле с именем персонажа в базе и если оно пустое перенаправить на форму регистрации персонажа 3. Пользователь может войти в игру PHP: $query = mysql_query("SELECT * FROM users WHERE email='email'"); if(!mysql_num_rows($query)) { // перенаправить на регистрацию; exit; } $user = mysql_fetch_assoc($query); if(empty($user['name'])) { // вывести или подключить файл с формой регистрации персонажа } // записать в сессию данные пользователя и перенаправить на главную страницу приложения
Не знаю, как всё получилось, но это работает: PHP: mysql_select_db($db_name); $query = mysql_query("SELECT * FROM users WHERE email='".$email."' AND pass='".$passHash."'"); $row = mysql_fetch_array($query); $num = mysql_num_rows($query); $query1 = mysql_query("SELECT * FROM users WHERE email='".$email."' AND name=''"); $row1 = mysql_fetch_array($query1); $num1 = mysql_num_rows($query1); if($num1 > 0){ $_SESSION['user'] = $email; $_SESSION['ip'] = $row['ip']; $_SESSION['name'] = $row['name']; mysql_query("UPDATE users SET online='1' WHERE email='".$email."'"); echo "<script>location.href='hreg.php';</script>"; } if ($num > 0){ $_SESSION['user'] = $email; $_SESSION['ip'] = $row['ip']; $_SESSION['name'] = $row['name']; mysql_query("UPDATE users SET online='1' WHERE email='".$email."'"); echo "<script>location.href='game.php';</script>"; } else { echo "<script>location.href='index.php';</script>"; } Да, алгоритм вы поняли правильно.
Я не суперзнаток РНР, но думаю, что так будет компактнее: PHP: <?php session_start(); require_once 'db.php' // вынести в этот файл параметры соединения с БД $query = mysql_query("SELECT * FROM users WHERE email='$email' AND password='$pass'"); if(!mysql_num_rows($query)) { // перенаправить на регистрацию; exit; } $user = mysql_fetch_assoc($query); $_SESSION['email'] = $user['email']; $_SESISON['ip'] = $user['ip']; if(empty($user['nickname'])) { // вывести или подключить файл с формой регистрации персонажа } $_SESSION['nickname'] = $user['nickname']; echo "<script>location.href='game.php';</script>"; ?>
Да, вы совершенно правы, так будет компактнее, просто я с PHP впервые встречаюсь и функций практически не знаю.