Jump to content
  • 0

Минимальная, одностраничная PHP регистрация: БД, форма, $_POST, $_SESSION


xcislav
 Share

Question

Кроме структуры, формируемой header("location:") всё достаточно прямолинейно,
Отправка формы попадает -> соединением с БД (PDO+немного SQL кода)
и
всё происходит методом $_POST и выводится в $_SESSION.

index.php:

<!DOCTYPE html><html><h1>Register</h1><form method="POST"><input type="text" name="user"><input type="pass" name="pass"><input type="submit"></form><?phpsession_start();if(isset($_POST['user'], $_POST['pass'])){require 'connect.php';$zr++;$query = d()->prepare("INSERT INTO u (user, pass, loc) VALUES (:user, :pass, :loc)");$query->bindParam(':user', $_POST['user']);$query->bindParam(':pass', $_POST['pass']);$query->bindParam(':loc', $zr);if($query->execute()){$_SESSION['user'] = $row['user'];$_SESSION['pass'] = $row['pass'];header("Location: ".$_SERVER['PHP_SELF']);} else{echo 'ERROR';}}?><h1>Login</h1><form method="POST"><input type="text" name="user"><input type="pass" name="pass"><input type="submit"></form><?phpecho $_POST['user'];if(isset($_POST['user'], $_POST['pass'])){require 'connect.php';$query = d()->prepare("SELECT user, pass FROM u WHERE user=:user AND pass=:pass");$query->bindParam(':user', $_POST['user']);$query->bindParam(':pass', $_POST['pass']);$query->execute();if($row = $query->fetch()){$_SESSION['user'] = $row['user'];$_SESSION['pass'] = $row['pass'];header("Location: ".$_SERVER['PHP_SELF']);}}$us=$_SESSION['user'];echo 'user ',$us;?><?phpif(isset($_SESSION['user'])){$us=$_SESSION['user'];echo 'user ',$us, ' ', '<a href="logout.php">Logout</a>';echo '', '<a href="zrs.php">zero session</a>';}?></html>

connect.php:

<?phpfunction d(){try{$db = new pdo("mysql:host=localhost;dbname=tx;","root","hyuiuik");$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);return $db;} catch(PDOException $e){echo 'ERROR', $e->getMessage();}}?>

ВИД на табл. пользователей:

mysql> select * from u;+—-+——--+——+——+| id | user | pass | loc |+—-+——--+——+——+| 1 | a | asdf | 0 || 2 | b | bsdf | 0 || 3 | b | bsdf | 0 || 4 | c | csdf | 0 |

Но непонимание на этапе формирования структуры подготовления и отправки собранных данных.

примерный вид:

1.php

<?php
session_start();
К
О
Д
session_write_close();

if( isset($_POST['user'] ){
К
О
Д
}else{
К О Д
}

if( !isset($_POST['user']) ){
header("location: http://" . $_SERVER['HTTP_HOST'] . "/login.php");
}else{
//user установлен
КОД ЗАПУСКА
}

Edited by xcislav
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

авторизация инклудится в код ниже:

<?phpsession_start();if (isset($_GET['logout'])) {	include ('conf.example.php');	if (isset($_SESSION['user_id']))		unset($_SESSION['user_id']);	setcookie('login', '', 0, "/");	setcookie('password', '', 0, "/");	// и переносим его на главную	header("Location: http://".$_SERVER['HTTP_HOST']."/");	exit();}if (isset($_SESSION['user_id'])) {	// юзер уже залогинен, перекидываем его отсюда на закрытую страницу	header('Location: ../index.php');	exit();}if (!empty($_POST)) {	include ('conf.example.php');	$login = (isset($_POST['login'])) ? mysql_real_escape_string($_POST['login']) : '';	$query = "SELECT `salt` FROM `user` WHERE `login`='".$login."' LIMIT 1";	$sql = mysql_query($query) or die(mysql_error());	if (mysql_num_rows($sql) == 1) {		$row = mysql_fetch_assoc($sql);		// итак, вот она соль, соответствующая этому логину:		$salt = $row['salt'];		// теперь хешируем введенный пароль как надо и повторям шаги, которые были описаны выше:		$password = md5(md5($_POST['password']) . $salt);		// и пошло поехало...		// делаем запрос к БД		// и ищем юзера с таким логином и паролем		$query = "SELECT `id` FROM `user` WHERE `login`='".$login."' AND `password`='".$password."' LIMIT 1";		$sql = mysql_query($query) or die(mysql_error());		// если такой пользователь нашелся		if (mysql_num_rows($sql) == 1) {			// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)			$row = mysql_fetch_assoc($sql);			$_SESSION['user_id'] = $row['id'];			// если пользователь решил "запомнить себя"			// то ставим ему в куку логин с хешем пароля			$time = 86400; // ставим куку на 24 часа			if (isset($_POST['remember'])) {				setcookie('login', $login, time()+$time, "/");				setcookie('password', $password, time()+$time, "/");			}			// и перекидываем его на закрытую страницу			header('Location: ../index.php');			exit();			// не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();		} else {			echo 'Такой логин с паролем не найдены в базе данных. — <a href="http://'.$_SERVER['HTTP_HOST'].'/admin/">Авторизоваться</a>';		}	}}echo "<div class=\"auth\"><form method=\"post\" action=\"http://".$_SERVER['HTTP_HOST']."/admin/login/\"><label>Логин:<input type=\"text\" name=\"login\" /></label><label>Пароль:<input type=\"password\" name=\"password\" /></label><input type=\"submit\" value=\"Авторизоваться\" /></form></div>";?>

под pdo переделать не проблема.

и на странице куда перекинуло после авторизации:

<?php// если пользователь не авторизованif (!isset($_SESSION['id'])) {	// то проверяем его куки	// вдруг там есть логин и пароль к нашему скрипту	if (isset($_COOKIE['login']) && isset($_COOKIE['password'])) {		// если же такие имеются		// то пробуем авторизовать пользователя по этим логину и паролю		$login = mysql_escape_string($_COOKIE['login']);		$password = mysql_escape_string($_COOKIE['password']);		// и по аналогии с авторизацией через форму:		// делаем запрос к БД		// и ищем юзера с таким логином и паролем		$query = "SELECT `id` FROM `user` WHERE `login`='".$login."' AND `password`='".$password."' LIMIT 1";		$sql = mysql_query($query) or die(mysql_error());		// если такой пользователь нашелся		if (mysql_num_rows($sql) == 1) {			// то мы ставим об этом метку в сессии (допустим мы будем ставить ID пользователя)			$row = mysql_fetch_assoc($sql);			$_SESSION['user_id'] = $row['id'];			// не забываем, что для работы с сессионными данными, у нас в каждом скрипте должно присутствовать session_start();		}	}}if (isset($_SESSION['user_id'])) {	$query = "SELECT `login` FROM `user` WHERE `id`='".$_SESSION['user_id']."' LIMIT 1";	$sql = mysql_query($query) or die(mysql_error());	// если нету такой записи с пользователем	// ну вдруг удалили его пока он лазил по сайту.. =)	// то надо ему убить ID, установленный в сессии, чтобы он был гостем	if (mysql_num_rows($sql) != 1) {		header('Location: config/login.example.php?logout');		exit();	}	$row = mysql_fetch_assoc($sql);	$welcome = $row['login'];} else {	$welcome = 'Гость';}print '<ul class="reg_user"><li><h2>Здравствуйте, ' . $welcome . '.</h2></li>';if (!isset($_SESSION['user_id'])) {include ('login.example.php');} else {	print "<li><a href=\"http://".$_SERVER['HTTP_HOST']."/\">На индекс</a></li>		   <li><a href=\"http://".$_SERVER['HTTP_HOST']."/admin/logout/\">Выход</a></li>	</ul>";}?>
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy