add capchta frm subsripts

This commit is contained in:
2025-03-02 02:36:19 +03:00
parent 22be9e82d4
commit 8be4f1c0fa
4 changed files with 128 additions and 82 deletions

View File

@@ -6,81 +6,95 @@ get_header();
<h1 id="mainpage-title">Подписка на рассылку</h1>
<div id="fulltext">
<? // режим подтверждение подписки
if (isset( $_GET['id'] )){
$sanitized_id = sanitize_text_field( $_GET['id'] );
$sql_update = "UPDATE {$wpdb->prefix}subusers SET status = 1 WHERE hash = '$sanitized_id'";
$result = $wpdb->get_results( $sql_update );
echo '<p>Спасибо, мы включили Ваш e-mail!</p>
<p>Наши письма могут оказаться в разделе "Рассылки" Вашего почтового приложения или сайта.</p>';
}
elseif( !isset($_POST['mytext']) || $_POST['mytext'] !== ''){ // поле должно быть пустым - заполнить может только бот
echo '<p>Не можем подтвердить ваши данные. Пожалуйста, повторите попытку.</p>';
}
elseif ( !isset($_POST['subscription_nonce']) || !wp_verify_nonce($_POST['subscription_nonce'], 'subscription_form_nonce') ) {
echo ('<p>Неверный запрос. Пожалуйста, повторите попытку.</p>');
}
elseif( !isset($_POST['addrhash']) || $_POST['addrhash'] !== adddr_hash() ){
echo '<p>Не можем опеределить ваши данные. Пожалуйста, повторите попытку.</p>';
}
elseif (isset($_POST['email'])) {
$email = strtolower(trim($_POST['email']));
$email = sanitize_text_field($email);
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$hash = md5('775+'.$email);
$date_insert = date('Y-m-d H:i:s');
$add_sub_sql = "INSERT INTO {$wpdb->prefix}subusers (mail, status, hash, date) VALUES ('$email', '0', '$hash', '$date_insert')";
<?php echo handle_subscription_confirmation(); ?>
</div>
//$result = $wpdb->get_results($add_sub_sql);
$hash_link = home_url().'/subscript?id='.$hash;
$to = $email;
$subject = 'Подписка на рассылку ВиЖ';
$message = "
Здравствуйте!\n
Для подтверждения подписки на нашу рассылку перейдите по ссылке ниже\n
$hash_link.\n\n
Если вы не отправляли заявку просто проигнорируйте это письмо.";
</div>
$headers = array('Content-Type: text/plain; charset=UTF-8');
// Отправка письма
//wp_mail($to, $subject, $message, $headers);
<?php get_footer();
echo '<p>Благодарим за интерес к нашему изданию!</p>
<p>На Вашу почту отправлено письмо для подтверждения подписки.</p>';
function handle_subscription_confirmation() {
} else { ?>
global $wpdb;
$html = '';
$err = '<p>Не можем подтвердить ваши данные. Пожалуйста, повторите попытку.</p>';
<p>Мы не можем добавить Вас в нашу рассылку.</p>
<p>Адрес электронной почты недействительный.</p>
<? }
// Режим подтверждения подписки
if (isset($_GET['id'])) {
$sanitized_id = sanitize_text_field($_GET['id']);
$sql_update = $wpdb->prepare("UPDATE {$wpdb->prefix}subusers SET status = 1 WHERE hash = %s", $sanitized_id);
$wpdb->query($sql_update);
$html .= '<p>Спасибо, мы включили Ваш e-mail!</p>
<p>Наши письма могут оказаться в разделе "Рассылки" Вашего почтового приложения или сайта.</p>';
return $html;
}
}?>
</div>
// Поле mytext должно быть пустым
if (!empty($_POST['mytext'])) {
return $err;
}
// Проверка nonce
if (!isset($_POST['subscription_nonce']) || !wp_verify_nonce($_POST['subscription_nonce'], 'subscription_form_nonce')) {
return $err;
}
// Проверка hash адреса
//if (!isset($_POST['addrhash']) || $_POST['addrhash'] !== adddr_hash()) {
// return $err;
//}
// Основная обработка подписки
if (isset($_POST['email'])) {
if (!isset($_POST['re_num']) || !isset($_POST['re_code'])) {
return $err;
}
$user_answer = (int)$_POST['re_num'];
$expected_hash = hash_hmac('sha256', $user_answer, FRM_KEY);
if ($_POST['re_code'] === $expected_hash) {
$email = strtolower(trim($_POST['email']));
$email = sanitize_email($email);
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
$hash = md5('775+' . $email);
$date_insert = current_time('mysql');
$wpdb->insert(
"{$wpdb->prefix}subusers",
[
'mail' => $email,
'status' => 0,
'hash' => $hash,
'date' => $date_insert
],
['%s', '%d', '%s', '%s']
);
$hash_link = home_url('/subscript?id=' . $hash);
$to = $email;
$subject = 'Подписка на рассылку ВиЖ';
$message = "Здравствуйте!\n\nДля подтверждения подписки на нашу рассылку перейдите по ссылке ниже\n$hash_link.\n\nЕсли вы не отправляли заявку, просто проигнорируйте это письмо.";
$headers = ['Content-Type: text/plain; charset=UTF-8'];
//wp_mail($to, $subject, $message, $headers);
$html .= '<p>Благодарим за интерес к нашему изданию!</p>
<p>На Вашу почту отправлено письмо для подтверждения подписки.</p>';
} else {
}
} else {
return $err;
}
} else {
return $err;
}
</div>
<?php get_footer();
return $html;
}