Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: вопрос по органичению доступа
 
 автор: Blondy   (27.05.2010 в 21:38)   письмо автору
 
 

Доброго времени.
У меня возник небольшой вопрос, но в него упёрлась моя дальнейшая работа- у меня есть страничка, на ней пользователь (зарегистрированный) может сделать заказ, то есть заполняет поля и жмёт кнопку "заказать", после чего всё что заносилось в поля- записывается в мою бд.
И вот вопрос- как сделать вот такое: не зарегистрированный пользователь (гость) может смотреть эту страничку, но! При нажатии на кнопку "заказать" будет высвечиваться сообщение "зарегистрируйтесь и тд и тп", или же вообще не показывать ему форму, а на странице просто писать "на этой странице- форма заказа, она вам не доступна".
Уполяю, подскажите, что и как сделать?

Привожу часть кода странички:

<table width="40%">
  <tr>
    <td width="35%">Вы вошли как:</td>
    <td><?php
$log1
=$_SESSION['i'];
echo 
$log1;
?></td>
  </tr>
</table>    
<form action=zakazat.php method=post>
<input type=hidden name=action value=post>
<fieldset>
<legend>Выберите название системы для вашего заказа</legend><br>
<input type=text name=sis value='<? echo $myrow['sis']; ?>'>
</fieldset>
<fieldset>
Ваши дополнительные предпочтения к заказу:
<input type=text name=dop value='<? echo $myrow['dop']; ?>'>
<p>
Дата подачи заказа в формате гггг-мм-дд:
<input type=text name=date value='<? echo $myrow['date']; ?>'>
<p>Ввведите свою контактную информацию:
<input type=text name=kontact value='<? echo $myrow['kontact']; ?>'>
<input type="submit" value="заказать" /> 
</fieldset>
</form>

  Ответить  
 
 автор: Slo_Nik   (27.05.2010 в 21:57)   письмо автору
 
   для: Blondy   (27.05.2010 в 21:38)
 

используйте сессии($_SESSION)
Вот для начала

  Ответить  
 
 автор: Blondy   (27.05.2010 в 22:18)   письмо автору
 
   для: Slo_Nik   (27.05.2010 в 21:57)
 

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

  Ответить  
 
 автор: Рома   (27.05.2010 в 22:58)   письмо автору
 
   для: Blondy   (27.05.2010 в 22:18)
 

if (пользователь авторизован) 
{
  показываем страничку или ссылку

else 
{
  не показываем или выводим страничку с предупреждающим сообщением

  Ответить  
 
 автор: Tonik992   (27.05.2010 в 23:45)   письмо автору
 
   для: Blondy   (27.05.2010 в 22:18)
 

Вопросы не бывают глупыми.. Бывают лишь ответы глупыми ))
Ты говорил, у тебя уже есть сессия? Имя пользователь и пароль? ЗНачит, у гостя нет этих переменных... Вот, пробуй делать проверку.. Если сессия актив - можно разрешить заказ... Если неактив - пользователь неавторизирован, делаем запрет на регистрацию..

  Ответить  
 
 автор: Blondy   (28.05.2010 в 11:01)   письмо автору
 
   для: Tonik992   (27.05.2010 в 23:45)
 

Спасибо огромное за подсказку!)
Я исходя из логики, что при входе- либо пользователь заполняет поле login либо нет делаю примерно вот такую конструкцию:

<?php

$log 
mysql_real_escape_string($_POST['login']);
$pas mysql_real_escape_string($_POST['password']);
$result1 =mysql_query("SELECT * FROM `users` WHERE login = '$log'",$gb);
if 
$log == ("")
$log = ("Гость"
$_SESSION['i']=$log

?>


Но что-то видимо недопонимаю потому что ничего не работает. А логика вроде простая- если в поле login пустая строка (нет ввода логина) - то это гость, значит будет передаваться по сесси- "гость" и потом я буду уже запрещать именно гостю смотреть страничку... я надеюсь.

  Ответить  
 
 автор: Valick   (28.05.2010 в 11:12)   письмо автору
 
   для: Blondy   (28.05.2010 в 11:01)
 

зачем делать запрос к базе, если поле логин не заполнено?

  Ответить  
 
 автор: Blondy   (28.05.2010 в 11:14)   письмо автору
 
   для: Valick   (28.05.2010 в 11:12)
 

То есть поместить проверку перед выборкой из БД?

  Ответить  
 
 автор: Valick   (28.05.2010 в 11:22)   письмо автору
 
   для: Blondy   (28.05.2010 в 11:01)
 

<?php
session_start
();
if (isset(
$_POST['login']) && isset($_POST['password']) ){
$log=$_POST['login'];
$pas=$_POST['password'];
...........
обработка переменных $log $pas...........
$result1 =mysql_query("SELECT * FROM `users` WHERE login = '".$log."' AND password='".$pas."'",$gb);
..........
обработка результата запроса.........

}else{
$_SESSION['i']="Гость";
}
?>

примерно

  Ответить  
 
 автор: Blondy   (28.05.2010 в 11:54)   письмо автору
 
   для: Valick   (28.05.2010 в 11:22)
 

Спасибо вам! всё получилось чудесным образом.
Но что-то соображалки у меня не хватает почему не работает последнее- теперь я с сессией передаю "гость" и мне надо ограничить его права- то есть на страничке (привожу ниже) нужно для него написать сообщение, а для зарегистрированного- всё полностью. Не подскажите, что у меня неверно?

    <table width="40%">
  <tr>
    <td width="35%">Вы вошли как:</td>
    <td><?php

$log1
=$_SESSION['i'];
echo 
$log1;
?></td>
  </tr>
</table>

<?php
if (($_SESSION['i']) == ("Гость")) do {
printf ("

Вы ещё не зарегистрированный пользователь, поэтому у вас нет права оформлять заказы.
Вы можете просмотреть и изучить уже выполненные нами заказы.<P>
    На данной странице >> <a href="
wipzakazi.php">Выполненные заказы</a> ");
}
?>
<form action=zakazat.php method=post>
<input type=hidden name=action value=post>
<fieldset>
<legend>Выберите название системы для вашего заказа</legend><br>
<input type=text name=sis value='<? echo $myrow['sis']; ?>'>
</fieldset>
<fieldset>
Ваши дополнительные предпочтения к заказу:
<input type=text name=dop value='<? echo $myrow['dop']; ?>'>
<p>
Дата подачи заказа в формате гггг-мм-дд:
<input type=text name=date value='<? echo $myrow['date']; ?>'>
<p>Ввведите свою контактную информацию:
<input type=text name=kontact value='<? echo $myrow['kontact']; ?>'>
<input type="submit" value="заказать" /> 
</fieldset>

</form>

<p>
        <?php

?>
        <?
    
if (!empty($error)) 
    {
        print 
"<P><font color=green>Во время добавления записи произошли следующие ошибки: </font></P>\n";
        print 
"<UL>\n";
        print 
$error;
        print 
"</UL>\n";
    }
    
?>
    Так же вы можете просмотреть и изучить уже выполненные нами заказы.<P>
    На данной странице >> <a href="wipzakazi.php">Выполненные заказы</a>

  Ответить  
 
 автор: Tonik992   (28.05.2010 в 11:56)   письмо автору
 
   для: Blondy   (28.05.2010 в 11:54)
 

То есть, ты хочешь, чтобы для гостя вывелось сообщение и все? Попробуй в конце этого сообщения вызвать функцию exit();
Кстате, а что это за синтаксис такой?
if (($_SESSION['i']) == ("Гость")) do {
printf ("

Вы ещё не зарегистрированный пользователь, поэтому у вас нет права оформлять заказы.
Вы можете просмотреть и изучить уже выполненные нами заказы.<P>
    На данной странице >> <a href="wipzakazi.php">Выполненные заказы</a> ");


откуда do ??
всё проще:
if (($_SESSION['i']) == ("Гость")) {
printf ("

Вы ещё не зарегистрированный пользователь, поэтому у вас нет права оформлять заказы.
Вы можете просмотреть и изучить уже выполненные нами заказы.<P>
    На данной странице >> <a href="wipzakazi.php">Выполненные заказы</a> ");
exit();

  Ответить  
 
 автор: neadekvat   (28.05.2010 в 11:59)   письмо автору
 
   для: Tonik992   (28.05.2010 в 11:56)
 

if (($_SESSION['i']) == ("Гость"))
и скобок дофига слишком.

Зачем exit? Разметка страницы должна выходить до конца. Последний тэг на странице - </html> а значит никаких exit при обычном выводе информации быть не может.

  Ответить  
 
 автор: Tonik992   (28.05.2010 в 12:03)   письмо автору
 
   для: neadekvat   (28.05.2010 в 11:59)
 

Ну а разве кто-то мешает сделать
exit("....</html>); =)

  Ответить  
 
 автор: Blondy   (28.05.2010 в 12:08)   письмо автору
 
   для: Tonik992   (28.05.2010 в 12:03)
 

Конструкции у меня, признаюсь, корявые) потому что учусь и кто что подсказывает- сразу делаю и потом уже по памяти использую.

И что-то у меня результат пока не поменялся. вот код:

<?php if (($_SESSION['i']) == ("Гость")) {
printf ("

Вы ещё не зарегистрированный пользователь, поэтому у вас нет права оформлять заказы.
Вы можете просмотреть и изучить уже выполненные нами заказы.<P>
    На данной странице >> <a href="
wipzakazi.php">Выполненные заказы</a> ");

}   
exit ();
?>


Но у меня выдаёт ошибку : Parse error: syntax error, unexpected T_STRING in Z:\home\mysite\www\zakazat.php on line 116

а на 116 строке у меня

 На данной странице >> <a href="wipzakazi.php">Выполненные заказы</a> ");


Что-то я совсем видимо путаюсь)

  Ответить  
 
 автор: Valick   (28.05.2010 в 12:13)   письмо автору
 
   для: Blondy   (28.05.2010 в 12:08)
 

несколько неудачный выбор для обучения, на самом деле авторизация очень сложная штука, хотя без нее никак.
прикрепите файл целиком, я посмотрю
а в это время если не трудно зарегайтесь в игре http://www.talesofmagic.ru/?c=1&u=320060328
с моим рефером, мне за это бабок дадут почуть... хочу себе крысу купить:)

  Ответить  
 
 автор: Blondy   (28.05.2010 в 12:30)   письмо автору
4.3 Кб
 
   для: Valick   (28.05.2010 в 12:13)
 

Мда, к сожалению как раз с ней я и сталкиваюсь сейчас и смерти подобно)

ps А друга кого указывать?)

  Ответить  
 
 автор: Valick   (28.05.2010 в 12:31)   письмо автору
 
   для: Blondy   (28.05.2010 в 12:30)
 

ps А друга кого указывать?)
а фиг его знает, че-то мутят они там))

  Ответить  
 
 автор: neadekvat   (28.05.2010 в 12:23)   письмо автору
 
   для: Tonik992   (28.05.2010 в 12:03)
 

Откуда вы можете знать, сколько там еще ниже будет html кода? А если это вообще mvc, то как вообще модуль может прекращать работу всего сайта?
Вполне можно обойтись без радикальных выходов() и смертей()

пусть $access - это флаг доступа
<?php
<!-- Любая верстка -->
if (
$access) {
    include 
'for_access.php';
} else {
    include 
'sorry.php';
}
<!-- 
Остальная верстка -->

  Ответить  
 
 автор: Blondy   (29.05.2010 в 15:05)   письмо автору
 
   для: neadekvat   (28.05.2010 в 12:23)
 

простите, а как мне обозначить раньше этот флаг доступа? и можно ли на него "повесить" отделение прав гостя от пользователя?

  Ответить  
 
 автор: neadekvat   (29.05.2010 в 15:49)   письмо автору
 
   для: Blondy   (29.05.2010 в 15:05)
 

Флаг не обязательно должен содержаться в переменной $access)
Можно, например, просто проверять, залогинен ли пользователь или нет. Все зависит от реализации

  Ответить  
 
 автор: Blondy   (29.05.2010 в 16:14)   письмо автору
 
   для: neadekvat   (29.05.2010 в 15:49)
 

А если например я уже даже умудрилась делать, как выложила раньше, по сесси- либо пользователь либо гость ?)
простите что мучаю, просто никак не могу понять как же всё-таки сделать) Вроде и пыталась, тоже как выложила, сделать по if - else , но что-то не работает

  Ответить  
 
 автор: neadekvat   (29.05.2010 в 16:18)   письмо автору
 
   для: Blondy   (29.05.2010 в 16:14)
 

Смотрите, допустим, в $_SESSION['group'] хранится, к какой группе относятся пользователи, пусть 0 - это общий доступ, 1 - для тех, кто может просматривать скрытую информацию
И тогда в тот код что я выше показал
<?php 
<!-- Любая верстка --> 
if (
$_SESSION['group'] ) { 
    include 
'for_access.php'// скрытая информация
} else { 
    include 
'sorry.php'// открытая информация

<!-- 
Остальная верстка -->


Либо, если всем залогиненым можно просматривать скрутю инфу, то просто напросто при успешной аутентификации в переменную $access записывайте булевое значение true и можно будет использовать вышеприведенный на пару постов код без изменений.
Если аутентификация прошла неуспешно, или ее нет, объявляйте $access как false.

  Ответить  
 
 автор: Blondy   (29.05.2010 в 17:14)   письмо автору
 
   для: neadekvat   (29.05.2010 в 16:18)
 

Спасибо огромное) кажется- дошло.
Только не слишком поняла- вот представленный вами код нужно в каком файле чтобы хранился?
К примеру- у меня теперь две странички - одна для пользователей чтоб показывать, другая- для гостей. И соответственно страница входа вообще на сайт. На сколько я предполагаю- этот код надо на страничку входа?

  Ответить  
 
 автор: neadekvat   (29.05.2010 в 17:38)   письмо автору
 
   для: Blondy   (29.05.2010 в 17:14)
 

Да, можно и на эту страницу, ниже кода авторизации

  Ответить  
 
 автор: Blondy   (29.05.2010 в 18:43)   письмо автору
 
   для: neadekvat   (29.05.2010 в 17:38)
 

Спасибо огромнейшее- чудо свершилось!!!!))

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования