Wordpress — генерировать случайное уникальное число, используя атомарную операцию, и обновлять базу данныхPhp

Кемеровские программисты php общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Wordpress — генерировать случайное уникальное число, используя атомарную операцию, и обновлять базу данных

Сообщение Anonymous »

Я создал таблицу под названием wp_tickets, которая содержит диапазон номеров билетов, сгенерированных из настраиваемого поля, установленного в моем сообщении Wordpress. Столбцы в таблице: «id», «ticket_id», «lottery_id» и «used».

Я пытаюсь сгенерировать случайный уникальный номер, когда клиент покупает товары на моем веб-сайте.

Например, если клиент заказывает пять одинаковых товаров. Ему необходимо сгенерировать 5 случайных уникальных чисел на основе поля, установленного в метаполе продукта, «maximum_entries», а затем пометить эти числа как «используемые» в таблице wp_tickets.

Мне нужно, чтобы это была атомарная операция, чтобы клиенты не могли иметь одно и то же количество, если они заказывают одновременно.

На данный момент я создал функцию, которая будет вызываться на хуке woocommerce_order_status_processing, который проходит через каждый продукт в корзине и получает количество продукта. Затем я использовал функцию диапазона, чтобы превратить это значение в массив чисел, прежде чем вызывать array_rand.

Затем я использую $ticketallocated в своей функции обновления $wpdb.

У меня проблема в том, что если генерируемое число уже помечено в таблице как «используемое», то оно не возвращается к началу и не повторяет попытку. Мне нужно каким-то образом настроить оператор if/else, чтобы, если генерируемое случайное число равно 5, а в базе данных уже есть 5 как «использованное», тогда оно попытается использовать другое число.

add_action('acf/save_post', 'my_acf_save_post', 20);
function my_acf_save_post( $post_id ) {
global $wpdb;
$qty = get_field('maximum_entries');
$array = range(1, $qty);

foreach ($array as $ticket) {
$wpdb->insert('wp_tickets', array(
'ticket_number' => $ticket,
'lottery_id' => $post_id,
));
}
}

add_action( 'woocommerce_order_status_processing', 'ektgn_meta_to_line_item', 20, 4 );

function ektgn_meta_to_line_item( $order_id )
{

$order = wc_get_order($order_id);

foreach( $order->get_items() as $item_id => $item_product ) {
global $wpdb;

$product_id = $item_product->get_product_id();
$qty = get_field('maximum_entries', $product_id, true);
$ticketOptions = range(1, $qty);
$ticketAllocated = array_rand($ticketOptions, 1);

$wpdb->query(
"
UPDATE wp_tickets
SET used = 1
WHERE ticket_number= ".$ticketAllocated." AND lottery_id = ".$product_id." AND used = 0
"
);

}

}


Подробнее здесь: https://stackoverflow.com/questions/542 ... pdate-data
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Php»