ПОМОГИТЕ!! Как сделать чтоб после входа перекидывало на новую страницу для авторизованного пользователя c id в ссылке и т.д ?

nikt0

Member
Регистрация
13.02.2020
Сообщения
14
Вот я выделил код и показал как выглядит, перешли на страницу входа вели данные и даже страница не обновилась показаться мой профиль и выйти там видно а как бы сделать чтоб после входа перекидывало на другую страницу для авторизованного пользователя (чтоб id с быза даных брал и в URL вставлял как своя личная страница получилась и если указать в браузере эту ссылку с айти в юрл то показывался профиль) сразу же нажал войти и перекинуло на другую стр, что впихнуть туда надо чтоб все работало так ?и если можно пример наглядный что куда вставлять нужно или поменять.
 

Вложения

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Как брать ID из вашей "база даных" не скажу, потому что не знаю какая она.
А редирект делается в условие else через header
Код:
...
else{
    header('Location: /file.php?id=' . ID_FROM_DB);
}
При этом надо учесть, что редирект должен быть в ДРУГОЙ ФАЙЛ, иначе зациклится.

И в общем алгоритм построен неверно. В данном случае не должно быть привязки по ID. Этот ID должен сам обрабатываться согласно куки авторизации в вашем файле file.php и не отображаться в URL.
 

nikt0

Member
Регистрация
13.02.2020
Сообщения
14
Как брать ID из вашей "база даных" не скажу, потому что не знаю какая она.
А редирект делается в условие else через header
Код:
...
else{
    header('Location: /file.php?id=' . ID_FROM_DB);
}
При этом надо учесть, что редирект должен быть в ДРУГОЙ ФАЙЛ, иначе зациклится.

И в общем алгоритм построен неверно. В данном случае не должно быть привязки по ID. Этот ID должен сам обрабатываться согласно куки авторизации в вашем файле file.php и не отображаться в URL.
вот бд как теперь брать ID из "базы данных"??
 

Вложения

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Смотрю вы по каким-то урокам изучаете. Там разве нет?
В интернете же полно учебников и статей с такими начального уровня уроками.

Как-то так
Код:
$name = $_GET["username"];
$name = htmlspecialchars($name); // Добавим хоть какую-то защиту

$mysqli = new mysqli("localhost", "my_user", "my_password", "lesson"); // подключаемся к DB, если этого не делали

$result = mysqli_query("SELECT user_id FROM signup WHERE username='$name' limit 1");
$value = mysqli_fetch_object($result);
echo $value->user_id;
(В коде могут быть ошибки, не проверял)
 

nikt0

Member
Регистрация
13.02.2020
Сообщения
14
Смотрю вы по каким-то урокам изучаете. Там разве нет?
В интернете же полно учебников и статей с такими начального уровня уроками.

Как-то так
Код:
$name = $_GET["username"];
$name = htmlspecialchars($name); // Добавим хоть какую-то защиту

$mysqli = new mysqli("localhost", "my_user", "my_password", "lesson"); // подключаемся к DB, если этого не делали

$result = mysqli_query("SELECT user_id FROM signup WHERE username='$name' limit 1");
$value = mysqli_fetch_object($result);
echo $value->user_id;
(В коде могут быть ошибки, не проверял)
так как сделать чтоб просто перекидывало на другую страницу для авторизованного пользователя ?
"else{
header('Location: /file.php?id=' . ID_FROM_DB);
}"
это чет не работает 3-2 фото , а через мету он просто обновляется бесконечно и не перекидывает
 

Вложения

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Вам показывает ошибку, что перед header не должно быть никакого отображаемого кода. То есть всё что выше if надо засунуть в этот самый if.
Или правильнее сделать наоборот сначала проверку с редиректом в самом начале документа
Код:
if(isset($_COOKIE['username'])){
  header('Location: /file.php?id=' . ID_FROM_DB);
  exit; // надо чтобы принудительно остановить выполнение кода и не писать else
}
//далее уже ваш код
<html><head>....
Проблема с метой аналогичная. Она должна быть в хедере (head) по феншую. И возможно надо указать со слешем "/profile.php"

PS Пожалуйста, не плодите одинаковые темы и не пишите КАПСом.
 

nikt0

Member
Регистрация
13.02.2020
Сообщения
14
Вам показывает ошибку, что перед header не должно быть никакого отображаемого кода. То есть всё что выше if надо засунуть в этот самый if.
Или правильнее сделать наоборот сначала проверку с редиректом в самом начале документа
Код:
if(isset($_COOKIE['username'])){
  header('Location: /file.php?id=' . ID_FROM_DB);
  exit; // надо чтобы принудительно остановить выполнение кода и не писать else
}
//далее уже ваш код
<html><head>....
Проблема с метой аналогичная. Она должна быть в хедере (head) по феншую. И возможно надо указать со слешем "/profile.php"

PS Пожалуйста, не плодите одинаковые темы и не пишите КАПСом.
ну если будите помогать то не буду флудить ))
 

nikt0

Member
Регистрация
13.02.2020
Сообщения
14
Вам показывает ошибку, что перед header не должно быть никакого отображаемого кода. То есть всё что выше if надо засунуть в этот самый if.
Или правильнее сделать наоборот сначала проверку с редиректом в самом начале документа
Код:
if(isset($_COOKIE['username'])){
  header('Location: /file.php?id=' . ID_FROM_DB);
  exit; // надо чтобы принудительно остановить выполнение кода и не писать else
}
//далее уже ваш код
<html><head>....
Проблема с метой аналогичная. Она должна быть в хедере (head) по феншую. И возможно надо указать со слешем "/profile.php"

PS Пожалуйста, не плодите одинаковые темы и не пишите КАПСом.
кароче чет вообще не робит я сделал как надо не кидает на стр profil.php
 

Вложения

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
в САМОЕ начало.
Я же специально написал

//далее уже ваш код
<html><head>

Специально привёл самый первый тег документа.

Дальше вместо ID_FROM_DB надо вставить ПЕРЕМЕННУЮ с ID полученную из базы. Как её получить писал в #4 сообщение этой темы.
 

nikt0

Member
Регистрация
13.02.2020
Сообщения
14
в САМОЕ начало.
Я же специально написал

//далее уже ваш код
<html><head>

Специально привёл самый первый тег документа.

Дальше вместо ID_FROM_DB надо вставить ПЕРЕМЕННУЮ с ID полученную из базы. Как её получить писал в #4 сообщение этой темы.
хоть в самом начало хоть там где щас стоит все равно это пусто
и айди он же сам должен брать тот на который пользователь зарегистрировался
и куда это вставлять $name = $_GET["username"];
$name = htmlspecialchars($name); // Добавим хоть какую-то защиту

$result = mysqli_query("SELECT user_id FROM signup WHERE username='$name' limit 1");
$value = mysqli_fetch_object($result);
echo $value->user_id; так что поставил в самое начало все равно пусто где самый первый иф
 
Последнее редактирование:

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Вы хотите научиться или получить решение?

Если вы хотите учится, то подсказываю вам один лайфхак
В САМОМ начале файлов размещать вот такой код
PHP:
<?
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
Этот код будет выводить на экран ВСЕ PHP ошибки.
Со временем вы научитесь их сразу понимать, а до тех пор их можно загуглить или тут спросить.
Разумеется в будущем, когда вы будете выкладывать проект для всеобщего пользования, вывод ошибок надо наоборот запретить или выводить в файл. Но это уже другая история, которую вы узнаете позже.

Вы начали изучение немного не от туда. Изучение взаимодействия с БД надо начинать вторым этапом. Вы не научились даже элементарному синтаксису PHP. Поэтому вас сложно понять многое. Если уж начали, то уроков по написанию АВТОРИЗАЦИИ много, рекомендую парочку прочитать для начала.

хоть в самом начало хоть там где щас стоит все равно это пусто
Значит что-то не так делаете.

и айди он же сам должен брать тот на который пользователь зарегистрировался
Кто он? У вас код берёт ID из БД. Чтобы писать программу надо продумать сначала алгоритм действий, что за чем идёт. Без этого у вас ничего не получится.

Я вам напишу код (примерный), но от этого вы ничего не научитесь, вы даже не понимаете, как ID из базы привязать к переменной.
PHP:
<?
// Активируем вывод всех ошибок
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Проверяем наличие в куки или в переменной username переданной из формы при авторизации
if( isset($_COOKIE['username'] || isset($_GET["username"]) ){

  if(isset($_COOKIE['username']){ // Если имя в куке, то привязываем её
    $name = $_COOKIE['username'];
  }else{ // Или привязываем из GET
    $name = $_GET["username"]; 
  }

$name = htmlspecialchars($name); // Добавим хоть какую-то защиту

$mysqli = new mysqli("localhost", "my_user", "my_password", "lesson"); // подключаемся к DB, если этого не делали

$result = mysqli_query("SELECT user_id FROM signup WHERE username='$name' limit 1"); // Ищем в БД
$value = mysqli_fetch_object($result); // Фильтруем полученные данные, чтобы PHP понимал
/* Тут надо бы ещё пароль проверить, но это уже другая история */
$id = $value->user_id; // заносим в переменную

  if( !empty($id) ){ // проверяем не пустая ли переменная, вдруг ID не нашёлся
    /* тут надо бы сохранить куку, но это тоже другая история */
    header('Location: /profile.php?id=' . $id); // делаем желаемый редирект
    exit; // надо чтобы принудительно остановить выполнение кода и не писать else
  }
  // дальше пойдёт код, если ID не найден
}
//далее уже ваш код вывода формы авторизации
?>
<html><head>....
 
Последнее редактирование:

nikt0

Member
Регистрация
13.02.2020
Сообщения
14
Вы хотите научиться или получить решение?

Если вы хотите учится, то подсказываю вам один лайфхак
В САМОМ начале файлов размещать вот такой код
PHP:
<?
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
?>
Этот код будет выводить на экран ВСЕ PHP ошибки.
Со временем вы научитесь их сразу понимать, а до тех пор их можно загуглить или тут спросить.
Разумеется в будущем, когда вы будете выкладывать проект для всеобщего пользования, вывод ошибок надо наоборот запретить или выводить в файл. Но это уже другая история, которую вы узнаете позже.

Вы начали изучение немного не от туда. Изучение взаимодействия с БД надо начинать вторым этапом. Вы не научились даже элементарному синтаксису PHP. Поэтому вас сложно понять многое. Если уж начали, то уроков по написанию АВТОРИЗАЦИИ много, рекомендую парочку прочитать для начала.


Значит что-то не так делаете.


Кто он? У вас код берёт ID из БД. Чтобы писать программу надо продумать сначала алгоритм действий, что за чем идёт. Без этого у вас ничего не получится.

Я вам напишу код (примерный), но от этого вы ничего не научитесь, вы даже не понимаете, как ID из базы привязать к переменной.
PHP:
<?
// Активируем вывод всех ошибок
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Проверяем наличие в куки или в переменной username переданной из формы при авторизации
if( isset($_COOKIE['username'] || isset($_GET["username"]) ){

  if(isset($_COOKIE['username']){ // Если имя в куке, то привязываем её
    $name = $_COOKIE['username'];
  }else{ // Или привязываем из GET
    $name = $_GET["username"]; 
  }

$name = htmlspecialchars($name); // Добавим хоть какую-то защиту

$mysqli = new mysqli("localhost", "my_user", "my_password", "lesson"); // подключаемся к DB, если этого не делали

$result = mysqli_query("SELECT user_id FROM signup WHERE username='$name' limit 1"); // Ищем в БД
$value = mysqli_fetch_object($result); // Фильтруем полученные данные, чтобы PHP понимал
/* Тут надо бы ещё пароль проверить, но это уже другая история */
$id = $value->user_id; // заносим в переменную

  if( !empty($id) ){ // проверяем не пустая ли переменная, вдруг ID не нашёлся
    /* тут надо бы сохранить куку, но это тоже другая история */
    header('Location: /profile.php?id=' . $id); // делаем желаемый редирект
    exit; // надо чтобы принудительно остановить выполнение кода и не писать else
  }
  // дальше пойдёт код, если ID не найден
}
//далее уже ваш код вывода формы авторизации
?>
<html><head>....
PHP:
@@@@@вот это@@@@@<?
// Активируем вывод всех ошибок
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

// Проверяем наличие в куки или в переменной username переданной из формы при авторизации
if( isset($_COOKIE['username'] || isset($_GET["username"]) ){

  if(isset($_COOKIE['username']){ // Если имя в куке, то привязываем её
    $name = $_COOKIE['username'];
  }else{ // Или привязываем из GET
    $name = $_GET["username"]; 
  }

$name = htmlspecialchars($name); // Добавим хоть какую-то защиту
@@@@обязательно ???@@@@
@и  $result = mysqli_query("SELECT user_id FROM signup WHERE username='$name' limit 1"); // Ищем в БД
$value = mysqli_fetch_object($result); // Фильтруем полученные данные, чтобы PHP понимал
/* Тут надо бы ещё пароль проверить, но это уже другая история */
$id = $value->user_id; // заносим в переменную

  if( !empty($id) ){ // проверяем не пустая ли переменная, вдруг ID не нашёлся
    /* тут надо бы сохранить куку, но это тоже другая история */
    header('Location: /profile.php?id=' . $id); // делаем желаемый редирект
    exit; // надо чтобы принудительно остановить выполнение кода и не писать else
  }
  // дальше пойдёт код, если ID не найден
}
//далее уже ваш код вывода формы авторизации
это в САМОЕ начало ПХП ??? вот так как на фото
Просто может  авторизация  в  if а когда уже пользователь авторизован это else(иначе) и туда может вставить переход и в  переходе из бд ади берет  и кидает в свой профиль на новую стр со своим ади в стоке ??
@@@@@кароче вот код как правильно покажите я уже закалибался @@@@
<?php
$dbc = mysqli_connect('localhost', 'root', '', 'lesson');
if(!isset($_COOKIE['user_id'])) {
	if(isset($_POST['submit'])) {
		$user_username = mysqli_real_escape_string($dbc, trim($_POST['username']));
		$user_password = mysqli_real_escape_string($dbc, trim($_POST['password']));
		if(!empty($user_username) && !empty($user_password)) {
			$query = "SELECT `user_id` , `username` FROM `signup` WHERE username = '$user_username' AND password = SHA('$user_password')";
			$data = mysqli_query($dbc,$query);
			if(mysqli_num_rows($data) == 1) {
				$row = mysqli_fetch_assoc($data);
				setcookie('user_id', $row['user_id'], time() + (60*60*24*30));
				setcookie('username', $row['username'], time() + (60*60*24*30));
				$home_url = 'http://' . $_SERVER['HTTP_HOST'];
				header('Location: '. $home_url);
			}
			else {
				echo 'Неверные данные - Логин/Пароль.';
			}
		}
		else {
			echo 'Неверные данные';
		}
	}
}
?>
<!DOCTYPE html>
<html>
 <head>
  <link rel="shortcut icon" href="img/Vkladka.ico" type="image/x-icon">
  <meta charsct="UTF-8"/>
  <title>CentPublic.ru</title>
  <link href="stili/login.css" rel="stylesheet" type="text/css"/>
  <body style="width:515px;"/>
 </head>
  <body>
  <?php
  include('vid.php');
  ?>
  <div id="opis"><div id="gg">Вход в аккаунт<br/></div>
  <div id="dop">Welcome!</div>
<section>
<?php
	if(empty($_COOKIE['username'])) {
?>
    <P><div id="kk"><form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
	<div id="jk"><label for="username">Логин:</label>
	<input type="text" name="username"><br/></div>
	<p><label for="password">Пароль:</label>
	<input type="password" name="password"><br/></p>
	<div id="gh"><button type="submit" name="submit">Войти</button></div></div></p>
	Важно: Входить с одного устройства в разные аккаунты строго запрещено,
а иначе бана не избежать!
	</form></div>
<?php
}
else {
	?>
	<p><a href="fail.php">Мой профиль</a></p>
	<p><a href="exit.php">Выйти(<?php echo $_COOKIE['username']; ?>)</a></p>
<?php	
}
?>
</section>
  <div id="bagi"><div id="bag"><?php
  include('blokrec.php');
  ?></div>
  <div id="vin7"><a href="register.php">Регистрация</a><br/></div>
  <div id="vin6"><a href="login.php">Вход</a><br/></div></div>
  <div id="vin8"><?php
  include('exer.php');
  ?></div>
</html>
 

Вложения

Последнее редактирование модератором:

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
Работу с БД надо выносить в другИЕ файлы, в которых и проверять верно ли введены данные (авторизация). А не на странице формы (на странице конечно тоже можно, но так будет каша у тебя)
Надо разделять НАЗНАЧЕНИЯ файлов.
Либо перестраивать алгоритмы.
Сейчас сложно объяснить, потому что ты не понимаешь цепочку алгоритма, поведения твоего скрипта.
 

nikt0

Member
Регистрация
13.02.2020
Сообщения
14
Работу с БД надо выносить в другИЕ файлы, в которых и проверять верно ли введены данные (авторизация). А не на странице формы (на странице конечно тоже можно, но так будет каша у тебя)
Надо разделять НАЗНАЧЕНИЯ файлов.
Либо перестраивать алгоритмы.
Сейчас сложно объяснить, потому что ты не понимаешь цепочку алгоритма, поведения твоего скрипта.
так возьми мой скрип и покажи как надо )
 

BaNru

Пацифизжу
Команда форума
Регистрация
13.11.2010
Сообщения
4 137
А это уже наглость!
 

miketomlin

Well-Known Member
Регистрация
12.11.2013
Сообщения
101
Добавим хоть какую-то защиту
Это, считай, никакая защита.

так как сделать чтоб просто перекидывало на другую страницу для авторизованного пользователя ?
"else{
header('Location: /file.php?id=' . ID_FROM_DB);
}"
Тебе же написали, что к собственному закрытому профилю нужно обращаться по адресу без id пользователя. Это к публичным профилям, в том числе и собственному, обращаются по id.

Основы и простецкий код: Как сделать авторизацию пользователя? Я там достаточно много внимания уделил редиректам. См., как меняются адреса в демке (g09.ru/my).
 

nikt0

Member
Регистрация
13.02.2020
Сообщения
14
Это, считай, никакая защита.

Тебе же написали, что к собственному закрытому профилю нужно обращаться по адресу без id пользователя. Это к публичным профилям, в том числе и собственному, обращаются по id.

Основы и простецкий код: Как сделать авторизацию пользователя? Я там достаточно много внимания уделил редиректам. См., как меняются адреса в демке (g09.ru/my).
ну а как сделать чтобы после авторизации перекинуло на другую страницу где будет мой профиль и выход ???
 

miketomlin

Well-Known Member
Регистрация
12.11.2013
Сообщения
101
ну а как сделать чтобы после авторизации перекинуло на другую страницу где будет мой профиль и выход ???
Вот прям, как написано.
PHP:
header('Location: http'.(empty($_SERVER['HTTPS'])?'://':'s://').$_SERVER['HTTP_HOST'].'/my');
exit;
Это если вам трудно организовать «наследование» исходного адреса по моему примеру. Хотя там нет ничего особо трудного. Я просто для формирования адреса формы входа/ее обработчика добавляю к исходному адресу префикс /login, а потом в случае успешной аутентификации его убираю, чтобы выполнить редирект по исходному адресу. Вы же можете делать редирект на конкретную страницу профиля.
 
Верх Низ