【问题标题】:PHP session clearing out on page refresh - show and hide based on input页面刷新时清除 PHP 会话 - 根据输入显示和隐藏
【发布时间】:2018-03-08 21:11:22
【问题描述】:

所以我有两个页面,两个页面都有一个输入字段,如果用户填写输入字段并转到下一页,他们将在表单的位置看到新内容。所以它基本上就像“填写此表格并显示新内容”。无论您是在 A 页还是 B 页填写表格,其他页面都会识别您是否已填写。有意义吗?

只要您不刷新页面或进入其他页面(而不是单击提交输入),它就可以工作。

我在这里做错了什么?

<!--- Page A -->

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
	<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport">
	<meta content="noindex, nofollow" name="robots">
	<title>Page A</title>
	<meta content="Page" name="description">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>

			
	<form action="/b.php" id="l-form" method="post" name="l-form">
		<div class="wrapper localize" style="<?php if(isset($_POST['treasure'])) { echo "display:none;"; } else { echo "display:block;"; } ?>">
		    <div class="header_container">
		      <h2>Make sure we offer service at your location</h2>
		    </div>		      
		    <div class="input_container">
		          <input autocomplete="off" class="input-box street" id="street" name="userLogin" placeholder="Street address" tabindex="0" type="text">
		          <input autocomplete="off" class="input-box suite" id="suite" name="suite" placeholder="Suite (Optional)" tabindex="0" type="text">
		          <input autocomplete="off" class="input-box zipcode" id="zipcode" name="zipcode" placeholder="Zip code" tabindex="0" type="text">
		          <input type="submit" name="treasure" value="See offers">
		      </div>
		  </div>
		    <!-- results 3 -->
		    <div class="results" style="<?php if(isset($_POST['treasure'])) { echo "display:block;"; } else { echo "display:none;"; } ?>">
		      <p class="results-heading">Excellent news. We know who you are.</p
		    </div>
	</form>
		
	

</body>
</html>

<!--- Page B -->

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible">
	<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui" name="viewport">
	<meta content="noindex, nofollow" name="robots">
	<title>Page A</title>
	<meta content="Page" name="description">
	<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
</head>

			
	<form action="/a.php" id="l-form" method="post" name="l-form">
		<div class="wrapper localize" style="<?php if(isset($_POST['treasure'])) { echo "display:none;"; } else { echo "display:block;"; } ?>">
		    <div class="header_container">
		      <h2>Make sure we offer service at your location</h2>
		    </div>		      
		    <div class="input_container">
		          <input autocomplete="off" class="input-box street" id="street" name="userLogin" placeholder="Street address" tabindex="0" type="text">
		          <input autocomplete="off" class="input-box suite" id="suite" name="suite" placeholder="Suite (Optional)" tabindex="0" type="text">
		          <input autocomplete="off" class="input-box zipcode" id="zipcode" name="zipcode" placeholder="Zip code" tabindex="0" type="text">
		          <input type="submit" name="treasure" value="See offers">
		      </div>
		  </div>
		    <!-- results 3 -->
		    <div class="results" style="<?php if(isset($_POST['treasure'])) { echo "display:block;"; } else { echo "display:none;"; } ?>">
		      <p class="results-heading">Excellent news. We know who you are.</p
		    </div>
	</form>
		
	

</body>
</html>

【问题讨论】:

  • 你没有使用任何会话变量;刷新重新加载页面 http 是无状态的,它的工作方式与我目前期望的一样
  • 我添加了 $_SESSION['treasure'] = $_POST['treasure'];到页面顶部,它仍然无法正常工作。我错过了什么?用户点击提交后,我希望隐藏输入字段并显示新 div 与其他内容。也许这是不可能的?

标签: php session cookies


【解决方案1】:

您没有在任何地方使用会话变量。当有人提交您的表单时,您需要执行以下操作:

$_SESSION['treasure'] = $_POST['treasure'];

设置“宝藏”会话变量。在其他页面上或刷新后,您可以访问 $_SESSION['treasure']。

目前,当您单击 submt 时,这似乎有效,因为您使 $_POST['treasure'] 可用于目标页面,而不是因为您按预期使用会话。

【讨论】:

  • 我对这个真的很陌生,并试图绕开它。我刚刚添加了 $_SESSION['treasure'] = $_POST['treasure'];到页面顶部,它仍然无法正常工作。我错过了什么?用户点击提交后,我希望隐藏输入字段并与其他内容一起显示新 div。
  • @Phillyday 没关系。设置 $_SESSION['treasure'] 后,您希望稍后检查它而不是 $_POST['treasure']。因此,不要检查 $_POST['treasure'] 以确定输入字段是否显示,而是检查 $_SESSION['treasure']。这里的基本误解是 HTTP 是无状态的,$_POST 只存在于您发布数据的页面上,$_SESSION 一直存在直到它过期或触发 session_destroy() 或 1440 秒后。
  • 如何检查 $_SESSION['treasure'] ?它会在这里:style=""。还是我在其他地方添加一些东西?
  • 如果您在早期设置了 $_SESSION['treasure'] = $_POST['treasure'],那么将 $_POST['treasure'] 的所有其他用法替换为 $_SESSION['treasure'] .您可以在此处了解更多关于 PHP 会话的信息:w3schools.com/php/php_sessions.asp,以及更多关于 PHP 中的 HTTP 请求的信息:tutorialspoint.com/php/php_get_post.htm
  • 非常感谢!你的建议就像魅力一样。感谢您对我的耐心并发送这些链接。
猜你喜欢
  • 1970-01-01
  • 2012-11-05
  • 1970-01-01
  • 2017-04-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多