На моей странице регистрации у меня есть секретный вопрос, на который пользователь должен ответить. Он отлично работает и остановил спам-ботов.
Вот сценарий (очень легкий):
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
, все будет хорошо.
использование 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.' );
}
}
$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.' );
}
}
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.' );
}
}