按钮点击计数器 [PHP]

3
我尝试创建一个变量来存储按钮点击的计数。不幸的是,我收到了以下错误:
 Undefined variable: counter

这是我的代码:

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $counter = isset($_POST['counter']) ? $_POST['counter'] : 0;
    if(isset($_POST["button"])){
        $counter++;
        echo $counter;
    }
}

这是一个表单:

<form action = "<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>" method = post>
    <input type = "submit" name = "button" value = "Submit" >
    <input type = "hidden" name = "counter" value = "<?php print $counter; ?>"; />
</form>

有人知道我做错了什么吗?

这段代码都在同一个脚本中吗? - Jonathon
三元条件语句看起来应该可以缓解这个错误,所以对此无能为力,但是由于 PHP 内存在每个请求后都会被销毁,所以你的计数器永远不会起作用。 - Steve
4个回答

5

或者,如果您想保存计数器,可以使用会话。像这样:

session_start();

// if counter is not set, set to zero
if(!isset($_SESSION['counter'])) {
    $_SESSION['counter'] = 0;
}

// if button is pressed, increment counter
if(isset($_POST['button'])) {
    ++$_SESSION['counter'];
}    

// reset counter
if(isset($_POST['reset'])) {
    $_SESSION['counter'] = 0;
}

?>

<form method="POST">
    <input type="hidden" name="counter" value="<?php echo $_SESSION['counter']; ?>" />
    <input type="submit" name="button" value="Counter" />
    <input type="submit" name="reset" value="Reset" />
    <br/><?php echo $_SESSION['counter']; ?>
</form>

顺便说一下,您当前的代码将显示一个“未定义索引错误”,因为您在表单中“echo” $ counter,但您尚未初始化它。它只会在第一次提交表单时存在,而不是在页面的第一次正常加载时存在。


那么在我的当前代码中,是否有可能在网页上显示计数器?如果不行,我会使用你的代码 :) - Koin Arab
1
@KoinArab 当然可以修复,你需要检查表单上的那个。查看此实时演示 - Kevin

1

你的代码没有错误,在我的端上可以运行。你需要检查两点:

  1. PHP代码应该在HTML之上,HTML代码将在PHP代码之后。这样$counter变量将被初始化。

  2. PHP和HTML代码应该在同一页上。


作为OP编辑的问题:所以,行$counter = isset($_POST['counter']) ? $_POST['counter'] : 0;不应该在if块中。要确保,将此行作为PHP文件的第一行。然后只有$counter变量才能在整个页面上使用。

你确定吗?就像你所说的,但仍然不起作用。 - Koin Arab
@KoinArab 我确定,我复制了你的代码并粘贴到我的test.php文件中运行...在按钮点击时计数器正在增加。我甚至没有改变一点点。 - Adarsh Rajput
1
@KoinArab $counter = isset($_POST['counter']) ? $_POST['counter'] : 0; 不要将此行放在if块中,它应该在PHP文件的顶部。将其作为文件的第一行。 - Adarsh Rajput
是的,现在它运行得很好 :) 谢谢!但是你能告诉我为什么这样工作吗? - Koin Arab
2
@KoinArab 因为,当您第一次打开页面时,$_SERVER["REQUEST_METHOD"] 尚未设置为 "POST",因为您尚未单击提交按钮。 - Adarsh Rajput

0

由于变量未定义,因此您会收到此错误。

要隐藏此错误,请在页面顶部写入以下内容:error_reporting(0)

请查看this..如何定义变量?


0

你试图使用一个未声明的变量

<input type = "hidden" name = "counter" value = "<?php print $counter; ?>"; />
................................................................^

这个变量不存在,正如错误所说。猜测你的代码设置有误。

比如PHP不在同一侧或不在HTML上方。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接