Скрипт безопасности: сделать значение строчным и удалить пробелы перед применением

На моей странице регистрации у меня есть секретный вопрос, на который пользователь должен ответить. Он отлично работает и остановил спам-ботов.

Вот сценарий (очень легкий):

add_action( 'register_form', 'add_register_field' );
function add_register_field() { ?>
<p>
<label><?php _e('What is the name of the ship in the TV show Firefly?') ?><br />
<input type="text" name="user_proof" id="user_proof" class="input" size="25" tabindex="20" /></label>
</p>
<?php }

add_action( 'register_post', 'add_register_field_validate', 10, 3 );
function add_register_field_validate( $sanitized_user_login, $user_email, $errors) {
if (!isset($_POST[ 'user_proof' ]) || empty($_POST[ 'user_proof' ])) {
return $errors->add( 'proofempty', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question.'  );
} elseif ( strtolower( $_POST[ 'user_proof' ] ) != 'serenity' ) {
return $errors->add( 'prooffail', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question correctly.'  );
}
}

А вот изображение того, как это выглядит:

введите описание изображения здесь

Таким образом, ответ, который пользователь должен ввести, serenity, Проблема в том, что некоторые пользователи вводят его как Serenityили добавить случайное пустое место где-нибудь.

У меня вопрос, как я могу сделать так, чтобы вводимое ими значение преобразовывалось в нижний регистр и удалялись все пробелы предшествующий проверить правильность значения? Таким образом, если они вводят Ser enItY, все будет хорошо.

0

Решение

использование str_replace(' ', '', $string) убрать пробелы; trim($string) удалить любой другой «мусор» вокруг ввода; strtolower($string) чтобы получить строку в нижнем регистре. Для сравнения строки используйте strcmp($string, $string1) В итоге вы получите:

if (strcmp('serenity', strtolower(str_replace(' ', '', trim($_POST['user_proof'])))) == 0)

В вашем коде:

function add_register_field_validate($sanitized_user_login, $user_email, $errors) {
if (empty($_POST['user_proof'])) {
return $errors->add('proofempty', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question.' );
} elseif (strcmp('serenity', strtolower(str_replace(' ', '', trim($_POST['user_proof'])))) != 0) {
return $errors->add('prooffail', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question correctly.' );
}
}
1

Другие решения

$user_proof = $_POST[ 'user_proof' ]; // this is the form field being posted.
$user_proof = strtolower($user_proof); // this will convert it to lower case
$user_proof = str_replace(" ", "", $user_proof); // this will remove spaces in string

Eidt: Согласно вашему запросу:

function add_register_field_validate( $sanitized_user_login, $user_email, $errors)
{
if (!isset($_POST[ 'user_proof' ]) || empty($_POST[ 'user_proof' ]))
{
return $errors->add( 'proofempty', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question.'  );
}

$user_proof = $_POST[ 'user_proof' ]; // this is the form field being posted.
$user_proof = strtolower($user_proof); // this will convert it to lower case
$user_proof = str_replace(" ", "", $user_proof); // this will remove spaces in string

if ( $user_proof != 'serenity' )
{
return $errors->add( 'prooffail', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question correctly.'  );
}
}
1

if($input != 'serenity'){
//Show errors
}

function add_register_field_validate( $sanitized_user_login, $user_email, $errors) {if (!isset($_POST[ 'user_proof' ]) || empty($_POST[ 'user_proof' ])) {
return $errors->add( 'proofempty', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question.'  );
} elseif (strtolower(str_replace(' ', '', strip_tags(stripslashes($_POST['user_proof'])))) != 'serenity' ) {
return $errors->add( 'prooffail', '<strong>ERROR</strong>: You did not answer the proof-of-humanship question correctly.'  );
}
}
0
По вопросам рекламы [email protected]