我有一个显示200个图像而不重复的实验(图像幻灯片放映三秒钟),图像是从图像数据库中获得的(包含200个图像,每个图像包含4个字段imgname,image,imagetype,imgid),具体取决于imgid响应以警报消息的形式生成。在每个图像显示结束时(三秒钟后),显示警告消息,此警报消息是系统对显示图像的响应,点击时有一个按钮(必须在3秒内单击)显示用户对显示图像的响应。这些响应存储在名为ResponseThreeSecSlideshow的另一个数据库中。我每三秒钟刷新一次页面,我正在维护名为imgDisplayCount的会话变量($ _SESSION ['imgDisplay Count']),每次刷新都会增加。如果此变量达到200,我将页面重定向到另一个页(EndofExperiment.php)。
我正在检查imgDisplayCount的值,如果它是< = 201然后我重定向页面,否则我正在刷新页面。
这是我的代码
<html>
<head>
<?php
session_start();
$_SESSION['imageDispCnt'] = $_SESSION['imageDispCnt']+1;
//query to generate random image from database
while ($row = mysql_fetch_array($result))
{
$img = $imagepath.$row['img_name'];
$id = $row['imageid'];
$img_id = $row['img_id'];
}
if($_SESSION['imageDispCnt'] >= 201)
{
//unset($_SESSION['sid']);
$_SESSION['imageDispCnt'] = 0;
header('Location:endofexperiment.php');
}
else
{
echo "<meta http-equiv=\"refresh\" content=\"4\" />";
}
?>
</head>
<body onload="display()">//displaying the image
<center><img src="<?php echo $img ?>" id="<?php echo $id?>" name="r_img" />
<form name=myForm>
<div><input type="button" name="btn1" value="Stop bag"
onclick="btn_click()" /></div>
</form>
</center>
<script>
var flag = 1;
var s;
var sec;
var d;
var milisec = 0;
var seconds = 0;
var imgname;
var count;
imgname = '<?php echo $img ?>';
imgid = '<?php echo $img_id?>';
count= '<?php echo $_SESSION['imageDispCnt']?>';
if(flag == 1)
setTimeout("msg(flag)",3000);
function msg(flag)
{
document.myForm.btn1.disabled = true;
//alert message
//pop function to call window.open method to record values to the database
}
return 1;
}
function btn_click()
{
document.myForm.btn1.disabled = true;
flag = 0;
//alertmessage
//pop function to call window.open method to record values to the database
}
</script>
</body>
</html>
我的问题是当我评论警报消息时。一切正常。我得到200个随机图像而没有任何重复,我将imgDisplayCount变量存储在ResponseThreeSecSlideshow数据库中,这个变量从1开始,到200结束第一个图像显示imgDisplayCount为1,第二个图像增量为1,依此类推,直到200。 但是当我取消注释警报消息时,imgDisplayCount被记录为第一个图像的2,当我单击按钮时,imgDisplayCount值不会增加,当我没有单击按钮时,警报消息显示在3秒结束时和imgDisplayCount递增两次。只有199个图像被存储在表中并带有一些重复的图像。为了解决这个问题,我采用了imgDisplayCount并将其传递给window.open()方法中的查询字符串。所以现在imgDisplayCount从1开始,到200结束。
我在没有任何按钮点击的情况下运行实验,并且每隔3秒生成警报消息形式的响应。我仍然会获得重复图像。
我提供了ResponseThreeSecSlideshow数据(仅重复图像)
ImgDispCount ID SID Imagename响应Rec_Time img_id
179 11310 1481 bag019.jpg 3 2011-03-22 11:16:39 019
180 11311 1481 bag019.jpg 3 2011-03-22 11:16:42 019
191 11322 1481 bag076.jpg 3 2011-03-22 11:18:58 076
192 11323 1481 bag076.jpg 3 2011-03-22 11:19:02 076
答案 0 :(得分:2)
session_start()
文档要使用基于cookie的会话,必须在向浏览器输出任何内容之前调用session_start()。
<html>
<head>
<?php
session_start();
在发送任何非标头之前致电session_start()
。