PHP-会话、洗牌函数和数组
因此,我创建了一个测验,通过使用PHP-会话、洗牌函数和数组,php,Php,因此,我创建了一个测验,通过使用shuffle()函数在最后生成一个随机引号 当我刷新页面时,我会重复地从数组中获取不同的值 我希望它保持在相同的值 这是我的密码: <?php $answer=array( "Good job.", "Great work!", "Excellent." ); shuffle ($answer); echo $answer[0]; ); 提前谢谢 已编辑(仍然不起作用。) 命令session\u start()只会使会话可用,并且在大多数
shuffle()
函数在最后生成一个随机引号
当我刷新页面时,我会重复地从数组中获取不同的值
我希望它保持在相同的值
这是我的密码:
<?php
$answer=array(
"Good job.",
"Great work!",
"Excellent."
);
shuffle ($answer);
echo $answer[0];
);
提前谢谢
已编辑(仍然不起作用。)
命令
session\u start()
只会使会话可用,并且在大多数配置中已经完成。您需要做的是实现将答案存储到会话中的实际代码,并从那里重试(如果可用)
一个小样本(不是完整的代码,您可能想自己学习)可能如下所示:
if( isset $_SESSION["myAnswer"] ){
$answerIdx = $_SESSION["myAnswer"];
}
else{
// Do it like you did before...
$_SESSION["myAnswer"] = $answerIdx;
}
下面是一个饼干的例子。我们不洗牌数组,而是取一个随机键,然后将其保存到cookie中。由于cookies可以被篡改,我们确保适当地验证该值
$answer = array(
"Good job.",
"Great work!",
"Excellent."
);
if (isset($_COOKIE['answer'])) {
$answer_key = $_COOKIE['answer'];
}
if (!isset($answer_key) || !isset($answer[$answer_key])) {
$answer_key = rand(0, count($answer)-1);
setcookie('answer', $answer_key, time()+9999);
}
echo $answer[$answer_key];
这只适用于键为数字(0,1,…,n)的数组。使用前请确保不要输出任何内容(包括空格)。当然可以,如果
shuffle
,则每次执行代码时,答案都是随机不同的。如果您在使用cookie或会话实现解决方案时遇到问题,请让我们更详细地了解这些问题。我确信我确实这样做了,但我的变量在其中,它无法工作。然后请发布您的代码。您上面显示的代码不包含有问题的部分。@ljacqu在会话中还是在回音中?@ljacqu我已经这样做回音了-
@MartinShaba我搞错了,删除了我的评论。很抱歉。很抱歉,但当我刷新时仍然出现错误@ljacqu@jacqu错误消失了,但当我刷新时,它仍然会再次随机化该值。@MartinShaba,这很奇怪;也许您的浏览器不喜欢从localhost创建cookie。您几乎可以使用会话变量了,所以谢天谢地,我们不需要担心什么!:)我使用的是chrome,非常支持Cookie/会话。一些浏览器对时间戳的内容很挑剔。只要把它放在一边,它就“可能”起作用了。另一个最可能的错误是提到的“setcookie之前的输出”内容。不要用?>
关闭文件,否则可能会导致文件后出现多余的空间或换行。
if( isset $_SESSION["myAnswer"] ){
$answerIdx = $_SESSION["myAnswer"];
}
else{
// Do it like you did before...
$_SESSION["myAnswer"] = $answerIdx;
}
$answer = array(
"Good job.",
"Great work!",
"Excellent."
);
if (isset($_COOKIE['answer'])) {
$answer_key = $_COOKIE['answer'];
}
if (!isset($answer_key) || !isset($answer[$answer_key])) {
$answer_key = rand(0, count($answer)-1);
setcookie('answer', $answer_key, time()+9999);
}
echo $answer[$answer_key];