доступ по паролю

Статус
Закрыто для дальнейших ответов.

vlastelin

Well-Known Member
Регистрация
29.12.2006
Сообщения
107
Подскажите, как написать следующее:
Человек заходит на страницу и видит форму куда надо ввести пароль, вводит его и попадает на определённую страницу, а если вводит неверный пароль, то выскакивает ошибка =)
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Ну вот простенький пример, стряпал на скорую руку, для одного человека, тут для базы данных, переделать для файла не составит труда...
Код:
<?php 

session_start();
$host_db = "localhost"; // имя хоста
$user_db = "root"; // юзер(привилегии)
$pass_db = ""; // пароль юзера
$db_db = "ajax"; // база данных
$link = mysql_connect($host_db, $user_db, $pass_db) or die("Не возможно подключиться к базе данных");
mysql_select_db($db_db, $link) or die("Не могу выбрать базу данных");
if(isset($_POST['do'])){
  $login = mysql_escape_string($_POST['login']);
  $pass = md5($_POST['password']);
  $result = mysql_query("SELECT * FROM users WHERE login='{$login}' AND password='{$pass}'");
  if(mysql_num_rows($result) == 1) {
	 $user = mysql_fetch_array($result);
	 if($user['login'] == $login && $user['password'] == $pass) {
		$_SESSION['login'] = $user['login'];
		$_SESSION['password'] = $user['password'];
	 } else {
		header("Location: ".$_SERVER['PHP_SELF']);
		exit;
	 }
  } else {
	 header("Location: ../index.php?page=author&error");
	 exit;
  }
  mysql_close($link);
  header("Location: ".$_SERVER['PHP_SELF']);
}

if(isset($_SESSION['login']) && isset($_SESSION['password'])) {
   echo "Вы авторизованы";
} else {
?>
<html>
<body>
<div align="center" style="font-weight: bold;">
Форма авторизации
</div>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
Логин: <input type="text" name="login"><br>
Пароль: <input type="password" name="password"><br>
<input type="submit" name="do" value="Авторизоваться">
</form>
</html>
<?}?>
 

vlastelin

Well-Known Member
Регистрация
29.12.2006
Сообщения
107
ой) спасибо, но слишком навороченно))) мне надо просто чтобы не все могли заходить на определенную страницу, а только те, у кого есть пароль. На js могу сделать, но на нём фигово получается
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Код:
<?php 
session_start();

if(isset($_POST['do']))
{
  if($_POST['password'] == "12345") $_SESSION['check'] = 1;
}
?>
<html>
<body>
<?
if(isset($_SESSION['check'])) 
{
   echo "Вы авторизованы";
   exit;
}
?>
<div align="center" style="font-weight: bold;">
Форма авторизации
</div>
<form method="POST" action="<?php echo $_SERVER['PHP_SELF']?>">
Пароль: <input type="password" name="password"><br>
<input type="submit" name="do" value="Авторизоваться">
</form>
</html>
Ну тогда примерно так, думаю разбирёшься... Если нет, спрашивай, отвечу :)
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Да не за что. Главное разобраться и осознать, что за код приведён!
 

Gaaarfild

Member
Регистрация
26.03.2008
Сообщения
19
А как сделать запароленную страницу, если у меня не используется база данных. Все хранится в файлах.
Нужно закодировать пароль!
Средствами ПХП. Тоесть чтобы его можно было менять! И ПХП автоматически кодировал его и записывал в файл. Потом если надо, раскодировал иди хз!
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Тоже ничего сложного, писать конечно больше не буду, дан алгоритм по нему и делаемс )))

И ещё закодировать можно md5(), но её не декодируешь! Зато нормальная защита, я бы конечно не сказал что наилучшая...

1) Форма для отправки пароля
2) приём нового пароля, открытие текстового файла функцией fopen с правами записи
$pass = md5($_POST['password']);
Забрасываем переменную в файл
3) закрываем файл

Проверять же не сложно!
Функции для использования, file(), trim()- обрезание пробелов.
$str = file(...);
$str = trim($str[0]);

Далее нужно условие
if(md5($_POST['отправленный на проверку']) == $str) переадресация;
 

Gaaarfild

Member
Регистрация
26.03.2008
Сообщения
19
Огромное преогромное спасибо тебе!!!
И еще один вопрос. Про ту же ситуацию без базы данных. Например пользователь вводит данные, они записываются и потом отображаются. Ну типо гостевая книга. Когда количество сообщений достигает, скажем определенного предела, создается еще одна страница. Тоесть он делает постраничность. Как это можно организовать максимально просто.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
1)Считаем количесво топиков и делим его на количесво топиков на одной странице
2) округляем значение в большую сторону.
3) далее в цикле for указываем с какой по какую выводить.
С какой = количесво топиков на одной странице*данная страница.
По какую = С какой + количесво топиков на одной странице
4) а страницы выводим в низу, крличество содержится в значении которое мы округлили
 

Gaaarfild

Member
Регистрация
26.03.2008
Сообщения
19
А как с считать количество топиков и как именно по топикам выборку осуществить?
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
file.txt
Код:
Сообщение 1
Сообщение 2
Сообщение 3
Сообщение 4
Сообщение 5
Код:
$num_str = 2; // Сколько на одной странице
$file = file(file.txt); // считали файл в массив
$num = count($file); // сосчитали количество всех строк и занесли в $num
$num_p = округление к большему($num/$num_str); // Вычисляем количесво сраниц
Выборка по топикам, из GET передаётся номер страницы.
Код:
$page = intval($_GET['p']);
$start_str = 
$end_str = $start_str + $num_str;
.......

for($i = $num_str; $i<$num_str+2: $i++)
{
  echo $file[$i];
}
Продумай как расположить и доработать, не забывай про подводные камни, тут их не мало...
Если ты их не увидишь, обращайся объясню!
 

Gaaarfild

Member
Регистрация
26.03.2008
Сообщения
19
Первый подводный камень. У меня они в файл записываются не структурированно с переновами. А просто один за другим.
Код:
$tootch="<CENTER>
<table border='1' width=60%>
  <TR>
	<TD width=10%>
<B><CENTER><h1>$num</h1></center></b>
	</td>
	<TD width=90%>
$message
	</td>
  </tr>
</table>
</center><!--00000000000000000000000000000000-->  ";



$fr = fopen("base.tru", "a+");
fwrite($fr, "$tootch");
fclose($fr);
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Во первых в текстовых файлах хранят тока текст и никакого HTML, его используем при выводе!
base.txt
Код:
1|текст новости1|дата
2|текст новости2|дата
3|текст новости3|дата
Одна новость в одной строке!!! И вообще файлы для этого не годятся, тут лучше БД
Если хотите сделать более правдоподобное тут надо изучать регулярные выражения

Чтобы разбить по переменным делаем так
Код:
$file = file(base.txt);
foreach($file as $key=>$value)
{
  $value = trim($value);
  $array = explode("|", $value);
?>
id - <?=$array[0]?><br>
Новость - <?=$array[1]?><br>
Дата - <?=$array[2]?><br><br>
<?
}
 

Gaaarfild

Member
Регистрация
26.03.2008
Сообщения
19
А как сделать, чтобы при записи в файл, он строчки переносил?
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
В каждой добавляемой строке в конце должен стоять знак переноса строки \n
То есть
Код:
$str = "1|новость1|дата\n";
Вот пример, разбири
http://ru2.php.net/manual/ru/function.fwrite.php
 

Gaaarfild

Member
Регистрация
26.03.2008
Сообщения
19
Я просто в процессе изучения пока. И проблема в том, что я не пойму, как ты в своем коде разделил на строчки. Я имею ввиду, при извлечении.
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Я просто в процессе изучения пока. И проблема в том, что я не пойму, как ты в своем коде разделил на строчки. Я имею ввиду, при извлечении.
Не очень понял твоего вопроса, попробую отгадать...

Если у тебя дан файл вида
Код:
сообщение 1
сообщение 2
сообщение 3
То есть такие функции как fopen и file
fopen() - возвращает ресурс в данном случае файл.
file() записывает ресурс построчно в массив
Код:
$file = fopen("file.txt"); //считываем файл
$str = file($file); //Записываем построчно каждую строку в массив
/*
Теперь в $str
$str[0] = "сообщение 1\n";
$str[1] = "сообщение 2\n";
$str[2] = "сообщение 3\n";
Где \n перенос строки(пробельный символ), убирается с помощью функции str_replace();
*/
Если у тебя дан файл вида
Код:
Фамилия|Имя|Отчество|Дата рождения
То есть такие функции как explode и implode
explode() - Разделяет объект по разделителю
implode() - Соединяет объект по разделителю
Код:
$file = fopen("file.txt"); //считываем файл
$str = file($file); //Записываем построчно каждую строку в массив
$array = explode("|", $str[0]);
/*
Теперь в $array
$array[0] = "Фамилия";
$array[1] = "Имя";
$array[2] = "Отчество";
$array[3] = "Дата рождения\n";
Где \n перенос строки(пробельный символ), убирается с помощью функции str_replace();
*/
 

Gaaarfild

Member
Регистрация
26.03.2008
Сообщения
19
Я просто в процессе изучения пока. И проблема в том, что я не пойму, как ты в своем коде разделил на строчки. Я имею ввиду, при извлечении.
Не очень понял твоего вопроса, попробую отгадать...

Если у тебя дан файл вида
Код:
сообщение 1
сообщение 2
сообщение 3
То есть такие функции как fopen и file
fopen() - возвращает ресурс в данном случае файл.
file() записывает ресурс построчно в массив
Код:
$file = fopen("file.txt"); //считываем файл
$str = file($file); //Записываем построчно каждую строку в массив
/*
Теперь в $str
$str[0] = "сообщение 1\n";
$str[1] = "сообщение 2\n";
$str[2] = "сообщение 3\n";
Где \n перенос строки(пробельный символ), убирается с помощью функции str_replace();
*/
Если у тебя дан файл вида
Код:
Фамилия|Имя|Отчество|Дата рождения
То есть такие функции как explode и implode
explode() - Разделяет объект по разделителю
implode() - Соединяет объект по разделителю
Код:
$file = fopen("file.txt"); //считываем файл
$str = file($file); //Записываем построчно каждую строку в массив
$array = explode("|", $str[0]);
/*
Теперь в $array
$array[0] = "Фамилия";
$array[1] = "Имя";
$array[2] = "Отчество";
$array[3] = "Дата рождения\n";
Где \n перенос строки(пробельный символ), убирается с помощью функции str_replace();
*/
Смотри. А вот во втором коде, при переходе на следующую строчку, фамилия-2 будет в переменной $array[4] ?
 

ZitosS_32

Совесть
Регистрация
12.03.2006
Сообщения
852
Нет!
Смотри, функция file() разбивает файл построчно, значит каждая строка $param[индекс]
А функция explode() разбивает строку по разделителю.
Значит тебе надо будет обрабатываать каждую строчку в цикле

Код:
foreach($str as $key => $value)
{
   $array = explode("|", $value);
   print_r($array);
}
 
Статус
Закрыто для дальнейших ответов.
Верх Низ