Технический сбой

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

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


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

вопрос
Для генерации ключа использую следующее:
$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 - -

$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 - -

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

dj-avtosh
PHP-developer

dj-avtosh - -

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

По заказам пишем сюда: @Rud00y

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

akella
Юзер

akella - -

тогда так

$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 - -

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

По заказам пишем сюда: @Rud00y

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

macteram
Юзер

macteram - -

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

akella
Юзер

akella - -

$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 - -

вот так лучше

По заказам пишем сюда: @Rud00y

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

macteram
Юзер

macteram - -

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

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

наверх