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

Форум PHP

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

 

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

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

тема: Информация о пользователе
 
 автор: Roo$   (09.08.2006 в 22:32)   письмо автору
 
 

У вас на форуме есть графа АВТОР. Щелкнув по ней открывается окно с информацией о пользователе. Как это выпросчитываете, что именно этому пользователю соответствует данная информация? Я хочу у себя в гостевой сделать тоже типо этого. Помогите мне пожалуйсто.

   
 
 автор: kasmanaft   (09.08.2006 в 22:34)   письмо автору
 
   для: Roo$   (09.08.2006 в 22:32)
 

у каждого автора есть свой идентификационный номер, который в данном случае методом GET передается скрипту-обработчику ... этот скрипт исходя из полученного id выводит информацию о конкретном пользователе
http://softtime.ru/forum/info.php?id_forum=1&id_author=3865

   
 
 автор: Roo$   (09.08.2006 в 22:49)   письмо автору
 
   для: kasmanaft   (09.08.2006 в 22:34)
 

а id получает он (автор) при регестрации на сайте и хронится в куках? Так ведь?

   
 
 автор: kasmanaft   (09.08.2006 в 22:59)   письмо автору
 
   для: Roo$   (09.08.2006 в 22:49)
 

да, в большенстве случаев это auto_increment поле базы данных ... то есть при добавлении в базу новых данных, значение увеличивается на один автоматически ... ну, можно сказать, это порядковый номер пользователя ... здесь так и написано "Порядковый номер"

а хранится он не обязательно в куках .. там его даже может и не быть ... пригенерации страницы для каждого автора из базы данных выбирается его id, который помещается в сцылку
<a class=authorreg href=info.php?id_forum=1&id_author=3865>Roo$</a>
ну важно тут только "id_author=3865"

ведь посмотреть инфу о пользователе может не только зарегистрированный участник (так и хочется "учаснег" написать =)) - это я о куках .. они тут ни причем ...

зы: а вообще, здесь, на форуме, все сообщения хранятся в базе данных .. для каждого сообщения известен id написавшего его пользователя .. который собсно и подставляется в ссылку.

   
 
 автор: Roo$   (09.08.2006 в 23:19)   письмо автору
 
   для: kasmanaft   (09.08.2006 в 22:59)
 

А каким образом выбирается id автора из БД?

   
 
 автор: kasmanaft   (09.08.2006 в 23:24)   письмо автору
 
   для: Roo$   (09.08.2006 в 23:19)
 

//зы: а вообще, здесь, на форуме, все сообщения хранятся в базе данных ..
//для каждого сообщения известен id написавшего его пользователя ..
//который собсно и подставляется в ссылку.

Вобщем так :) ... в базе данных отдельно от сообщений хранятся названия темы, каждое имеет свой id .. отдельно хранятся сообщения, у каждого сообщения есть свой id и id темы, к которой принадлежит это сообщение... кроме того для каждого сообщения хранится id написавшего его автора ... (а имя скорее всего выбирается исходя из этого id, дополнительным запросом в базу данных ... в таблицу пользователей, где хранится информацыя о пользователе .. исходя из этого id ищется имя автора, и все остальное, если нужно... хотя я точно не могу сказать - не смотрел скрипты данного форума)
вобщем в для кождого сообщения хранится сам текст сообщения, id автора, время создания и прочее ..

   
 
 автор: Unkind™   (09.08.2006 в 23:30)   письмо автору
 
   для: Roo$   (09.08.2006 в 23:19)
 

А каким образом выбирается id автора из БД?
Обычно по ID ищут, его из БД не достают, он как раз для взятия информации о пользователе из БД и нужен.

   
 
 автор: Roo$   (09.08.2006 в 23:34)   письмо автору
 
   для: Unkind™   (09.08.2006 в 23:30)
 

Полностью согласен с тобой. Но, мне сказали что его раздают автоматически при гинерации страницы. Вот и я хочу узнать как это возможно. Нужно, наверное оталкиваться от чегота?

   
 
 автор: kasmanaft   (09.08.2006 в 23:37)   письмо автору
 
   для: Roo$   (09.08.2006 в 23:34)
 

кто мог такое сказать o_O ??? =))
неужели не понятно написал? эх .. так старался :)))

   
 
 автор: Roo$   (09.08.2006 в 23:39)   письмо автору
 
   для: kasmanaft   (09.08.2006 в 23:37)
 

Извините пож., не так вырозился.... Они выбираются (id)... Каким образом?

   
 
 автор: kasmanaft   (09.08.2006 в 23:43)   письмо автору
 
   для: Roo$   (09.08.2006 в 23:39)
 

хех, ну ты даешь .. :)

//вобщем в для кождого сообщения хранится сам текст сообщения,
//id автора, время создания и прочее ..

тоесть для каждого сообщения известен ид создавшего его пользователя .. его выбирать толком то и не нужно, все под рукой ..
например, можно хранить сообщения в таком виде
id || id_автора || id_темы_к_которой_принадлежит_сообщение || само_сообщение

   
 
 автор: Roo$   (09.08.2006 в 23:43)   письмо автору
 
   для: Roo$   (09.08.2006 в 23:39)
 

Смотрел щас куки (softtime), там есть такое слово PHPSESSID с длинными цифраим. Они играют какуюнибудь роль (для выбирания id)?

   
 
 автор: kasmanaft   (09.08.2006 в 23:46)   письмо автору
 
   для: Roo$   (09.08.2006 в 23:43)
 

да нет же, не играют ! :))
смотри как строится тема:
идет цикл, при которором выбираюся все сообщения с идентификатором данной темы. Затем рассматривается каждое выбранное сообщение ... составляется таблица, куда записываются данные .. а id написавшего автора для каждого сообщения известен!

   
 
 автор: kasmanaft   (09.08.2006 в 23:50)   письмо автору
 
   для: kasmanaft   (09.08.2006 в 23:46)
 

а вообще наверно надо было начинать не с этого ... как хранятся записи в твоей гостевой книге ?? в базе данных или файлах ? и в каком виде?

   
 
 автор: Roo$   (09.08.2006 в 23:52)   письмо автору
 
   для: kasmanaft   (09.08.2006 в 23:46)
 

Теперь понял... Допустим у меня сообщения в гост.книге хрогятся в файлах. Как мне тогда вывести информацию о любом пользователе?

   
 
 автор: Roo$   (09.08.2006 в 23:55)   письмо автору
 
   для: Roo$   (09.08.2006 в 23:52)
 

Все пользователи гостевой книге хронятся в БД (id, name, pass,...)

   
 
 автор: kasmanaft   (09.08.2006 в 23:58)   письмо автору
 
   для: Roo$   (09.08.2006 в 23:55)
 

странно вообще поступил .. авторы в базе, а сообщения в файлах .. хм :)
а как вообще сообщения хранятся, только текст чтоли? каким образом они тогда выводятся? автор же должен быть известен o_O
если принципиально нужно работать с файлами, то можно хранить сообщения допустим так:
id_автора|||время создания|||текст_сообщения
"|||" - это разделитель, может быть любой ..

ну время создания конечно же не обязательно .. можно туда чего хочешь запихнуть .. перед выводом конечно же нужно обработать .. и выводить только "текст_сообщения"

   
 
 автор: Roo$   (10.08.2006 в 00:03)   письмо автору
 
   для: kasmanaft   (09.08.2006 в 23:58)
 

Ты не понял.. Гостевая хронит данные в файлах следующим образом...

Name
date time
messages

А информацию о пользователях я хочу выкидывать из БД

   
 
 автор: kasmanaft   (10.08.2006 в 00:13)   письмо автору
 
   для: Roo$   (10.08.2006 в 00:03)
 

да все я понял :) ... это я и имел ввиду, только формат немного другой ..
....................
... сижу думаю .....
..................
мдеее .. вон что ты имел ввиду говоря "и хронится в куках?" ...
тебя интересует, как узнать id написавшего сообщения при выводе или при добавлении сообщения? при выводе он вообще-то должен быть известен (у тебя вместо "Name" можно было записывать как раз этот id .. или не вместо ... перед именем например)

а вообще я запутался чесно говоря :( ... как ты узнаешь имя автора? автор сам его себе выбирает (если так, то с таким же успехом можно подобрать себе и id ) или оно берется из куков?
при авторизации можно в куки помещать имя, можно id ...

в куках ид нужен (можно обойтись и без него, конечно ... и проверить его не мешало бы) при добавлении сообщения
а при выборке он будет уже известен
здесь на форуме в куках хранится имя, ид выбирается по имени, наверное ...

   
 
 автор: Roo$   (10.08.2006 в 00:22)   письмо автору
 
   для: kasmanaft   (10.08.2006 в 00:13)
 

У меня авторизация и основана какрас на куках. Там я хроню имя и пароль. Эти данные я сверяю с данными в БД. Если добавить туда (в куки) id, что у нас получится? Информацию о других пользователях я не смогу просмотреть?

   
 
 автор: kasmanaft   (10.08.2006 в 00:24)   письмо автору
 
   для: kasmanaft   (10.08.2006 в 00:13)
 

вобщем имя у тебя известно ..
делаешь запрос в базу типа "SELECT id FROM users WHERE name=$name" и будет тебе id .. (если у пользователей он есть в твоей базе ... а не только username и pass)

   
 
 автор: Roo$   (10.08.2006 в 00:25)   письмо автору
 
   для: kasmanaft   (10.08.2006 в 00:24)
 

Id есть в БД моей..

   
 
 автор: kasmanaft   (10.08.2006 в 00:28)   письмо автору
 
   для: Roo$   (10.08.2006 в 00:25)
 

ну и славненько :)))
при выводе сообщения у тебя известно имя (которое хранится в файле) .. делаем запрос в базу данных
"SELECT id FROM users WHERE name=$name"
и id тоже известен .. далее наверно ты уже понял сам

и менять ничего не надо (хотя я бы лучше сообщения в базе данных хранил)

   
 
 автор: Roo$   (10.08.2006 в 00:30)   письмо автору
 
   для: kasmanaft   (10.08.2006 в 00:28)
 

Нет...

   
 
 автор: kasmanaft   (10.08.2006 в 00:39)   письмо автору
 
   для: Roo$   (10.08.2006 в 00:30)
 

не, у тебя будет как раз id автора сообщения .. допустим он сидит в переменной $id
больше тебе ничего не надо .. при выводе сообщения имя автора делаешь ссылкой типа вот этого
<a href=info.php?id_author=3865>Roo$</a>
и все, больше ничего не надо ...

потом нужен скрипт, показывающий инфу о пользователе .. собсно сам info.php
скрипт типа этого (пример)

<?
$id 
ereg_replace ("[^0-9]"""$_GET['id']); // ид - это только цифры .. для безопасности
$query "SELECT * FROM users WHERE id='$id'"// запрос для выборки инфы о юзере
$usr mysql_query($query); // выполняем запрос
$user mysql_fetch_array ($usr); // создаем массив
$user_name $user['name']; // выбираем из массива имя пользователя
$user_еще_всякая_инфа $user['*******']; // еще чего-нить, если есть
echo " ************** "// все выводим
?>

   
 
 автор: Roo$   (10.08.2006 в 00:50)   письмо автору
 
   для: kasmanaft   (10.08.2006 в 00:39)
 

Я щас буду пробывать... Если че, наверное сегодня уже поздно, буду завтра "мучить" тебя. Ок?

   
 
 автор: kasmanaft   (10.08.2006 в 00:54)   письмо автору
 
   для: Roo$   (10.08.2006 в 00:50)
 

хех, ок :))
пробуй, должно получиться!
если что, кто-нибудь обязательно поможет.
ЗЫ: и в правду спать уже пора =) (у меня почти 3 уже)

Удачи!

   
 
 автор: Roo$   (10.08.2006 в 21:51)   письмо автору
 
   для: kasmanaft   (10.08.2006 в 00:54)
 

У меня что то не получается.... Вот что у меня на данный момент есть..

echo "<a href=info.php?id_user=$id> ".$login"</a>";

Где $id это id пользователя в базе данных. Я его получил следующим образом:

$query = "SELECT id_user FROM userlist WHERE name='$login'";
$nme = mysql_query($query);
$id = mysql_result($nme, 0);

Когда я навожу курс.мышки на данную ссылку, то высвечивается ссылка info.php?id_user=
Почему? Ведь по идеи должно быть info.php?id_user=2 (3,4,5....... id пользователя)

   
 
 автор: Roo$   (11.08.2006 в 00:46)   письмо автору
 
   для: Roo$   (10.08.2006 в 21:51)
 

Cheops подскажи!!!!!

   
 
 автор: cheops   (11.08.2006 в 00:49)   письмо автору
 
   для: Roo$   (10.08.2006 в 21:51)
 

Замените блок
<?php
$query 
"SELECT id_user FROM userlist WHERE name='$login'";
$nme mysql_query($query);
$id mysql_result($nme0);
?>

следующим образом
<?php
$query 
"SELECT id_user FROM userlist WHERE name='$login'";
$nme mysql_query($query);
if(!
$nme) exit(mysql_erorr());
$id mysql_result($nme0);
?>

Что выводит?

   
 
 автор: Roo$   (11.08.2006 в 00:58)   письмо автору
 
   для: cheops   (11.08.2006 в 00:49)
 

Все по прежнему. Нет того результата, что нужно. Я выше описал структуру записи данных в файл. Читаю я их следующим образом:
$file[0] - это имя польз.
$file[1] - дата
$file[2] - сообщение

Исходя отсюда я запрос делаю так:
$query = "SELECT id_user FROM userlist WHERE name='$file[0]";

Но так ничего не происходит.

   
 
 автор: cheops   (11.08.2006 в 01:16)   письмо автору
 
   для: Roo$   (11.08.2006 в 00:58)
 

Поставьте проверку после выполенения SQL-запроса функцией mysql_query(), как описано двумя постами выше - нигде ошибки не происходит в SQL?

   
 
 автор: Roo$   (11.08.2006 в 01:21)   письмо автору
 
   для: cheops   (11.08.2006 в 01:16)
 

Поставил, ошибок нигде нет... но и результата нет

info.php?id_user=

Может из-за того что это я все делаю в отдельной функции Readmessages?

   
 
 автор: cheops   (11.08.2006 в 02:13)   письмо автору
 
   для: Roo$   (11.08.2006 в 01:21)
 

Вполне такое может быть - вы параметры функции передаёте?

   
 
 автор: Roo$   (11.08.2006 в 19:14)   письмо автору
 
   для: cheops   (11.08.2006 в 02:13)
 

Наверное нет. Потому что у меня в функции вообще не работает SQL. Вообще ни какую информацию из базы даных он не выводит. А что нужно указать, в качестве параметров?

   
 
 автор: kasmanaft   (11.08.2006 в 19:20)   письмо автору
 
   для: Roo$   (11.08.2006 в 19:14)
 

Можно твой readmessages поглядеть ?
Есть идея, что нужно сделать $login = trim($login) ... так, телепатически ... конечно же, могу ошибаться ...
(нужно поглядеть функцию, и судя по ней уже говорить о нужных параметрах ;))

   
 
 автор: Roo$   (11.08.2006 в 19:24)   письмо автору
 
   для: kasmanaft   (11.08.2006 в 19:20)
 

Вот index.php, в ней есть эта функция....

   
 
 автор: kasmanaft   (11.08.2006 в 19:48)   письмо автору
 
   для: Roo$   (11.08.2006 в 19:24)
 

Да, наверняка, надо сделать trim(username) ....
то есть поступить примерно так:

$user_name = $file[0];
$user_name = trim($user_name);
$query = "SELECT id_user FROM userlist WHERE name='$user_name'";
$nme = mysql_query($query);
if(!$nme) exit(mysql_erorr());
$id = mysql_result($nme, 0);

   
 
 автор: Roo$   (11.08.2006 в 19:51)   письмо автору
 
   для: kasmanaft   (11.08.2006 в 19:48)
 

Работает!!!!!!!!!!!!!!!!! Большое спасибо!!!!!!!!!

   
 
 автор: Roo$   (11.08.2006 в 19:57)   письмо автору
 
   для: kasmanaft   (11.08.2006 в 19:48)
 

А теперь в info.php, тоже надо что то переделовать...?

   
 
 автор: kasmanaft   (11.08.2006 в 20:00)   письмо автору
 
   для: Roo$   (11.08.2006 в 19:57)
 

Вроде и так должно работать ..
Так нужно было сделать потому что в файле после имени пользователя стоит знак переноса строки ( \n или \r\n ) , который нужно отбросить, т.к. в базе данных имя пользователя записано без него. Это и делает ф-я trim

   
 
 автор: Roo$   (11.08.2006 в 20:18)   письмо автору
 
   для: kasmanaft   (11.08.2006 в 20:00)
 

У меня вылетает ошибка
Notice: Undefined index: name in c:\inetpub\wwwroot\authorization\guest2\info.php on line 7

Сам файл info.php выгледит так

<?
include "../config.php";
$id = ereg_replace ("[^0-9]", "", $_GET['id_user']);
$query = "SELECT id_user FROM userlist WHERE id_user='$id'";
$usr = mysql_query($query);
$user = mysql_fetch_array ($usr);
$user_name = $user['name'];
echo $user_name;
?>

   
 
 автор: Roo$   (11.08.2006 в 20:30)   письмо автору
 
   для: Roo$   (11.08.2006 в 20:18)
 

Все понял, просто надо было сделать так $query = "SELECT * FROM userlist WHERE id_user='$id'";
Огромное спасибо kasmanaft за помощь.....

   
 
 автор: Roo$   (11.08.2006 в 21:28)   письмо автору
 
   для: Roo$   (11.08.2006 в 20:30)
 

Теперь, объясните, каким образом можно сделать в инфе о пользователе... пункты "Число сообщений" и "Последний вход в гостевую комнату"

   
 
 автор: kasmanaft   (11.08.2006 в 23:47)   письмо автору
 
   для: Roo$   (11.08.2006 в 21:28)
 

хех, ну а если подумать ? ;))
1) либо прямым способом считать сообщения (увеличивать счетчик при добавлении), либо тупым перебором открывать каждый файл и считать
2) собсно слов нет ... надо записывать время куда-нибудь .. чтож тут еще придумать ;)

   
 
 автор: Roo$   (12.08.2006 в 00:07)   письмо автору
 
   для: kasmanaft   (11.08.2006 в 23:47)
 

Время я хочу записывать в БД полльзователей (userlist). Создать там еще одну калонку и записывать туда время его посещения. Можно так? А кол-во сообщений... тоже может так?

   
 
 автор: kasmanaft   (12.08.2006 в 14:59)   письмо автору
 
   для: Roo$   (12.08.2006 в 00:07)
 

ну да ... все туда наверно и записывай .. все, относительно юзеров

   
 
 автор: Roo$   (12.08.2006 в 18:22)   письмо автору
 
   для: kasmanaft   (12.08.2006 в 14:59)
 

Давай попробуем записать время последнего посещения пользователя в БД. Как оно примерно будет выглядить?

   
 
 автор: kasmanaft   (12.08.2006 в 18:36)   письмо автору
 
   для: Roo$   (12.08.2006 в 18:22)
 

Как хочешь, так и будет выглядеть :))
Я бы посоветовал записывать timestamp (секунды от 1970 года) .. то есть time() ... записывать в базу данных перед отображением страницы
Дату формировать при помощи функции date ( *** )

   
 
 автор: Равечка   (12.08.2006 в 16:20)   письмо автору
 
   для: Roo$   (12.08.2006 в 00:07)
 

Ты строишь проект не правильно. Надо сначало продумать какие функции будет выполнять проект а потом его писать. Начинать конечно же с разментки базы данных.

попробуй начать заного и разметить отделные таблицы для отдельных нужд. например

posts
id | title | post | date | posted_user | posted_id

id - айди записи (поста) автоинкремент, int(10)
title - заголовок сообщения, varchar(255)
post - само сообщение, text
date - дата отправки этого сообщения, int(10) (советую пользоваться отметками вемени юникс)
posted_user - имя человека оставившего сообщение, varchar(250) (по сути дубликат колонки из следущей таблицы, но этот шаг ускорит работу и уменьшит запрос)
posted_id - айди человека который оставил запись

users
id | name | pwd | reg_date | last_visit

id -без комментариев =)
name - имя (логин), varchar(250)
pwd - пароль. например в модном МД5 =), varchar(33)
reg_date - дата регистрации, int(10)
last_visit - дата последнего визита, int(10)

user_extra
id | mem_id | avatar | signature

id -без комментариев =)
mem_id - айди совпадающий с колонкой айпи в таблице users
avatar - аватарка пользователя и т.д.
в эту таблицу можно наприхать всего что пользователь введет при регистрации, джае его ориентацию :)

   
 
 автор: RV   (12.08.2006 в 18:36)   письмо автору
 
   для: Равечка   (12.08.2006 в 16:20)
 

>name - имя (логин), varchar(250)
>pwd - пароль. например в модном МД5 =), varchar(33)
>reg_date - дата регистрации, int(10)
>last_visit - дата последнего визита, int(10)

имя длинной в 250 символов?
если пароль в модном мд5 то почему длинна 33 а не 32
даты TIMESTAMP

   
 
 автор: Равечка   (12.08.2006 в 21:29)   письмо автору
 
   для: RV   (12.08.2006 в 18:36)
 

имхо имена разные бывают, насчет мд 5 опечаталась. а насчет таймстмп - это тупизм.

   
 
 автор: RV   (13.08.2006 в 05:40)   письмо автору
 
   для: Равечка   (12.08.2006 в 21:29)
 

имена бывают разные. дай волю и пользователи дадут имя длиннее чем 250 символов.
32 символа во всех нормальных скриптах.
и чем не нравится timestamp ?

   
 
 автор: cheops   (13.08.2006 в 11:31)   письмо автору
 
   для: Roo$   (09.08.2006 в 22:32)
 

Тема слишком длинная, если что-то осталось не выясненным давайте заведём новую тему.

   
Rambler's Top100
вверх

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