反对增加不超过一次

时间:2017-04-16 12:16:21

标签: php

我想制作特定的字母计数器,但我的计数器并没有增加一次。有人可以解释我做错了吗?

这是我的代码:

PHP:

<?php 

$count_s = 0; 
$count_v = 0;
$input = '';

if(filter_has_var(INPUT_POST, 'submit')) {

if($_SERVER["REQUEST_METHOD"] == "POST") {
        $input = $_POST['inp'];
        switch($input) {

            case 'v':
                $count_v++;

            case 's':
                $count_s++;
        }
    }
}
?>  

HTML:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <h3>Enter Symbol: </h3>

<form action="index.php" method="POST"> 
    <input type="text" class="input" name='inp' maxlength="1" >
    <button class="btn" type="submit" name="submit">Submit</button>
</form> 

<div class="output">
    <?php 
        echo "Count of letter 'V': ".$count_v."<br/>"; 
        echo "Count of letter 'S': ".$count_s."<br/>"; 
    ?>
</div>

</body>
</html>

2 个答案:

答案 0 :(得分:2)

试试这个会很完美。将其粘贴到任何测试文件中。这不会保留您输入v的任何时间,也不会保留您输入s的任何时间,sv的值将保持输入相同的其他值。

<?php
$input = '';
if(!isset($count_v))
{
    $count_v=0;
}
if(!isset($count_s))
{
    $count_s=0;
}
if (filter_has_var(INPUT_POST, 'submit'))
{

    if ($_SERVER["REQUEST_METHOD"] == "POST")
    {
        $input = $_POST['inp'];
        switch ($input)
        {

            case 'v':
                $_POST['count_v']++;
                $count_v=$_POST['count_v'];
                $count_s=$_POST['count_s'];
                break;

            case 's':
                $count_v=$_POST['count_v'];
                $_POST['count_s']++;
                $count_s=$_POST['count_s'];
                break;
            default:
                $count_v=$_POST['count_v'];
                $count_s=$_POST['count_s'];
                break;
        }
    }
}
?>  
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
    </head>
    <body>
        <h3>Enter Symbol: </h3>

        <form method="POST"> 
            <input type="hidden" name='count_v' value="<?php echo $count_v?>">
            <input type="hidden" name='count_s' value="<?php echo $count_s?>">
            <input type="text" class="input" name='inp' maxlength="1" >
            <button class="btn" type="submit" name="submit">Submit</button>
        </form> 

        <div class="output">
            <?php
            echo "Count of letter 'V': " . $count_v . "<br/>";
            echo "Count of letter 'S': " . $count_s . "<br/>";
            ?>
        </div>

    </body>
</html>

答案 1 :(得分:1)

你需要在每个请求中存储计数器,因为变量的生命周期很短(请求生命周期),然后它们将从0重新初始化

要执行此操作,您可以将计数器存储在文件,数据库或会话中 这取决于你希望它们持续存在的时间。

下面的

是使用会话的示例

**请注意您需要添加的新行session_start();

<?php 
session_start();

$count_s = 0; 
$count_v = 0;
$input = '';

if(filter_has_var(INPUT_POST, 'submit')) {

if($_SERVER["REQUEST_METHOD"] == "POST") {
        $input = $_POST['inp'];
        switch($input) {

            case 'v':
                if(!isset($_SESSION["count_v"])){
                    $_SESSION["count_v"] = 0;
                }
                $tmp = $_SESSION["count_v"];
                $tmp++;
                $_SESSION["count_v"] = $tmp;
            break;
            case 's':
                if(!isset($_SESSION["count_s"])){
                    $_SESSION["count_s"] = 0;
                }
                $tmp = $_SESSION["count_s"];
                $tmp++;
                $_SESSION["count_s"] = $tmp;
            break;
        }
    }
}
?> 

并阅读值(在html页面中)使用:

<?php 
      echo "Count of letter 'V': ".$_SESSION["count_v"]."<br/>"; 
      echo "Count of letter 'S': ".$_SESSION["count_s"]."<br/>"; 
?>

如果要存储超过2个字母(s和v),则可以使用输入本身动态生成会话密钥“count_v”。这将是一个更少的代码,您将不需要switch/case

正如我在上面的评论中看到的那样

修改,是的,您可以使用HTML页面中的隐藏字段维护计数器值,并使用它们初始化$count_s$count_v而不是零。当隐藏值可能未设置时,您需要处理第一个请求,或者它们可能为零