Если данные существуют в таблице, не сохраняйте снова

#php #wordpress

#php #wordpress

Вопрос:

В моем WordPress версии 5.5.3 у меня есть форма, и с помощью функции ниже я пытаюсь проверить, существуют ли данные с помощью ключа электронной почты:

 // EMAIL
$email = filter_input(INPUT_POST, 'email');

// TABLE
global $wpdb;
$tablename = $wpdb->prefix . 'new_table';

//CHECK IF EMAIL EXISTS
$email_exists = "SELECT * FROM $tablename WHERE form_email = $email";
$email_exists_results = $wpdb->get_results($email_exists);

// IF EMAIL DOES NOT EXISTS, REGISTER EMAIL    
if (count($email_exists_results) == 0) {
    $data = array(
        'form_email' => $email,
);
$wpdb->insert($tablename, $data);

} else {
    // IF EMAIL EXISTS, SEND MAIL
    wp_mail();
}
 

Приведенный выше код снова сохраняет существующее электронное письмо в таблице.

Как я могу не сохранять дубликат электронной почты в таблице?

Комментарии:

1. скорее всего, ваш запрос завершается с ошибкой из-за отсутствия кавычек вокруг $email, и вам следует использовать параметризованные запросы для предотвращения SQL-инъекций

2. Спасибо, да, мне не хватало одинарных кавычек $email в запросе.

3. Было бы здорово, если бы вы могли рассказать мне, как использовать параметризованные запросы в этом примере. Заранее спасибо.

Ответ №1:

Вы можете сделать следующее:

 global $wpdb;
// get_var returns a single value 
$count = $wpdb->get_var(
// prepare takes care of parameters
// Select count() retuns a scalar value not the whole row
  $wpdb->prepare("SELECT count(*) FROM %s WHERE form_email = '%s'",
    $wpdb->prefix . 'new_table',
    filter_input(INPUT_POST, 'email')
  )
);
// Using strict comparison to avoid implicit type conversion 
if ($count === 0)
{
    // Email not in the db
}
else
{
}
 

Комментарии:

1. Данные не сохраняются с помощью приведенного выше кода. Это работает $email_exists = "SELECT * FROM $tablename WHERE form_email = $email"; $email_exists_results = $wpdb->get_results($email_exists); // IF EMAIL DOES NOT EXISTS, REGISTER EMAIL if (count($email_exists_results) == 0) {