作者saininniang (sob)
看板PHP
标题Re: [请益] submit後,乱数值跑掉
时间Sat Nov 18 14:47:03 2006
※ 引述《foxzgerald (O⊥M)》之铭言:
: 变数有两种特性:视界(scopes)、和生命周期(lift time)。
: 视界是指某变数可被存取的范围,分为区域变数、全域变数两种;
: 而生命周期则是指变数存在的时间,生命周期的长短通常跟该变数
: 的视界大小有关。例:某些函式(function)中的(区域)变数,
: 一但离开了该区块,那麽该变数便失效。不过,若该变数是以传参
: 考(reference)的方式传入函式,那麽确切的生命周期得视呼叫者
: (caller)的内涵而定。
: 你的问题主要是卡在生命周期上。这麽讲好了:你产生的乱数阵列
: 无法活到另外一个页面(重新 loading算是开新页面)。
: 解决的方式,即是以延长生命周期、或是赋予新的生命周期的方式
: 来使变数保持相同的内容。
: 延长生命周期的方式,是用将变数拷贝入 $_SESSION[]阵列,让
: session 变数储存该变数的值。 session 的生命周期,大致以
: 开启该网页为始、关闭该页面为末(可能关闭浏览器、或是分页)
: 这期间不管如何切换页面, session 的值都可被存取(如果没发
: 生意外的话....偶尔会有些 bugs ="=)
: 以新的浏览器开启同一页面、是属於不同的 session;至於新的
: 分页就不一定了,这和浏览器的特性有关。
: 而赋予新的生命周期,则是以资料库、或是 cookie 的方式将变
: 数的值储存起来,假以时日再将该值 loading致变数中。例如:
: 购物车就将内容储存在资料库中。(精确的来说,这并非延长了
: 变数的生命周期,因为变数仍会在某个时间点挂掉;但我们关心
: 的并非载体、而是载体上的内容。)除了资料库和cookie之外,
: 我於上篇文章另有提到一点:将值存回 form 之中。不过这不符
: 合你的需求,所以就不仔细提了。
: x x x
: 程式的逻辑大致如下。
: 1. 检查 $_SESSION['rand_value'] 是否存在
: 1.1 若否,则产生一乱数後,将之存入 $_SESSION['rand_value'] 中
: 2. 接收 form 传入的数值
: 2.1 与 $_SESSION['rand_value'] 比对之後,回传结果。
: ===
: <?php
: session_start(); // 刚刚忘了加这个 = =
: function randValueGenerator() {
: //产生乱数之後回传
: return randValue;
: }
: if(isset($_SESSION['rand_value']))
: $_SESSION['rand_value'] = randValueGenerator();
: if(isset($_POST['n'])) {
: if ($_POST['n'] > $_SESSION['rand_value'])
: echo "太大了";
: elseif ($_POST['n'] < $_SESSION['rand_value'])
: echo "太小了";
: else
: echo "right";
: }
: ?>
谢谢你播时间回答,
我只学过java,c等高阶语言
最近刚学php,对於session完全没有头绪
经过你的解释之後,我对session有了初步的认识
不过还需一段时间来熟悉
我刚自己try了一下
也改了一些地方
session好像仍然没有达到功效
怎麽猜都只出现「太大了」
能再帮我看一下吗?
因为这个简单的例子都不能顺利work的话
我对於session还是一知半解
麻烦你了.谢谢
<?
session_start();
function randValueGenerator() {
$rand_value=rand(1,100); //产生乱数之後回传
return rand_value;
}
if(isset($_SESSION['rand_value']))
{
//$_SESSION['rand_value'] = randValueGenerator();
$_SESSION['rand_value'] = rand(1,100);
}
if(isset($_POST['n'])) {
if ($_POST['n'] > $_SESSION['rand_value'])
echo "太大了";
elseif ($_POST['n'] < $_SESSION['rand_value'])
echo "太小了";
else
echo "right";
}
?>
<html>
<head>
<title>guess</title>
</head>
<body>
<center>
<form method="post">
请输入搜寻的数字:<input type="text" name="n">
<input type="submit" value="送出">
</form>
</center>
</body>
</html>
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.133.142.122
※ 编辑: saininniang 来自: 220.133.142.122 (11/18 14:48)
1F:→ foxzgerald:学过 java 的话.可以挖一下 jsp.里头会介绍 session :) 11/18 15:00