Что нового

Вместо Логина присваивался автоматически id пользователя (1 Viewer)

  • Автор темы Maxim Mozes
  • Дата начала
Maxim Mozes

Maxim Mozes

Участник
Регистрация
27 Мар 2021
Сообщения
95
Реакции
217
Всем привет!
Хочу вообще избавиться от логина при регистрации и чтобы вместо логина присваивался автоматически id пользователя.
Пока только сделал, что можно регистрироваться без логина, но он остается пустым, нужно чтобы {$id} в базу данных записывался в поле Логина.
Знаю что нужно запрос делать в базу данных, но пока не разберусь какой, может даже не только запрос нужен.
Возможно есть тут которые помогут реализовать эту задачу.
 
В файле engine/modules/register.php
заменить
PHP:
            $db->query( "INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip, hash) VALUES ('{$name}', '{$regpassword}', '{$email}', '{$add_time}', '{$add_time}', '{$config['reg_group']}', '', '', '', '', '{$_IP}', '{$hash}')" );
            $id = $db->insert_id();
на
PHP:
            $db->query( "INSERT INTO " . USERPREFIX . "_users (password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip, hash) VALUES ('{$regpassword}', '{$email}', '{$add_time}', '{$add_time}', '{$config['reg_group']}', '', '', '', '', '{$_IP}', '{$hash}')" );
            $id = $db->insert_id();
            $db->query( "UPDATE TABLE " . USERPREFIX . "_users SET name = '{$id}' WHERE user_id = {$id}");

Ну, и везде, где нужно, заменить name на user_id
 
Последнее редактирование:
В файле engine/modules/register.php
заменить
PHP:
            $db->query( "INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip, hash) VALUES ('{$name}', '{$regpassword}', '{$email}', '{$add_time}', '{$add_time}', '{$config['reg_group']}', '', '', '', '', '{$_IP}', '{$hash}')" );
            $id = $db->insert_id();
на
PHP:
            $db->query( "INSERT INTO " . USERPREFIX . "_users (password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip, hash) VALUES ('{$regpassword}', '{$email}', '{$add_time}', '{$add_time}', '{$config['reg_group']}', '', '', '', '', '{$_IP}', '{$hash}')" );
            $id = $db->insert_id();
            $db->query( "UPDATE TABLE " . USERPREFIX . "_users SET name = '{$id}' WHERE user_id = {$id}");

Ну, и везде, где нужно, заменить name на user_id
Спасибо, осталось одно, после успешной регистрации выдает текст - Hacking attempt!, а так аккаунт созадеться, все хорошо
 
Спасибо, осталось одно, после успешной регистрации выдает текст - Hacking attempt!, а так аккаунт созадеться, все хорошо
Ну, надо смотреть, что вызывает эту ошибку и чинить
 
Ну, надо смотреть, что вызывает эту ошибку и чинить
Вот в этом коде нужно что то менять
PHP:
$user_arr = explode( "||", base64_decode( @rawurldecode( $_POST['id'] ) ) );

    if( $user_arr[0] == "" OR  $user_arr[2]== "" ) die("Hacking attempt!");

    $user = $db->safesql( trim( $user_arr[0] ) );
    $email = $db->safesql( trim( $user_arr[1] ) );
    $pass = $user_arr[2];
    $stronghash = sha1(DBHOST . DBNAME . SECURE_AUTH_KEY);

    if( sha1( $user . $email . $stronghash . $config['key'] ) != $user_arr[3] ) die( 'ID not valid!' );

    if( preg_match( "/[\||\'|\<|\>|\[|\]|\"|\!|\?|\$|\@|\/|\\\|\&\~\*\{\+]/", $user ) ) die( 'USER not valid!' );

    $row = $db->super_query( "SELECT * FROM " . USERPREFIX . "_users WHERE name = '{$user}'" );

    if( !$row['user_id'] ) die("Access Denied!");
    
    if( !password_verify($pass, $row['password']) ) die("Access Denied!");

    $db->free();
Если удалить вот эти строчки:
PHP:
if( $user_arr[0] == "" OR  $user_arr[2]== "" ) die("Hacking attempt!");

if( !$row['user_id'] ) die("Access Denied!");
    
    if( !password_verify($pass, $row['password']) ) die("Access Denied!");
То все идеально, но я знаю что это не правильно, но пока не разберусь как решить эту задачу.
 
Если нужна помощь, то так и пиши (больше без просьб помогать не буду). Поскольку ты удалил имя пользователя из формы регистрации, то скрипт ругается. Делаем так, в папке /engine/ajax создаём файл next_user_id.php
PHP:
<?php
/*
=====================================================
 DataLife Engine - by SoftNews Media Group
-----------------------------------------------------
 http://dle-news.ru/
-----------------------------------------------------
 Copyright (c) 2004-2022 SoftNews Media Group
=====================================================
 This code is protected by copyright
=====================================================
 File: next_user_id.php
-----------------------------------------------------
 Use: AJAX get next user id
=====================================================
*/

if(!defined('DATALIFEENGINE')) {
    header( "HTTP/1.1 403 Forbidden" );
    header ( 'Location: ../../' );
    die( "Hacking attempt!" );
}

function check_next_id() {
    global $db;

    $user = $db->super_query('SELECT user_id FROM ' . USERPREFIX . '_users ORDER BY user_id DESC LIMIT 1');
    return ((int)$user['user_id'] + 1);
}

if ( !$config['allow_registration'] ) {
    $dle_login_hash = sha1( SECURE_AUTH_KEY . $_IP );
}

if( $_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
    echo $lang['sess_error'];
    die();
}

echo check_next_id();

?>

в шаблоне registration.tpl добавляем в самый низ
HTML:
<script>
    function CheckUserID(){
        ShowLoading("");
        $.post(dle_root+"engine/ajax/controller.php?mod=next_user_id",{user_hash:dle_login_hash},function(e){
            HideLoading("");
            $("#user_id").html(e);
            $('[name="name"]').val(e);
        })
    }
    $(document).ready(function() {
        CheckUserID();
    });
</script>

в нужном месте вывести
HTML:
<span id="user_id"></span>
Тут главное ID, сюда будет выводить ID следующего пользователя.
А поле name нужно скрыть, как-то вот так
HTML:
<input type="hidden" name="name" id="name" required />

Не проверял на работоспособность. Но, могу сказать, что это не очень хороший метод регистрации. Если два пользователя одновременно будут регистрироваться, то может произойти казус
 
Если нужна помощь, то так и пиши (больше без просьб помогать не буду). Поскольку ты удалил имя пользователя из формы регистрации, то скрипт ругается. Делаем так, в папке /engine/ajax создаём файл next_user_id.php
PHP:
<?php
/*
=====================================================
DataLife Engine - by SoftNews Media Group
-----------------------------------------------------
http://dle-news.ru/
-----------------------------------------------------
Copyright (c) 2004-2022 SoftNews Media Group
=====================================================
This code is protected by copyright
=====================================================
File: next_user_id.php
-----------------------------------------------------
Use: AJAX get next user id
=====================================================
*/

if(!defined('DATALIFEENGINE')) {
    header( "HTTP/1.1 403 Forbidden" );
    header ( 'Location: ../../' );
    die( "Hacking attempt!" );
}

function check_next_id() {
    global $db;

    $user = $db->super_query('SELECT user_id FROM ' . USERPREFIX . '_users ORDER BY user_id DESC LIMIT 1');
    return ((int)$user['user_id'] + 1);
}

if ( !$config['allow_registration'] ) {
    $dle_login_hash = sha1( SECURE_AUTH_KEY . $_IP );
}

if( $_REQUEST['user_hash'] == "" OR $_REQUEST['user_hash'] != $dle_login_hash ) {
    echo $lang['sess_error'];
    die();
}

echo check_next_id();

?>

в шаблоне registration.tpl добавляем в самый низ
HTML:
<script>
    function CheckUserID(){
        ShowLoading("");
        $.post(dle_root+"engine/ajax/controller.php?mod=next_user_id",{user_hash:dle_login_hash},function(e){
            HideLoading("");
            $("#user_id").html(e);
            $('[name="name"]').val(e);
        })
    }
    $(document).ready(function() {
        CheckUserID();
    });
</script>

в нужном месте вывести
HTML:
<span id="user_id"></span>
Тут главное ID, сюда будет выводить ID следующего пользователя.
А поле name нужно скрыть, как-то вот так
HTML:
<input type="hidden" name="name" id="name" required />

Не проверял на работоспособность. Но, могу сказать, что это не очень хороший метод регистрации. Если два пользователя одновременно будут регистрироваться, то может произойти казус
Спасибо, извиняюcь что не указал что нужна помощь, пытаюсь еще сам что то придумать, да ты прав при регистрации одновременно двух пользователей может произойти казус это не очень подходит. Просто хочу избавиться от ввода логина, так как у меня при регистрации идет ввод Имя, Фамилия, e-mail и пароль, логин просто лишний. Еще подумал, а нельзя как то сделать чтобы произвольный логин давался автоматически, к примеру - 4qg6G82m, так как он мне не важен как выглядеть будет
 
к примеру - 4qg6G82m
вроде не плохой генератор. либо брать имена в транслите и объединить их. а можно и имя из майла, типа из mytypicalmail@mail.world брать mytypicalmail и добавлять нумерацию. будет выглядеть примерно так: mytypicalmail_1
 
Спасибо, извиняюcь что не указал что нужна помощь, пытаюсь еще сам что то придумать, да ты прав при регистрации одновременно двух пользователей может произойти казус это не очень подходит. Просто хочу избавиться от ввода логина, так как у меня при регистрации идет ввод Имя, Фамилия, e-mail и пароль, логин просто лишний. Еще подумал, а нельзя как то сделать чтобы произвольный логин давался автоматически, к примеру - 4qg6G82m, так как он мне не важен как выглядеть будет
Встроенная в php функция uniqid() может решит твою задачу, примеры использования https://www.php.net/manual/ru/function.uniqid.php

Пример запроса в БД:
PHP:
$db->query( "INSERT INTO " . USERPREFIX . "_users (name, password, email, reg_date, lastdate, user_group, info, signature, favorites, xfields, logged_ip, hash) VALUES ('" . uniqid() . "', '{$regpassword}', '{$email}', '{$add_time}', '{$add_time}', '{$config['reg_group']}', '', '', '', '', '{$_IP}', '{$hash}')" );
 
Последнее редактирование:
Всем спасибо за помощь, решил задачу! :skripka:
 

Пользователи, просматривающие данную тему

Верх