Вопрос касаемо реализации чата.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Вопрос касаемо реализации чата.

Сообщение rosswe »

Доброго времени.
Скажите кто-нибудь связывался с этим делом https://justblab.com/demo/blabax_demo.html
Мне нужно его код который на чистом рнр,- интегрировать в basic.

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

Вопрос,- точно получится ?
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: Вопрос касаемо реализации чата.

Сообщение futbolim »

Точно
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Вопрос касаемо реализации чата.

Сообщение rosswe »

Я интегрировал ,и добавил флаг Р.Ф и русифицировал полностью, и другие дитали осталось последние.
У них есть своя регистрация на этом чате через контрольный вопрос и своя БД , а у меня на сайте своя регистрация через мыло и своя БД, мне важно получить такой результат , .
Убрать страницу регистрации и входа и что бы тот кто зарегистрирован на сайте был с таким же ником и чате, .
Так понимаю надо чтоб он в таблицу моих юзеров смотрел, или своих писать в его таблицу.
Я переносил часть кода из своей вьюшки в вью чата и подключал её к своей модели LoginfForm .
В этом случае пропадала страница регистрации и авторизации ,на пользователь не менялся при смени его на сайте и при выходе выкидывало на 404
вот код без моих исправлений где запиcует в БД после регист... и выдаёт после авторизации.

Код: Выделить всё

<?php

require_once('config.php');
require_once('incl/main.php');

neutral_dbconnect();

// check if username available on register
if(isset($_POST['check_name'])){
$check_name=abc123($_POST['check_name'],'');
$res=neutral_query('SELECT name FROM '.$dbss['prfx']."_users WHERE name='$check_name'");
if(neutral_num_rows($res)>0){print 1;}else{print 0;}die();}

$settings=get_settings(); $options=get_options(); get_language(); 

// check ip ban
// $res=neutral_query('SELECT * FROM '.$dbss['prfx']."_ban WHERE ipaddr='$ipaddr' AND $timestamp < timestamp");
// if(neutral_num_rows($res)>0){
// $info_line=$lang['info_ban'];
// require_once('templates/info.pxtm'); die();}

// --- VARS --- //

$lang_divs=array();

foreach ($lang_list as $key => $value){$ccode=substr($value[0],0,2);
$lang_divs[]='<div class="svg_f_'.$value[0].'" title="'.$value[1].'" onclick="gourl(\'index.php?lang='.$key.'\')"><span class="x_bcolor_z">'.$ccode.'</span></div>'; }
sort($lang_divs); $lang_divs=implode("\n",$lang_divs);

unset($dbuser);
$onehourback=$timestamp-3600;

setcookie($xcookie_uidhash[0],'',time()+$xcookie_uidhash[1],'/');

// _bflog tokens: 1 = guest, 2 = register, 3 = wrong password, 4 = wrong recovery email/answer


// --- LOGIN --- //

// !!! POST[user] & POST[password] -> check user with a password
if( isset($_POST['username']) && isset($_POST['password']) && length(abc123($_POST['username'],''))>2 && length($_POST['password'])>2 ){

// --- X attempts per hour...
$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_bflog WHERE token=3 AND ipaddr='$ipaddr' AND timestamp>$onehourback");
if(neutral_num_rows($res)>=$settings['wrongperhour']){
$info_line=$lang['error_attmpts'];
require_once('templates/info.pxtm'); die();}

$postname=abc123($_POST['username'],'');
$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_users WHERE name='$postname'");

if(neutral_num_rows($res)<1){
$info_url='account5.php'; $info_line=$lang['no_upmatch'];
require_once('templates/info.pxtm'); die();}

$dbuser=neutral_fetch_array($res);

$hash=hash('sha256',trim($_POST['password']).$dbuser['salt']); 
if($dbuser['password']!=$hash){
neutral_query('INSERT INTO '.$dbss['prfx']."_bflog VALUES(0,'$ipaddr',3,$timestamp)");
$info_url='account5.php?passrequired_uname='.$postname; $info_line=$lang['no_upmatch'];
require_once('templates/info.pxtm'); die();}

if($dbuser['quarantine']>$timestamp){
$info_url='account5.php?passrequired_uname='.$postname; $info_line=$lang['account_wait'];
require_once('templates/info.pxtm'); die();}

$cookie=hash('sha256',$dbuser['id'].$settings['cookie_salt']);
$cookie=$dbuser['id'].'z'.$cookie;
setcookie($xcookie_uidhash[0],$cookie,time()+$xcookie_uidhash[1],'/');
redirect('blabax.php'); die();}


// ??? POST[user] & no password, set dbuser array
if( isset($_POST['username']) && length(abc123($_POST['username'],''))>2 ){
$postname=abc123($_POST['username'],'');
$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_users WHERE name='$postname'");
if(neutral_num_rows($res)>0){$dbuser=neutral_fetch_array($res);}}


// !!! if dbuser but the account is password protected ask for a password and die
if(isset($dbuser) && length($dbuser['password'])>0){
$info_url='account5.php?passrequired_uname='.$postname; $info_line=$lang['pass_required'];
require_once('templates/info.pxtm'); die();}


// ??? check IP <-> GUEST match
$user_ip_match=0; if(isset($dbuser)){
$res=neutral_query('SELECT * FROM '.$dbss['prfx'].'_iplog WHERE name=\''.$dbuser['name'].'\' AND ipaddr=\''.$ipaddr.'\'');
if(neutral_num_rows($res)>0){$user_ip_match=1;}}


// !!! if dbuser & no password protected but IP doesn't match display error and die
if(isset($dbuser) && ($user_ip_match<1 && $ipaddr!=$dbuser['ipaddr'])){
$info_url='account5.php'; $info_line=$lang['guest_error'];
require_once('templates/info.pxtm'); die();}


// !!! if dbuser & no password protected and IP match -> set cookie, redirect and die
if(isset($dbuser) && ($user_ip_match>0 || $ipaddr==$dbuser['ipaddr'])){
$cookie=hash('sha256',$dbuser['id'].$settings['cookie_salt']);
$cookie=$dbuser['id'].'z'.$cookie;
setcookie($xcookie_uidhash[0],$cookie,time()+$xcookie_uidhash[1],'/');
redirect('blabax.php'); die();}


// !!! if escaped POST[user] survived so far insert new user, set cookie, redirect and die
if(isset($postname) && length($postname)<17 && $settings['allow_guest']!='0'){

// --- X guests per hour...
$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_bflog WHERE token=1 AND ipaddr='$ipaddr' AND timestamp>$onehourback");
if(neutral_num_rows($res)>=$settings['userperhour']){
$info_line=$lang['error_reguser'];
require_once('templates/info.pxtm'); die();}

if($settings['utf8_run']!='0' && abcmixed($postname)){
$info_url='account5.php'; $info_line=htmlspecialchars($settings['utf8_msg']);
require_once('templates/info.pxtm'); die();}

$randstr=rand_str(20); $sgroup=(int)$settings['group_g'];
neutral_query('INSERT INTO '.$dbss['prfx']."_users VALUES(NULL,$sgroup,'$postname','','','$randstr','$ipaddr','','',$timestamp,0)");
neutral_query('INSERT INTO '.$dbss['prfx']."_bflog VALUES(0,'$ipaddr',1,$timestamp)");

$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_users WHERE name='$postname'");
if(neutral_num_rows($res)>0){$dbuser=neutral_fetch_array($res);
$cookie=hash('sha256',$dbuser['id'].$settings['cookie_salt']);
$cookie=$dbuser['id'].'z'.$cookie;
setcookie($xcookie_uidhash[0],$cookie,time()+$xcookie_uidhash[1],'/');
redirect('blabax.php'); die();}}


// --- REGISTER --- //

if(isset($_POST['regname']) && isset($_POST['password']) && isset($_POST['email']) && isset($_POST['question'])  && isset($_POST['answer']) && $settings['allow_reg']!='0'){

// --- X users per hour...
$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_bflog WHERE token=2 AND ipaddr='$ipaddr' AND timestamp>$onehourback");
if(neutral_num_rows($res)>=$settings['userperhour']){
$info_line=$lang['error_reguser'];
require_once('templates/info.pxtm'); die();}

$regsalt=rand_str(20);
$regname=abc123($_POST['regname'],'');
$regpass=hash('sha256',trim($_POST['password']).$regsalt);
$regmail=neutral_escape($_POST['email'],64,'str');
$reguery=neutral_escape($_POST['question'],128,'str');
$regansr=hash('sha256',strtolower(trim($_POST['answer'])).$regsalt);

if(length($regname)<3 || length($regname)>16  || length($_POST['password'])<3){
$info_url='account5.php?q=register'; $info_line=$lang['wrong_usr_ps'];
require_once('templates/info.pxtm'); die();}

if(length($regmail)<7 || !stristr($regmail,'@') || !stristr($regmail,'.') || stristr($regmail,' ')){
$info_url='account5.php?q=register'; $info_line=$lang['wrong_email'];
require_once('templates/info.pxtm'); die();}

if(length($reguery)<1 || length($_POST['answer'])<1){
$info_url='account5.php?q=register'; $info_line=$lang['wrong_quas'];
require_once('templates/info.pxtm'); die();}

$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_users WHERE name='$regname' OR email='$regmail'");

if(neutral_num_rows($res)>0){
$info_url='account5.php?q=register'; $info_line=$lang['wrong_usr_em'];
require_once('templates/info.pxtm'); die();}

$quarantine=(int)$settings['reglog_delay'];
if($quarantine>0){$quarantine+=$timestamp;}
$sgroup=(int)$settings['group_r'];

if($settings['utf8_run']!='0' && abcmixed($regname)){
$info_url='account5.php'; $info_line=htmlspecialchars($settings['utf8_msg']);
require_once('templates/info.pxtm'); die();}

neutral_query('INSERT INTO '.$dbss['prfx']."_users VALUES(NULL,$sgroup,'$regname','$regpass','$regmail','$regsalt','$ipaddr','$reguery','$regansr',$timestamp,$quarantine)");
neutral_query('INSERT INTO '.$dbss['prfx']."_bflog VALUES(0,'$ipaddr',2,$timestamp)");

$info_url='account5.php?passrequired_uname='.$regname; $info_line=$lang['account_ok'];
if($quarantine>$timestamp){$info_line=$info_line.' '.$lang['account_wait'];}
require_once('templates/info.pxtm'); die();

}


// --- PASSWORD --- //

// if email exists ask recovery question
if(isset($_POST['lostpassemail'])){

// --- X attempts per hour...
$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_bflog WHERE token=4 AND ipaddr='$ipaddr' AND timestamp>$onehourback");
if(neutral_num_rows($res)>=$settings['wrongperhour']){
$info_line=$lang['error_attmpts'];
require_once('templates/info.pxtm'); die();}

$lostpassemail=neutral_escape($_POST['lostpassemail'],64,'str');
$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_users WHERE email='$lostpassemail'");

if(neutral_num_rows($res)<1){
neutral_query('INSERT INTO '.$dbss['prfx']."_bflog VALUES(0,'$ipaddr',4,$timestamp)");
$info_url='account5.php?q=password'; $info_line=$lang['wrong_recmail'];
require_once('templates/info.pxtm'); die();}

$lpuser=neutral_fetch_array($res);
$lpuserid=$lpuser['id'];
$lpuserqu=strip_tags($lpuser['question']);

require_once('templates/password_recovery_question.pxtm');die();}


// if recovery answer ok - reset password
if(isset($_POST['lostpassanswer']) && isset($_POST['lostpassid'])){

$lostpassid=(int)$_POST['lostpassid'];

// --- X attempts per hour...
$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_bflog WHERE token=4 AND (ipaddr='$ipaddr' OR id=$lostpassid) AND timestamp>$onehourback");
if(neutral_num_rows($res)>=$settings['wrongperhour']){
$info_line=$lang['error_attmpts'];
require_once('templates/info.pxtm'); die();}

$res=neutral_query('SELECT * FROM '.$dbss['prfx']."_users WHERE id=$lostpassid");

if(neutral_num_rows($res)<1){die();}

$lpuser=neutral_fetch_array($res);
$postansr=hash('sha256',strtolower(trim($_POST['lostpassanswer'])).$lpuser['salt']);

if($postansr!=$lpuser['answer']){
neutral_query('INSERT INTO '.$dbss['prfx']."_bflog VALUES($lostpassid,'$ipaddr',4,$timestamp)");
$info_url='account5.php?q=password'; $info_line=$lang['wrong_recansw'];
require_once('templates/info.pxtm'); die();}

$pass=strtolower(rand_str(5));
$hash=hash('sha256',$pass.$lpuser['salt']); 

neutral_query('UPDATE '.$dbss['prfx']."_users SET password='$hash' WHERE id=$lostpassid");

$info_url='account5.php?passrequired_uname'; $info_line=$lang['pass_newpass'].'<b>'.$pass.'</b>';
require_once('templates/info.pxtm'); die();

}


// ---------------- //


if(isset($_GET['q']) && $_GET['q']=='register' && $settings['allow_reg']!='0'){require_once('templates/register.pxtm');die();}
if(isset($_GET['q']) && $_GET['q']=='password'){require_once('templates/password_recovery_email.pxtm');die();}
require_once('templates/login.pxtm');

?>
Как это грамотно можно решить ?
Последний раз редактировалось rosswe 2019.07.11, 22:22, всего редактировалось 2 раза.
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Вопрос касаемо реализации чата.

Сообщение rosswe »

Я понимаю .require_once лично для меня пройден, забытый этап, -давно используем "USE"
Но всё же..........
Аватара пользователя
Dominus
Сообщения: 892
Зарегистрирован: 2013.03.14, 21:27
Откуда: Россия, Иваново
Контактная информация:

Re: Вопрос касаемо реализации чата.

Сообщение Dominus »

Вот это портянка, из 90ых наверное)
MVC
Не спорь с дураком, иначе окружающие не правильно поймут кто из вас дурак!
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Вопрос касаемо реализации чата.

Сообщение rosswe »

спс Dominus ,- я это знаю у меня в дебе целая папка таких доках, но блин пока не получается -пока я не понимаю их почерк рнр ,- например вместо "echo" они используют "print"...и другие противоречия ,но код написан очень продуманно..
Аватара пользователя
maleks
Сообщения: 1985
Зарегистрирован: 2012.12.26, 12:56

Re: Вопрос касаемо реализации чата.

Сообщение maleks »

А что там внутри функции abc123 ?
Yii2 universal module sceleton - for basic and advanced templates
masson
Сообщения: 545
Зарегистрирован: 2012.07.03, 15:59

Re: Вопрос касаемо реализации чата.

Сообщение masson »

Что-то мне подсказывает, что изучать сей Magnum Opus тут желающих не найдется :-/
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Вопрос касаемо реализации чата.

Сообщение rosswe »

maleks писал(а): 2019.06.23, 16:29 А что там внутри функции abc123 ?
Извиняюсь за отсутствия были тех. проблемы.
incl/main.php

Код: Выделить всё

function abc123($n,$s){
$n=trim($n);
$n=preg_replace('/[^\p{L}\p{N} -]/u',$s,$n);
$n=preg_replace('/([\s])\1+/',' ',$n);
return $n;}
rosswe
Сообщения: 95
Зарегистрирован: 2017.01.09, 03:27
Откуда: Ставрополь
Контактная информация:

Re: Вопрос касаемо реализации чата.

Сообщение rosswe »

Разобрался, в этом сложном коде рнр, реализовал так -
Теперь после регистрации на сайте , при входе на чат от фонаря вбиваешь любой логин и заходишь как гость, но если он совпадает с зарегистрированным username в Б\Д чата,то перебрасывает на страницу где требуют пароль ,после 5 попытки неверного ввода ,БАН на час.

У меня такой вопрос -: , отдельна регистрация на чате это дополнительный функционал или бред ?
Ответить