#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. Спасибо, да, мне не хватало одинарных кавычек
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) {