|
|
|
| Как можно сделать, чтобы после регистрации нового пользователя и при выходе на этот сайт не надо было выполнять вход вводя пароль и логин. И было разделение на модераторов, администраторов и простых юзеров. | |
|
|
|
|
|
|
|
для: tokmak
(13.02.2007 в 13:54)
| | Хранить данные авторизации в куках а статус в БД | |
|
|
|
|
|
|
|
для: Loki
(13.02.2007 в 15:20)
| | Я в базе данных создал статус юзер. А как с помощью сессии и cookies можно сделать авторизацию. Хотя бы на примере. Или может темка была подобная. Ввобще как оно должно происходить. Вот например новый пользователь регистрируется. При последнем этапе регистрации его данные заносятся в БД и на компьютер автоматически отправляется куки и автоматически происходит ссесия.
В общем вопросики такие: 1) Как создать куки с именем пользователя и праолем
2) как осуществить условие "если user не зарегистрирован, то писать например здравствуй гость; если user зарег. и его статус пользователь, то писать здравствуй $user ваш статус пользователь; если user зарег. и его статус модератор или админ, то писать соответсвенно понятно.
Я приблизительно знаю что куки создается с помощью функции setcookies() Хотелось бы узнать ответы на мои вопросы. | |
|
|
|
|
|
|
|
для: tokmak
(13.02.2007 в 16:09)
| | Ну про помогите я просто с куками и ссесиями не работал. Хотя бы скажите на что надо ориентрироваться. Ну хотя бы так можно написать. Если ты не зарег. то пишет привет гость; если ты зарег. то пишет привет $name. если ты покинул сайт, а затем вернулся например через час, то авторизация не нужна. Плизз помогите очень нужно. Я пишу пишу один только ответил. а что-то больше никто. | |
|
|
|
|
|
|
|
для: tokmak
(13.02.2007 в 16:43)
| | Если делать с куками, то можно написать например
setcookie("name",$_REQUEST['name'])
|
Здесь у нас имя отправленное из формы, отправляется в куки, но только до закрытия браузера. Чтобы на долго запомнить куки, нужно еще время указать, но я не помню как его указывать надо
Потом чтобы узнать, зарегистрировался ли раньше пользователь или нет, нужно проверить куки на существование. Если куки с именем 'name' не существует то выводим допустим - Привет гость, если куки существует то выводим например - Привет $_COOKIE['name']
Вот возможо так будет выглядеть
<?
if(!isset($_COOKIE['name']))
{
?>
Привет <b>Гость</b>
<form action="" method=post>
<input type=text name='name'>
<input type=submit name="doGo">
</form>
<?
}
else echo "Привет <b>".$_COOKIE['name']."</b>";
?>
<?
if(isset($_REQUEST['doGo']))
{
setcookie("name",$_REQUEST['name'],time()+3600); # Запомнили куки на час
}
?>
|
Скрипт не проверял. Находу написал.
Посмотри, авось работает =) | |
|
|
|
|
|
|
|
для: Sl
(13.02.2007 в 17:29)
| | Что-то не хочет работать пишет
Warning: Cannot modify header information - headers already sent by (output started at z:\home\www.agnet.ru\www\in.php:10) in z:\home\www.agnet.ru\www\in.php on line 17
|
что это может быть? Заранее спасибо. Жду ответа. | |
|
|
|
|
|
|
|
для: tokmak
(13.02.2007 в 20:06)
| | > ...headers already sent by...
Перед выставлением куков или юзанием header(), НИЧЕГО не должно выводиться в браузер.
в вашем случае вы что-то выводите на 17 строке, скрипта in.php | |
|
|
|
|
|
|
|
для: Sl
(13.02.2007 в 17:29)
| | Разве if так рвать можно? | |
|
|
|
|
|
|
|
для: Whi-teOoS
(13.02.2007 в 20:19)
| | Ну исходя из данного кода написанный Sl как я вижу никакого вывода нет. setcookie() это же не вывод, вы сами это знаете. А больше я ничего не изменял. Ну конечно пробовал, но все равно тоже самое выходило сообщение, с помощью include тоже самое. Whi-teOoS ты бы сам как поступил в данном случае, может быть ты предложишь свой вариант. | |
|
|
|
|
|
|
|
для: tokmak
(13.02.2007 в 20:25)
| | я бы if рвать не стал
<?
if(!isset($_COOKIE['name']))
{
echo("Привет Гость
<form method=post>
<input type=text name=\'name\'>
<input type=submit name=\"doGo\">
</form> ");
}
else echo "Привет <b>".$_COOKIE['name']."</b>";
if(isset($_POST['name']))
{
setcookie("name",$_POST['name'],time()+3600); # Запомнили куки на час
}
?>
|
| |
|
|
|
|
|
|
|
для: tokmak
(13.02.2007 в 20:25)
| | Интересно... а - это не вывод? | |
|
|
|
|
|
|
|
для: Trianon
(13.02.2007 в 20:30)
| | Whi-teOoS ты проверял свой скрипт? Он вообще пишет всегда "привет гость". | |
|
|
|
|
|
|
|
для: tokmak
(13.02.2007 в 20:35)
| | во первых код не мой, а во вторых
<?
error_reporting(E_ALL);
if(isset($_POST['fname']))
{
setcookie("name",$_POST['fname'],time()+3600,"/"); # Запомнили куки на час
}
if(!isset($_COOKIE['name']) || !isset($_POST['fname']))
{
echo("<HTML>
<BODY>
Привет Гость
<form action=\"\" method=\"post\">
<input type=text name=\"fname\">
<input type=submit value=\"send\">
</form>
</BODY>
</HTML>");
}
else
{
echo "Привет <b>".$_COOKIE['name']."</b>";
}
?>
|
П.С. незабудте обновить страницу. | |
|
|
|
|
|
|
|
для: Whi-teOoS
(13.02.2007 в 20:59)
| | Попробовал и этот код. Все равно пишет
Warning: Cannot modify header information - headers already sent by (output started at z:\home\www.agnet.ru\www\in.php:2) in z:\home\www.agnet.ru\www\in.php on line 6
Привет гость
поле и кнопка
|
Whi-teOoS он выдает эту ошибку и пишет привет гость. что-то не то, а случайно в php.ini не надо ничего менять. И как раз на линии 6 раположен код
setcookie("name",$_POST['fname'],time()+3600,"/"); # Запомнили куки на час
|
Ничего не пойму, что ему теперь нужно. | |
|
|
|
|
|
|
|
для: tokmak
(13.02.2007 в 21:14)
| | Такие вещи как header(), setcookie(), session_***() и некоторые другие ТРЕБУЮТ, чтобы они вызывались ДО любого вывода вроде echo, print и даже лишних пробелов перед <?php
Так что проверьте свой скрипт на отсутствие таковых мест, у вас ошибка именно на такое и указывает
Или в крайнем случае в самом начале ставьте
ob_start();
а в самом конце
ob_end_flush();
Так этих ошибок не будет | |
|
|
|
|
|
|
|
для: bronenos
(13.02.2007 в 21:39)
| | Кстати,вопрос на тему "Убить куки -2".Вот аборигены сьели куки,а у меня ну никак...Вроде все просто до омерзения-ссылка "Выход" перекидывает на exit.php,код которого начинается как
<?php
setcookie('name','',1000);
setcookie('name')...
| .Ну никак не хотят умирать,собаки :( | |
|
|
|
|
|
|
|
для: Ralph
(14.02.2007 в 00:01)
| | Никакого вывода перед ними,как видите-нет,а если бы и прокрался левый символ,то на период тестирования я всегда выставляю E_ALL.Может,это как-то связано с тем,что я работаю через OperaMini ? ( time()-чего то не предлагать-не помогает :) ) Жду Ваших мнений... | |
|
|
|
|
|
|
|
для: Ralph
(14.02.2007 в 00:07)
| | tokmak, когда писал не поленился, проверил, все работает, вероятно как указал Броненос у вас перед <?php стоят "лишние" символы, потому как строка на которую вы указали не 6 а 5.
Ralph, под оперой у меня куки мрут только после
setcookie("current_user",$_COOKIE['current_user'],time() - 6356800,"/",false);
|
| |
|
|
|
|
|
|
|
для: Whi-teOoS
(14.02.2007 в 00:22)
| | Whi-teOoS , в принцепи код заработал, ошибка была в том, что и в правду не надо делать лишних символов. У меня строка <?php начиналась со второй строки. Поднял на первую и скрипт заработал. мне теперь осталось сделать разделение на пользователей, модераторов и администраторов. Это скорее всего и будет проверка с помощью БД. А чтобы посетитель мог спокойно ходить по страницам то что нужно писать session_start() и все или нет? | |
|
|
|
|
|
|
|
для: tokmak
(14.02.2007 в 09:30)
| | Посмотрите пожалуста вот этот код.
<?
include("config.php");
if (isset($_COOKIE['name'])) {
echo "Привет <b>".$_COOKIE['name']."</b>";
$cook = $_COOKIE['name'];
mysql_connect($hostname,$login,$password, $db) or die("No connect");
mysql_select_db("$db") or die("No select DB");
$query="select * from authors where name like '$cook%' AND statususer like '$statususer%'";
$result=mysql_query($query);
$i=0;
$user_name=mysql_result($result,$i,"statususer");
if ($user_name == 2) {
echo("Ваш статус админ"); } else { echo("Ваш статус пользователь"); }
} else
{
error_reporting(E_ALL);
if(isset($_POST['fname'])) {
if (isset($cook)) { setcookie("name"); }
setcookie("name",$_POST['fname'],time()+3600,"/"); # Запомнили куки на час
}
if(!isset($_COOKIE['name']) || !isset($_POST['fname']))
{
echo("<HTML>
<BODY>
Привет Гость
<form action=\"\" method=\"post\">
<input type=text name=\"fname\">
<input type=submit value=\"send\">
</form>
</BODY>
</HTML>");
}
else
{
echo "Привет <b>".$_COOKIE['name']."</b>";
}
}
?>
|
Кто нибудь может написать скрипт типо этого, чтобы происходило сравнение если в бд статус например 2, то писать привет админ имя, если например 1 то привет пользователь имя
В общем чтобы голову не морочить никому, пример такой "как на данном форуме существует при открытии этого форумма он мне сразу пишет привет токмак. Но еще плюс нужно чтобы писало статус пользователь, а кто админ или модератор писал соответсвующее. Может у кого есть готовый или в моем что-то можно изменить, а то че то ни как не вьеду. | |
|
|
|
|
|
|
|
для: tokmak
(14.02.2007 в 12:29)
| | Люди подскажите пжалуста. Loki <<Хранить данные авторизации в куках а статус в БД
Вот насчет этого я и прошу показать хотя бы примерно. | |
|
|
|
|
|
|
|
для: tokmak
(14.02.2007 в 12:45)
| | Либо никто не знает на мой вопрос ответ, либо знает не не хочет отвечать, либо просто не хочет думать, либо никого на форуме нет. cheops может ты знаешь как поступить с данным скриптом. Как сделать чтобы он работал? я всего лишь несколько месяцев изучаю PHP многое уже запомнил и усвоил, но с этой темой беда какая-то, хотя можети не беда, просто если знаешь это то и легко сделать. Уже кучу скачал книг и справочников. Может кто-нибудь ответит мне. Плиз. | |
|
|
|
|
|
|
|
для: tokmak
(14.02.2007 в 12:29)
| |
<?
$statuses=array(0=>"гость", 1=>"юзер", 2=>"админ");
$status=0;
if ($_SERVER['REQUEST_METHOD']=="POST")
{
if (!get_magic_quotes_gpc())
{
$name=mysql_escape_string($_POST['name']);
$pass=mysql_escape_string($_POST['pass']);
}
else
{
$name=$_POST['name'];
$pass=$_POST['pass'];
}
$result=mysql_query("SELECT user_status FOM users WHERE login='$name' AND pass='$pass'");
if (mysql_num_rows($result)==1)
{
$status=mysql_result($result, 0);
}
}
echo "Привет ".$statuses[$status]." ".$_POST['name'];
|
| |
|
|
|
|
|
|
|
для: Loki
(14.02.2007 в 13:15)
| | В общем я постараюсь объяснить свой вопрос. Можно ли так сделать
При открытии страницы index.php если посетитель не зарегистрирован Вы ходит строка «привет гость» если посетитель зарегистрирован то пишет «привет $name – ваш статус пользователь, модератор, администратор».
Ни как я не пойму.
Ну вот например на всех форумах так есть, есть и свои ограничения.
Может тогда кто нибудь может сбросить ссылку или файл как писать форумы или Интернет-магазины доски объявлений.
Или может уроки какие-нибудь есть по данной тематике.
Спасибо за прочтение моей большущей теме. Заранее спасибо за ответ. Жду. | |
|
|
|
|
|
|
|
для: tokmak
(14.02.2007 в 13:31)
| | в таблице пользователей проставляется статус пользователя, либо принадлежность к группе. Если используются группы, то права доступа проставляются для группы, а если нет, то для статусов (или даже для отдельных пользователей, но это реже). | |
|
|
|
|
|
|
|
для: tokmak
(14.02.2007 в 13:31)
| | tokmak, ты хочешь целый форум написать ? =) | |
|
|
|
|
|
|
|
для: Sl
(14.02.2007 в 13:47)
| | Sl, нет я изучаю язык php чтобы затем писать какие-либо web-приложения. А про учебники я написал потому что в тех же форумах так и так используются эти функции, скорее всего там и написанно как правильнос ними работатть. Ну что нету, да? Если можете обьясните на примере. как это работает. | |
|
|
|
|
|
|
|
для: tokmak
(14.02.2007 в 13:53)
| | Loki может ответишь на мой вопрос | |
|
|
|
|
|
|
|
для: tokmak
(14.02.2007 в 15:05)
| | Я уже написал выше примерный вариант.
вообще структура примерно такая:
если в сессии хранится имя и статус пользователя - выводим приветствие
в противном случае - проверяем куки. Если куки есть - скармливаем то, что в них лежит функции проверки подлинности. Если проверка прошла успешно - помещаем эти данные в сессию и выводим приветствие.
если же все вышеописанное не произошло то выводим форму для логина.
если форма отправлена - передаем данные из нее функции проверки подлинности. Если проверка прошла успешно - помещаем эти данные в сессию и выводим приветствие.
Все. Вся наука. | |
|
|
|
|
|
|
|
для: Loki
(14.02.2007 в 16:44)
| | Можно узнать что это за ошибка.
Warning: mysql_result() [function.mysql-result]: Unable to jump to row 0 on MySQL result index 7 in z:\home\www.agnet.ru\www\sc2.php on line 19
|
| |
|
|
|
|
|
|
|
для: tokmak
(14.02.2007 в 18:56)
| | Вы пытаетесь извлечь не существующую запись. Для предотвращения такой ошибки удобно воспользоваться функцией mysql_num_rows();
<?php
$test = mysql_query($query);
if(mysql_num_rows($test) > 0) echo mysql_result($test);
?>
|
Источник: MYSQL5 в подлиннике. Кузнецов. Сидянов. из-во BHV стр.861 | |
|
|
|
|
|
|
|
для: alek_chita
(15.02.2007 в 15:33)
| | лучше
f(mysql_num_rows($test) == 0)
|
| |
|
|
|
|
|
|
|
для: Loki
(15.02.2007 в 16:53)
| | А вы не могли бы составить код по моей проблеме? | |
|
|
|
|
|
|
|
для: tokmak
(15.02.2007 в 16:56)
| | Я тоже только начинаю изучать сессии и куки, поэтому не уверен, в правильности, те не менее попробуйте:
пароль в базе лучше хранить зашифрованным ассиметричным методом (MD5 например) и посылать пользователю хеш отпечаток.
<?php
if(isset($_COOKIE))
{
name = mysql_escape_string($_COOKIE['name']);
pass = mysql_escape_string($_COOKIE['pass']);
mysql_connect($hostname,$login,$password, $db) or die("No connect");
mysql_select_db("$db") or die("No select DB");
$query = "SELECT status FROM authors WHERE name = ".$name." AND pass = ".$pass;
$stat = mysql_query($query);
if(mysql_num_rows($stat) > 0) $status = mysql_result($stat,0); else $status = 'Гость';
echo "Привет, $name! Ваш статус $status";
?>
|
Сессии подделать сложнее намного, но и их можно проверить | |
|
|
|
|
|
|
|
для: alek_chita
(15.02.2007 в 18:16)
| | Спасибо что ответили. Можно ли считать с последнего столбца бд строку.
Например таким образом.
$query = "SELECT * FROM `authors` WHERE `statususer`'";
$stat = mysql_query($query);
$status = mysql_result($stat,0);
|
Мне нужно чтобы происходило сравнение. Такого типа.
if ($status = "admin") { скрипт }
|
Просто у меня в БД есть строки в последнем столбце у меня существует строка admin. А как сравнить. равна ли она данной. | |
|
|
|
|
|
|
|
для: tokmak
(15.02.2007 в 19:03)
| | Вопрос какой-то запутанный. Приведите листинг создания таблицы. | |
|
|
|
|
|
|
|
для: alek_chita
(16.02.2007 в 08:06)
| | Вот код SQL создание таблицы
CREATE TABLE authors (
id_author int(6) NOT NULL auto_increment,
name text,
passw text,
email text,
url text,
icq text,
about text,
photo text,
time datetime default NULL,
last_time datetime default NULL,
themes text,
statususer text,
PRIMARY KEY (id_author)
) TYPE=MyISAM;
|
В этом столбце у меня существует запись admin
statususer text,
|
в этом столбце и пользователя.
Нужно сравнить если кук существет то проверить к какому классу(типу) отсносится пользователь и писать привет $name Ваш статус $statususer или Привет гость ваш статус $statususer. ; $statususer должна иметь несколько значений. Как можно сделать. | |
|
|
|
|
|
|
|
для: tokmak
(16.02.2007 в 11:48)
| |
<?php
$query = "SELECT statususer FROM authors WHERE name = $name AND pass = $pass";
$stat = mysql_query($query);
if($stat) $status = mysql_result($stat, 0); else exit(mysql_error());
echo "Привет $name твой статус $status";
?>
|
Или если вы хотите выполнять что-то если $status = 'админ' вместо echo пишите:
<?php
if($status == 'админ')
{
// Выполнение нужных операторов
}
?>
|
| |
|
|
|
|
|
|
|
для: alek_chita
(18.02.2007 в 17:14)
| | Спасибо всем за ответы я разработал код который мне нужен. | |
|
|
|