Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP静态变量在页面加载后重新加载_Php_Forms_Static_Reload - Fatal编程技术网

PHP静态变量在页面加载后重新加载

PHP静态变量在页面加载后重新加载,php,forms,static,reload,Php,Forms,Static,Reload,这是我想要实现的目标的简化版本: 在我的脚本中,我希望每次按下submit按钮时静态变量x都会递增 <?php function IncX(){ static $x = 0; $x++; echo $x; } ?> <body> <form> <input type="submit" name="submit" class="next btn btn-primary" value="Submit" /> </form&

这是我想要实现的目标的简化版本:

在我的脚本中,我希望每次按下submit按钮时静态变量x都会递增

<?php
function IncX(){
   static $x = 0;
    $x++;
    echo $x;
}
?>

<body>
<form>
<input type="submit" name="submit" class="next btn btn-primary" value="Submit" />
</form>
</body>


但是在提交后重新加载的每个页面上,它都会初始化为x=0。

每次加载页面时,都会重新加载变量,因此变量总是相同的

解决方案是将其存储在会话中,然后在会话中递增。如果变量不存在,则包含一个条件以创建该变量

<?php
  session_start();
  if (!isset($_SESSION['x'])) {
    $x = $_SESSION['x'];
  } else {
    $x = 0;
  }
  $x++;
  echo $x;
  $_SESSION['x'] = $x;
?>


Apache不会在点击之间跟踪php脚本中的变量,您必须将其存储在某个地方,无论是
$\u会话还是数据库

此外,关键字并不像你想象的那样。它可以在脚本的一次运行中连续调用函数,但不能在两次单击之间运行

在任何情况下,您都可以使用三元运算符来实现这一点,如果您碰巧将其放在会话中。我还添加了一个检查,以确保变量实际上是一个可行的计数:

session_start();
$_SESSION['x'] = isset($_SESSION['x']) && is_int($_SESSION['x'])
    ? $_SESSION['x'] + 1
    : 1;
echo $_SESSION['x'];

这是因为每次单击submit按钮时都会加载页面。。。我认为你误解了静态变量的作用;它们只保留一个请求的值。点击按钮发送多个请求。如上面的评论所述,这与静态变量的工作方式无关,查看
$\u SESSION
如果这样做,Olsen?将取决于您想做什么。使用cookies将是一种节省价值的轻量级方法。会话有点繁重,但它们也是一个很好的解决方案。如果页面至少重新加载30次。。哪一个更好?即使现在变量也不会增加。。Geoffatkins我认为在函数中处理增量是有原因的,并且您正在页面上的某个位置调用该函数?我已经更新了删除该函数的答案,这应该可以解决问题。确保在发送任何头之前调用了
会话\u start()
。这与另一个anser完全相同。你还补充了什么?@FélixGagnon Grenier当我补充答案时。文章未编辑,答案错误,编辑时您可以看到。
session_start();
$_SESSION['x'] = isset($_SESSION['x']) && is_int($_SESSION['x'])
    ? $_SESSION['x'] + 1
    : 1;
echo $_SESSION['x'];