перенаправить на страницу профиля

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

<?php include("scripts/connect.php"); $form = "<form action='home.php' method='post'> <table> <tr> <td>Email:</td> <td><input type='text' name='email' class='textbox' size='35'></td> <td><a href='register.php'>Register?</a></td> </tr> <tr> <td>Password:</td> <td><input type='password' name='password' class='textbox' size='35'></td> <td><input type='submit' name='login' value='Login' class='button' alt='Login'></td> </tr> </table> </form>"; if ($_POST['login']){ $email = strip_tags($_POST['email']); $password = strip_tags($_POST['password']); if ($email && $password){ require("scripts/connect.php"); $pass = md5(md5($password)); $query = mysql_query("SELECT * FROM users WHERE email='$email' AND password='$pass'"); $numrows = mysql_num_rows($query); if ($numrows == 1){ $row = mysql_fetch_assoc($query); $dbid = $row['uid']; $dbuser = $row['name']; $_SESSION['name'] = $dbuser; $_SESSION['userid'] = $dbid; header("profile.php?uid=$userid"); } else echo "Your login information was incorrect! $form"; } else echo "You did not fill in the entire form! $form"; } else echo "$form"; ?> 

Переменная сеанса в заголовке.

 <?php session_start(); $name = $_SESSION['name']; $userid = $_SESSION['userid']; ?> 

 header("profile.php?uid=$userid"); 

Вам не хватает самой важной части:

 header( "Location: profile.php?uid=$userid" ); 

Кроме того, как отметил Павел в комментариях ниже, ваш идентификатор пользователя не хранится в $userid .

 $dbid = $row['uid']; ... header( "Location: profile.php?uid=$dbid" ); 

Наконец, это было бы несправедливо, если бы я не указал на потенциал SQL Injection в вашем запросе. Вы выбираете все строки из таблицы пользователей, чей адрес электронной почты и пароль совпадают. Однако, если я буду передавать в качестве своего адреса электронной почты и угадать случайный пароль, я бы получил доступ:

 ' or 'a' = 'a 

Присоединившись к этому запросу, запрос к базе данных теперь будет выглядеть следующим образом:

 SELECT * FROM users WHERE email='' or 'a' = 'a' AND password='$pass'" 

На данный момент я могу угадать случайный пароль, и, пока пароль используется кем-то из вашей базы данных, я буду аутентифицирован как первый пользователь в наборе результатов. Если пароли были слишком сложными, но я знал адреса электронной почты некоторых ваших пользователей (не сложно, так как их очень легко найти), я мог бы отменить это:

 SELECT * FROM users WHERE email='admin@domain.com' AND password='' OR 'a' = 'a' 

Опять же, здесь не имеет значения, что ваш пароль, так как я больше не требую его. Если «a» = «a» (и всегда это делается), тогда пароль больше не требуется. Я был бы зарегистрирован как первый пользователь, у которого был бы указанный адрес электронной почты.

Еще хуже:

 SELECT * FROM users WHERE email = '' OR 'a'='a' AND password = '' OR 'a' = 'a' 

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

Функция header в PHP позволяет задать заголовок страницы. В вашем случае вы не указываете ничего для заголовка. Вы можете использовать специальный header() чтобы сообщить браузеру сделать перенаправление на нужный URL.

Это вызовет 302 ответ на браузер и сделает перенаправление. Поэтому ваш код должен выглядеть примерно так:

 header("Location: http://example.com"); 

Перед вызовом этого метода убедитесь, что у вас нет никаких выходов, потому что он не будет работать.

Вы пытались изменить

 if ($_POST['login']){ 

чтобы:

 if (isset($_POST['login'])) { 

?

И используйте перенаправление заголовка следующим образом:

 header("Location: page.php");