Функция генерации промо кода и проверка чтобы не было совпадений в БД

175
26 июля 2018, 13:10

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

Если после проверки по БД совпадений не найдено происходила бы запись.

Подскажите как правильно написать функцию.

Есть код:

function gen_code($length = 7){
                    $num = range(0, 9);
                    $symbols = array_merge($num, $_alf);
                    shuffle($symbols);
                    $code_array = array_slice($symbols, 0, (int)$length);
                    $code = implode("", $code_array);
                    return $code;
                }
                $resultStat = $mysqli->query("SELECT id,promocode FROM stat WHERE promocode !== '0' and hash_person = '$global_id_visit' and idp = '$idp'");
                // если находит промо код.
                if ($resultStat->num_rows) {
                    $rowStat = $resultStat->fetch_assoc();
                    // удаляем из поля код.
                    $mysqli->query("UPDATE stat SET promocode = '0' WHERE id = $rowStat['id']");
                    // заносим его в переменную
                    $promocode = $rowStat['promocode'];
                } else { // если не находим код, то генерируем новый
                    $promocode = gen_code(5);
                    // проверяем с генерированный код на совпадение.
                    $checkStatCT = $mysqli->query("SELECT id,promocode FROM stat WHERE promocode == '$promocode' and idp = '$idp'");
                    if ($resultStat->num_rows > 0) {
                        $promocode = gen_code(5);
                    }
                }

Может, брать все promocode из БД, заносить их в массив и передавать в функцию, уже в ней делать проверку на совпадение, но как в функции генерации эту штуку дописать?

READ ALSO
Retrofit2 POST запрос с параметрами

Retrofit2 POST запрос с параметрами

Использую Retrofit2, хочу отправить на сервер POST параметры

206
Как изменить способ позиционирования в ImageMagick?

Как изменить способ позиционирования в ImageMagick?

Хотелось бы задавать позиционирование текста (annotate) от верхнего левого края, а не от нижнего левого края

161
Отображение информации при выборе option в select box

Отображение информации при выборе option в select box

нужно организовать отображение картинки с описанием к нему при выборе option в select box, которое будет выводится слева от select

170
Изменение хеша в переменных

Изменение хеша в переменных

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

168