繁体   English   中英

计数器增加刷新和重新加载PHP

[英]Counter increasing in refresh and in reload in php

我在php代码中设置了一个计数器,以在每次下次单击时增加mysql中的id值,但是当我刷新或重新加载页面时,该值会自动增加,是否有解决此问题的方法或任何其他替代方法。

    <?php
    $db = mysqli_connect('localhost','root','root','rahul');

    $questions ="";
    $msg2 ="";
    $o1  ="" ;
    $o2  ="" ;
    $o3  ="" ;
    $o4  ="" ;
    $disable = "";
    $disable2 = "";

    session_start();

    if(empty($_SESSION['count']))
            $_SESSION['count'] = 0;     

    if(isset($_POST['sub1'])){      
       $ans = $_POST['ans'];
       $email = "rahul@gmail.com";          
       $order =  $_SESSION['count']+1;     
       echo $order;
       $_SESSION['count'] =  $order;

       $sql = (" SELECT * FROM qna WHERE id = $order ");

        $query = mysqli_query($db, $sql);
        $row=mysqli_fetch_array($query, MYSQLI_ASSOC);

        $questions = $row['questions'];
        $o1 = $row['o1'];
        $o2 = $row['o2'];
        $o3 = $row['o3'];
        $o4 = $row['o4'];

        $disable="";

    if($_SESSION['count']>5)
     {
    $disable = "disabled";
     }
    $disable2 = "";
        if($_SESSION['count']<=1)
     {
    $disable2 = "disabled";
     }

    //$sql2 =   "INSERT INTO result (id, answer, email) VALUES ('', '$ans', '$email') ".mysqli_error();
    /*
    $sql3 =   mysqli_query($db, "INSERT INTO result (answer, email) VALUES ('$ans', '$email')");

    if(mysqli_affected_rows($sql3)== true)
    {
        echo "inserted";
    }
    else
    {
        echo "not inserted";
    }
    */
    echo $ans. $email;    

     } 

     $sql4 = mysqli_query("select * from result");
     $row = mysqli_fetch_array($db, $sql4);
    // while()
     echo $row['id'];
     for($i=1;$i<=5;$i++)
     {

     }
    ?>

     <?php 

     if(isset($_POST['sub2'])){     
        $result2 = $_SESSION['count']-1;
        $_SESSION['count'] = $result2;    

     $sql = (" SELECT * FROM qna WHERE id = $result2 ");

        $query = mysqli_query($db, $sql);
        $row=mysqli_fetch_array($query, MYSQLI_ASSOC);
        $questions = $row['questions'];
        $o1 = $row['o1'];
        $o2 = $row['o2'];
        $o3 = $row['o3'];
        $o4 = $row['o4'];


    if($_SESSION['count']<=1){
       $disable2 = "disabled";
    }     
 }
 session_write_close();
?>
     <?php 
     if(isset($_POST['start'])){
        $order =  $_SESSION['count']+1;     
        echo $order;
        $_SESSION['count'] =  $order;      
        $sql = (" SELECT * FROM qna WHERE id = 1 ");        
        $query = mysqli_query($db, $sql);

        $row = mysqli_fetch_array($query, MYSQLI_ASSOC);
        $questions = $row['questions'];
        $o1 = $row['o1'];
        $o2 = $row['o2'];
        $o3 = $row['o3'];
        $o4 = $row['o4'];
        $disable="";

    if($_SESSION['count']>=5)
     {
    $disable = "disabled";
     }
    $disable2 = "";
        if($_SESSION['count']<=1){
           $disable2 = "disabled";
       }
    session_write_close();
     } 

     ?>

    <center><br><br><br>
    <form method="post">
    <input type="submit" name="start" value="start">
    </form>

    <a href="logout.php">Log out</a>
    <form action="" method="post" >
    <table border="1" height="300px" width="500px">
    <tr>
    <th colspan="2"><?php echo $questions; ?></th>
    </tr>

    <tr>
    <td><input type="radio"  name="ans" id="ans" value="<?php echo $o1; ?>"><?php echo $o1; ?></td>
    <td><input type="radio"  name="ans" value="<?php echo $o2; ?>"><?php echo $o2; ?></td>
    </tr>

    <tr>
    <td><input type="radio"  name="ans" value="<?php echo $o3; ?>"><?php echo $o3; ?></td>
    <td><input type="radio"  name="ans" value="<?php echo $o4; ?>"><?php echo $o4; ?></td>
    </tr>

    <tr colspan="2">
    <td><center><input type="submit" name="sub1" value="next" <?php echo $disable ?>> </td>
    <td><center><input type="submit" name="sub2" value="previous" <?php echo $disable2 ?>>
    <input type="submit" name="submit3" value="submit" > </td>
    </tr>

    </form>
    </table>

     <?php
     if(isset($_POST['submit3']))
     {
         $ans = $_POST['ans'];
        $email = "dummy";

    //$sql2 =   "INSERT INTO result (id, answer, email) VALUES ('', '$ans', '$email') ".mysqli_error();

    $sql3 =   mysqli_query($db, "INSERT INTO result (answer, email) VALUES ('$ans', '$email')");

    if(mysqli_affected_rows($sql3)== true)
    {
        echo "inserted";
    }
    else
    {
        echo "not inserted";
    }
    echo $ans. $email;

     } 

    ?>

当您重新加载网页时,也可以重新加载其POST(以及GET)数据。 如果要提交表单,则目标页面的标题中包含POST数据。 因此,如果您重新加载此页面,就好像您再次单击该按钮一样。

由于您已经在使用会话,因此有一种解决方法:

在您的表单中添加带有微时间戳的隐藏字段。 每次加载页面时(每个用户),此微型时间戳都会有所不同-但是只有在使用按钮时才会发布此“新”时间戳。 当您刷新页面时,您将重新加载旧的时间戳。
因此,您只需要保存最后一个时间戳(保存在会话变量中)与当前发布的时间戳进行比较即可。 如果它们相等-页面刚刚刷新-如果它们不相等,那么您会收到一个新的时间戳,该时间戳是由您的表单发送的:

<?php
    session_start();

    if(!isset($_SESSION["timestamp"]))
        $_SESSION["timestamp"] = 0;

    if(!isset($_POST["timestamp"]))
        $_POST["timestamp"] = 0;

    // previous timestamp - saved in session variable:
    $prev_ts = $_SESSION["timestamp"];

    // currently posted timestamp:
    $post_ts = $_POST["timestamp"];

    if($prev_ts != $post_ts)
    {
        // code to increase your counter goes here.
        $feedback = "button pressed";
    }
    else
    {
        // do nothing when the page just got refreshed
        $feedback = "refreshed";
    }

    $_SESSION["timestamp"] = $post_ts;
?>

<!DOCTYPE html>
<html>
    <head>
    </head>
    <body>

        <?php echo $feedback; ?>

        <form action="<?php echo $_SERVER["PHP_SELF"]; ?>" method="POST">
            <input type="hidden" name="timestamp" value="<?php echo microtime(); ?>">
            <input type="submit" name="go" value="count">
        </form>
    </body>
</html>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM