Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Как исключить совпадение сгенерированных ключей добавленной категории?

Как исключить совпадение сгенерированных ключей добавленной категории?


     10.11.2020    ключ    Все вопросы » Общие вопросы по PHP    120

вопрос
Для генерации ключа использую следующее:
$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randkey = substr(str_shuffle($permitted_chars), 0, 8);
Ключ записываю в БД:
$db->query( "INSERT INTO " . USERPREFIX . "_category_approve
( ca_randkey) values
('" . $randkey . "')" );
Помогите исключить возможность генерации одинаковых ключей для категорий (как сделать проверку, что такой же ключ не сгенерирован уже в бд )
Спасибо

Ответил: macteram


$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

$randkey = substr(str_shuffle($permitted_chars), 0, 8);

$temp = $db->super_query("SELECT ca_randkey FROM " . USERPREFIX . "_category_approve WHERE ca_randkey = '$randkey'");

if( !$temp['ca_randkey'] ) $db->query( "INSERT INTO " . USERPREFIX . "_category_approve (ca_randkey) values ('" . $randkey . "')" );

9 комментариев

akella
Юзер

akella - 10 ноября 2020 22:32 -

$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

$randkey = substr(str_shuffle($permitted_chars), 0, 8);

$temp = $db->super_query("SELECT ca_randkey FROM " . USERPREFIX . "_category_approve WHERE ca_randkey = '$randkey'");

if( !$temp['ca_randkey'] ) $db->query( "INSERT INTO " . USERPREFIX . "_category_approve (ca_randkey) values ('" . $randkey . "')" );

macteram
Юзер

macteram - 11 ноября 2020 07:08 -

Спасибо за решение!

dj-avtosh
PHP-developer

dj-avtosh - 13 ноября 2020 11:38 -

а если ключ совпал, то просто ничего не создаст?))

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

akella
Юзер

akella - 13 ноября 2020 16:57 -

тогда так

$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';

$randkey = substr(str_shuffle($permitted_chars), 0, 8);

$temp = $db->super_query("SELECT ca_randkey FROM " . USERPREFIX . "_category_approve WHERE ca_randkey = '$randkey'");

while( $randkey == $temp['ca_randkey']){
    $randkey = substr(str_shuffle($permitted_chars), 0, 8);
}
$db->query( "INSERT INTO " . USERPREFIX . "_category_approve (ca_randkey) values ('" . $randkey . "')" );

сомневаюсь, что совпадет))

dj-avtosh
PHP-developer

dj-avtosh - 13 ноября 2020 17:05 -

там нужно select еще и внутри циклв сделать, иначе будет коллизия, никто не уверен в том, что внутри while новый $randkey не существует в таблице.

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

macteram
Юзер

macteram - 13 ноября 2020 18:21 -

Есть пару вопросов,
1) while( $randkey == $temp['ca_randkey']) - в этом случае randkey наоброт выберет одно из значений $temp
2)select еще и внутри циклв сделать - то есть temp и randkey перенести в цикл??

akella
Юзер

akella - 13 ноября 2020 18:32 -

$permitted_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
do {

$randkey = substr(str_shuffle($permitted_chars), 0, 8);

$temp = $db->super_query("SELECT ca_randkey FROM " . USERPREFIX . "_category_approve WHERE ca_randkey = '$randkey'");
}
while( $randkey == $temp['ca_randkey']);
$db->query( "INSERT INTO " . USERPREFIX . "_category_approve (ca_randkey) values ('" . $randkey . "')" );

dj-avtosh
PHP-developer

dj-avtosh - 13 ноября 2020 23:06 -

вот так лучше

ЯД: 41001679231462
Заказы в telegram (ремонт модулей, оптимизация нагрузок и т.п.): @blob42
В телегу писать сразу задачу и бюджет.

macteram
Юзер

macteram - 13 ноября 2020 18:34 -

Теперь понял, спасибо!

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх