如何解决有没有办法使重定向工作,而不是在PHP / WordPress中单击浏览器的后退按钮后返回到表单页面?
我有一个小问题。我在页面上创建了一个表单,该表单使用$ _POST发送数据。正在检查数据是否有错误,如果有任何错误,则该页面将返回显示错误的表单。从$ _POST变量获取错误。如果最终输入正确的数据,我将被重定向到主页。但是,如果我单击“后退”按钮,则可以再次看到带有提交错误的表单(以前是从$ _POST获取)。是否可以返回但查看主页而不是出现错误的登录表单?
此外,当我立即输入正确的数据时,这种情况就不会发生。如果发生这种情况,则单击“后退”按钮后,将看不到任何表单,只有主页。仅当我首先输入不正确的数据和正确的数据时,表单(单击后退按钮之后)才可见。
这是在WordPRess中,因此您可以在下面的代码中看到一些与WP相关的内容。
这是登录表单:
echo 'Login Form';
$tw_email_err = '';
$tw_email = '';
$tw_form = tw_login_process(); // This function is below. It processes the form input.
$tw_email = $tw_form['email'];
$tw_email_err = $tw_form['message'];
$tw_consent_err = $tw_form['consent_msg'];
echo '<h2>Form</h2>
<form method="post">';
wp_nonce_field( 'tw_login_form','tw_login_nonce' );
echo '<input type="text" placeholder="e-mail" name="tw_email" value="' . esc_attr( $tw_email ) . '">
<span class="tw-error">* ' . esc_html( $tw_email_err ) . '</span>
<br><br>
<input type="checkbox" id="tw_consent_check" name="tw_consent" value="on">
<label for="tw_consent_check">Zgoda</label><br>
<span class="tw-error">* ' . esc_html( $tw_consent_err ) . '</span>
<br><br>
<p><span class="error">* required field</span></p>
<input type="submit" name="submit" value="Submit">
</form>';
表格处理:
function tw_login_process() {
$trzywu_users = tw_get_users(); // Get saved users from database,works OK.
if ( isset( $_SERVER['REQUEST_METHOD'] ) && 'POST' === $_SERVER['REQUEST_METHOD'] ) {
$tw_check_email = ( isset( $_POST['tw_email'],$_POST['tw_login_nonce'] ) && wp_verify_nonce( sanitize_key( $_POST['tw_login_nonce'] ),'tw_login_form' ) )
? sanitize_text_field( wp_unslash( $_POST['tw_email'] ) )
: '';
$tw_check_consent = ( isset( $_POST['tw_consent'],'tw_login_form' ) )
? sanitize_text_field( wp_unslash( $_POST['tw_consent'] ) )
: '';
if ( $tw_check_email ) {
$tw_check_result['email'] = $tw_check_email;
if ( $trzywu_users && filter_var( $tw_check_email,FILTER_VALIDATE_EMAIL ) && in_array( $tw_check_email,$trzywu_users,true ) ) {
$tw_check_result['check'] = 'valid_existent';
$tw_check_result['message'] = '';
} elseif ( ! filter_var( $tw_check_email,FILTER_VALIDATE_EMAIL ) ) {
$tw_check_result['check'] = 'not_valid';
$tw_check_result['message'] = 'Nieprawidłowy format adresu e-mail.';
} elseif ( ! $trzywu_users || ! in_array( $tw_check_email,true ) ) {
$tw_check_result['check'] = 'not_existent';
$tw_check_result['message'] = 'Adres e-mail nie jest zarejestrowany.';
}
} else {
$tw_check_result['email'] = '';
$tw_check_result['check'] = 'not_set';
$tw_check_result['message'] = 'Podaj adres e-mail';
}
$tw_check_result['consent'] = 'on' === $tw_check_consent ? 'consent_granted' : 'no_consent';
if ( 'on' === $tw_check_consent ) {
$tw_check_result['consent'] = 'consent_granted';
$tw_check_result['consent_msg'] = '';
} else {
$tw_check_result['consent'] = 'no_consent';
$tw_check_result['consent_msg'] = 'Wyraź zgodę na warunki Polityki Prywatności.';
}
return $tw_check_result;
}
}
最后是重定向:
function tw_user_redirect() {
global $tw_cookie_name; // This is cookie name for setcookie,don't worry about that.
header( 'Cache-Control: no cache' ); // I'm using this to eliminate form resubmission error. Is it OK?
session_cache_limiter( 'private_no_expire' );
session_start();
$tw_result = tw_login_process(); //That's above form's processing.
$tw_users = tw_get_users(); // Just additional check,works OK.
$tw_login_page = tw_get_login_page_id(); //this function gets login page ID,it works OK.
if ( 'consent_granted' === $tw_result['consent'] && 'valid_existent' === $tw_result['check'] ) {
if ( in_array( $tw_result['email'],$tw_users,true ) ) {
$cokie_session_value = tw_password_hash( $tw_result['email'] );
$_SESSION['user'] = $cokie_session_value;
setcookie( $tw_cookie_name,$cokie_session_value,time() + ( 86400 * 7 ),'/' ); //Not important,I suppose?
}
wp_safe_redirect( home_url() );
exit;
}
// This somehow doesn't work after clicking back button. It works in any other scenario though.
if ( isset( $_SESSION['user'] ) && is_page( $tw_login_page ) ) {
wp_safe_redirect( home_url() );
exit;
// This works as expected.
} elseif ( ! isset( $_SESSION['user'] ) && ! is_page( $tw_login_page ) ) {
wp_safe_redirect( get_permalink( $tw_login_page ) );
exit;
}
}
add_action( 'template_redirect','tw_user_redirect' );
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。