我有一个wordpress网站,其中有一个表单,用户在其中输入用户名,提交后将其重定向到另一个页面。在此页面中,正在显示数据库中与用户相关的一些数据。我正在尝试创建一个搜索表单,该表单将仅显示与表单输入有关的数据,例如年份或类似内容。
以下是原始表单的代码:
add_action('init', function () {
$username = ( isset($_POST['luname']) ? $_POST['luname'] : '' );
//$pass = ( isset($_POST['lupass']) ? $_POST['lupass'] : '' );
setcookie("usernameCookie", $username, time()+3600, COOKIEPATH, COOKIE_DOMAIN);
if( isset( $_POST['mysubmitbtn'] ) ) {
wp_redirect('http://mysite/somedata/');
exit;
}
});
这是页面中将用户重定向到的代码:
<?php
$s=$_COOKIE["usernameCookie"] ;
if ( username_exists( $s ) ) {
global $wpdb;
echo "<b>user: ".$s."</b>";
echo
'<form method="post" name="myForm">
<input type="text" name="year" placeholder="Year"/>
<input type="submit" value="Search" name="srchbtn"/>
</form>';
$year = ( isset($_POST['year']) ? $_POST['year'] : '' );
if( isset( $_POST['srchbtn'] ) ) {
$year = $_POST['year'];
$results = $wpdb->get_results($wpdb->prepare("Select * From mytable Where user_login = %s and year = %d", $s, $year));
foreach ( $results as $result ) {
echo
'<div style="text-align: left;"><br>
<span style="font-family: Arial;">'.$result->description.'</span>
</div>';
}
}
else {
$results = $wpdb->get_results($wpdb->prepare("Select * From mytable Where user_login = %s", $s));
foreach ( $results as $result ) {
echo
'<div style="text-align: left;"><br>
<span style="font-family: Arial;">'.$result->description.'</span>
</div>';
}
}
}
else echo '
<h3 style="text-align: center; color: red;">Username '.$s.' does not exist.</h3>';
?>
问题是,如果我刷新此页面,则数据丢失并且显示“用户名不存在”,因此,为了使用户查看数据,他必须返回到原始页面并提交用户名再次。如果他以表格形式提交年份,也会发生这种情况,这是否意味着cookie被销毁了?谁能提供一些有关为什么以及如何解决问题的思路?
谢谢!
答案 0 :(得分:0)
在每个请求上执行init动作。您每次都会覆盖它。
您仅应在有用户的情况下设置cookie,例如:
if ($username) {
setcookie("usernameCookie", $username, time()+3600, COOKIEPATH, COOKIE_DOMAIN);
}