Перейти к контенту
  • 0

Создал чат без БД и хотел бы


Вопрос

Дело в том что мой чат не работает с MySQL т.к. я его не знаю, вся БД хранится в файлах. Так вот, хотелось бы сделать что бы юзер зарегившись в форуме, мог заходить под тем же логином и паролем в чат.

Для этого мне требуется считать логин и пароль из БД форума, а как это сделать я не знаю.

Или если кому не рудно и со временем все в порядке, объясните пожалуйста всю процедуру регистрации и чтения из БД по подробнее.

заранее благодарю.

 

Форум у меня стоит, Powered by Invision Power Board v1.3 Final Русский модифицированый.

Ссылка на комментарий
Поделиться на других сайтах

Рекомендуемые сообщения

  • 0

Таблица members поля : name & password.

Запрос скл :

SELECT name, password FROM ibf_members

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

Ссылка на комментарий
Поделиться на других сайтах

  • 0

:D

 

захешировать т.е. MD5?

 

SELECT name, password FROM ibf_members

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

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Heckfy

захешировать т.е. MD5?

Естесственно

Heckfy

и если можно подскажите пожалуйста где находится файл с регистрацией юзера или вызов функции.
Советую почитать структуру файлов ( читай классов ) в ИПБ ... не лишне Школа начинающего IPB строителя
Ссылка на комментарий
Поделиться на других сайтах

  • 0

Heckfy

сори, я в БД не силен, хотел спросить как логин и пароль в переменные заталкать?
Открой ЛЮБОЙ файл в папке /sorces/ и вруби логику ( A hint : поиск по слову SELECT ), что мы видим ?

Например, Register.php :D;)

$DB->query("SELECT * FROM ibf_members WHERE LOWER(name)='".strtolower($ibforums->input['username'])."'");
 
 if ( ! $member = $DB->fetch_row() ) // Нихрена нет такого ника
 {
	 $this->revalidate_one('err_no_username');
	 return;
 }

Переделаешь под себя :

$DB->query("SELECT name,password FROM ibf_members WHERE LOWER(name)='".strtolower(поле, которое вытащишь с ХТМЛ под ник)."'");
 
 if ( ! $member = $DB->fetch_row() ) // Нет такого
 {
    Выведи ошибку, что незареген и поле регистрации в форум
	 
 }
                                else // есть такой сверим пароль
                                {
                                    if ( $member['password'] == MD5("поле, которое вытащишь с ХТМЛ под пароль") )
                                    {
                                           Логинишь
                                    }
                                    else
                                    {
                                          пароль не совпал - ошибка, повторите и тд
                                    }
                                }
                                }

Ссылка на комментарий
Поделиться на других сайтах

  • 0
strtolower(что бы это значило? http://www.ibresource.ru/forums/html/emoticons/smile.gif )

 

еще раз прошу прощения, я БД только начал изучать, немного сложновато смотреть на неизвестные мне команды MySQL.

 

MD5("поле, которое вытащишь с ХТМЛ под пароль")

 

т.е. в обеих случаях подставить

 

strtolower($name);

MD5($password);

.. так?

 

и еще вопрос, к ней ведь еще приконектится надо, блин.. кароче я не тяну пока на это.. :(

Ссылка на комментарий
Поделиться на других сайтах

  • 0

// параметры БД
$dbname  = 'forum'; // имя
$dblogin	= 'root'; // логин
$dbpass  = ''; //пароль
$dbhost  = 'localhost'; // хост

//параметры пользователя
$name	= 'medick'; //имя пользователя
$pass	= '123'; //пароль пользователя

$link = mysql_connect("$dbhost", "$dblogin", "$dbpass") or die("Ошибка при подключении."); // подключение
mysql_select_db("$dbname", $link); // выбор базы

//запрос
$q = "SELECT password FROM ibf_members  WHERE name='{$name}'"; 
$r = mysql_query($q); 

//проверка
if (@mysql_num_rows($r)!=1) echo "Такого пользователя нет в базе!";
else
{
       $row = mysql_fetch_array($r);
       if (md5($pass)!=$row['password']) echo 'Неправильный пароль!';
       else
       {
              //вход в чат
       }
}

 

так понятнее? :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0
name='{$name}'";

Кто это пускает в базу неотфильтрованные переменные? :D Или $name всегда константа? ;)

addslashes() до базы, stripslashes() с базы - первое правило программиста PHP :)

Ссылка на комментарий
Поделиться на других сайтах

  • 0
Кто это пускает в базу неотфильтрованные переменные?

addslashes() до базы, stripslashes() с базы - первое правило программиста PHP

 

а где ты усмотрел пропуск переменных в базу? ;) это ведь не вставка данных, и в данном случае фильтровать ничего не нужно :)

 

Или $name всегда константа?

 

как ты себе представляешь такой процесс входа? :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0

>stripslashes() с базы

 

Ошибка. Не нужно ;)

addslashes() нужны только чтобы подать данные экранированными в MySQL. А вот в базе они хранятся уже без лишних слешей. И извлекаются тоже :D Так что - только addslashes(). Ещё лучше - mysql_real_escape_string()

Ссылка на комментарий
Поделиться на других сайтах

  • 0
это ведь не вставка данных, и в данном случае фильтровать ничего не нужно

Ты про UNION SELECT слышал? Самая популярная SQL-инъекция.

Ссылка на комментарий
Поделиться на других сайтах

  • 0

:D

 

$name = 'medick'; //имя пользователя

$pass = '123'; //пароль пользователя 

 

medick

теперь все понятно.. :) спасибо.

 

и еще, если мона подскажите пожалуйста как зарегить ник с паролем в таблице

ibf_members ;) и что можно сделать с этими полями после регистрации, их ведь тоже надо заполнить по своему?

id  name  mgroup  password  email  joined  ip_address  avatar  avatar_size  posts  aim_name  icq_number  location  signature  website  yahoo  title  allow_admin_mails  time_offset  interests  hide_email  email_pm  email_full  skin  warn_level  warn_lastwarn  language  msnname  last_post  restrict_post  view_sigs  view_img  view_avs  view_pop  bday_day  bday_month  bday_year  new_msg  msg_from_id  msg_msg_id  msg_total  vdirs  show_popup  misc  last_visit  last_activity  dst_in_use  view_prefs  coppa_user  mod_posts  auto_track  org_perm_id  org_supmod  integ_msg  temp_ban  sub_end  files  downloads 

 

как сказал theIggs там есть файл register.php может от туда сорвать форму регистрации и переделать под свой дизайн? или лучше при каждой регистрации загонять юзеров на форум? :)

 

и еще..

$q = "SELECT password FROM ibf_members  WHERE name='{$name}'";

 

'{$name}' что мне с ней делать? оставить как есть?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

Heckfy

для входа в чат сделай страничку с 2-мя полями, имена которых 'name' и 'pass', при переходе на вход.php они превратятся в переменные $name и $pass, далее в самом начале напиши addslashes($name); и проверь, заполнены ли вообще эти переменные - if ($name!='') , тоже самое с $pass.

 

и зачем ты собрался делать форму регистрации? загоняй на форум, там пусть регистрируются :D

Ссылка на комментарий
Поделиться на других сайтах

  • 0
и зачем ты собрался делать форму регистрации? загоняй на форум, там пусть регистрируются
Именно ! Просто подсунь стр регистрации форума, зачем лишние геморрои ?
Ссылка на комментарий
Поделиться на других сайтах

  • 0

вообщето да, вы правы :D

пока читал создался еще один вопрос

 

// параметры БД

$dbname = 'forum'; // имя

$dblogin = 'root'; // логин

$dbpass = ''; //пароль

$dbhost = 'localhost'; // хост

 

//параметры пользователя

$name = 'medick'; //имя пользователя

$pass = '123'; //пароль пользователя

 

$link = mysql_connect("$dbhost", "$dblogin", "$dbpass") or die("Ошибка при подключении."); // подключение

mysql_select_db("$dbname", $link); // выбор базы

 

//запрос

$q = "SELECT password FROM ibf_members  WHERE name='{$name}'";

объясните пожалуйста, что тут происходит?

не пойму что записывается в переменную $q

 

$r = mysql_query($q);

а это что значит? ;)

 

 

//проверка

if (@mysql_num_rows($r)!=1) echo "Такого пользователя нет в базе!";

else

{

$row = mysql_fetch_array($r);

if (md5($pass)!=$row['password']) echo 'Неправильный пароль!';

else

{

//вход в чат

}

}

Ссылка на комментарий
Поделиться на других сайтах

  • 0
не пойму что записывается в переменную $q

$q = строка, которая содержит в себе текст запроса. Кстати, измени ее сразу :D

$q = "SELECT password FROM ibf_members WHERE name='{addslashes($name)}'";

 

$r = mysql_query($q); - собственно, выполнение запроса

Ссылка на комментарий
Поделиться на других сайтах

  • 0

"Такого пользователя нет в базе!"

 

не идет, и других юзеров пробовал с неправильным паролем, в чем может быть дело? встревает на

if (@mysql_num_rows($r)!=1) echo "Такого пользователя нет в базе!";

т.е. получается раз юзера не находит проверяется не та таблица?

вот еще раз код моих двух страничек..

 

форма входа в чат.. файл (index.php)

<html><head><title>Титле</title>

<META content='text/html; charset=windows-1251' http-equiv='Content-Type'>

</head>

<body>

<form action='open.php' method="POST">

<input name=name value="" type=text>Логин<br>

<input name=pass value="" type=password>Пароль<br> <br>

<input value="Войти" type="Submit"><br><br>

</form>

</body>

</html>

 

вход.. файл(open.php)

 

<?php

 

if (isset($_POST['name'])){$name = $_POST['name'];}

if (isset($_POST['pass'])){$pass = $_POST['pass'];}

 

if (!isset($name)){exit;}

if (!isset($pass)){exit;}

 

// параметры БД

$dbname  = 'forum'; // имя

$dblogin = 'root'; // логин

$dbpass  = ''; //пароль (пароль я не ставил)

$dbhost  = 'localhost'; // хост

 

 

$link = mysql_connect("$dbhost", "$dblogin", "$dbpass") or die("Ошибка при подключении."); // подключение

mysql_select_db("$dbname", $link); // выбор базы

 

//запрос

$q = "SELECT password FROM ibf_members WHERE name='{addslashes($name)}'";

$r = mysql_query($q);

 

//проверка

if (@mysql_num_rows($r)!=1) echo "Такого пользователя нет в базе!";

else

{

       $row = mysql_fetch_array($r);

       if (md5($pass)!=$row['password']) echo 'Неправильный пароль!';

       else

       {

              echo "вы вошли..";

       }

}

Ссылка на комментарий
Поделиться на других сайтах

  • 0

>Ты про UNION SELECT слышал? Самая популярная SQL-инъекция.

 

Только при чём тут оно в данном контексте? Я тебе говорю про то, что stripslashes() не нужна после чтения данных из БД, а ты - про атаку БД :D Кроме того - покажи мне пальцем, как эту атаку можно провести, если параметр будет экранирован через addslashes()? Пальцем ткни, а то я тупой ;)

Ссылка на комментарий
Поделиться на других сайтах

  • 0

про префикс вы не чего не говорили :D

 

вот что там у меня

$dbname = 'forum'; // имя

$dblogin = 'root'; // логин

$dbpass = ''; //пароль (пароль не ставил)

$dbhost = 'localhost'; // хост

 

хотя это уже не важно, я сразу не подумал что мне еще по мимо регистрации в БД понадобится еще и файлы для пользователей завести, это все усложняет :)

все равно придется делать форму регистрации, а как пока не нзнаю.

я подумал может как нибудь изменить код регистрации форума? т.е. если при удачной регистрации после того как таблицы на юзера завелись, подставить туда свой код. Дело в том что я создаю для каждого юзера 3 файла

1. исходящие сообщения.

2. входящие сообщения.

3. настройки чата (цвет ника, цвет текста, интервал обновления и т.д.).

подскажите пожалуйста в какое место форума, при регистрации (когда уже создалась таблица на юзера ) можно вставить свой код для создания файлов для юзера.

и еще, у меня при регистрации стоит выбор пола, возможно как нибудь добавить в таблицу еще одно десятизначное значение для определения пола? всего лишь 10 цифр, т.е. значение в таблице от 0 - 10, больше не требуется.

одним словом на сраницу регистрации надо добавить

 

<select name=sel >
   <option value="0">0</option>
   <option value="1">1 </option>
   <option value="2">2 </option>
   <option value="3">3 </option>
   <option value="4">4 </option>
   <option value="5">5</option>
   <option value="6">6</option>
   <option value="7">7</option>
   <option value="8">8</option>
   </select>

 

и занести этот параметр в БД к юзеру ;) , после как юзер зарегится нужно место для моего кода, куда посоветуете его поставить?

Ссылка на комментарий
Поделиться на других сайтах

  • 0

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

 

насчет префикса - т.е. название таблицы с юзерами у тебя ibf_members (как в запросе)? если нет, то измени ;)

Ссылка на комментарий
Поделиться на других сайтах

  • 0

да-да, так у меня и стоит там "ibf_" :D

 

дополнительные параметры при регистрации можно в админке выставить

т.е. добавить поле при регистрации? мне даже не обязательно пол в БД сохранять, главное что бы он передался из формы в скрипт, я бы его в файл сохранил бы. ;)

 

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

Ссылка на комментарий
Поделиться на других сайтах

  • 0
да-да, так у меня и стоит там "ibf_"

тогда кусок кода с авторизацией должен работать

т.е. добавить поле при регистрации? мне даже не обязательно пол в БД сохранять, главное что бы он передался из формы в скрипт, я бы его в файл сохранил бы.

именно, админка - пользователи и группы - дополнительные поля, пол останется в базе :D

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

угу

Ссылка на комментарий
Поделиться на других сайтах

Присоединиться к обсуждению

Вы можете ответить сейчас, а зарегистрироваться позже. Если у вас уже есть аккаунт, войдите, чтобы ответить от своего имени.

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить на вопрос...

×   Вы вставили отформатированный текст.   Удалить форматирование

  Допустимо не более 75 смайлов.

×   Ваша ссылка была автоматически заменена на медиа-контент.   Отображать как ссылку

×   Ваши публикации восстановлены.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Зарузка...
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.