【问题标题】:Counting inside an if/else statement在 if/else 语句中计数
【发布时间】:2014-11-12 14:25:13
【问题描述】:

我有一个登录页面,要求用户输入代码。我想计算用户输入错误代码的次数,如果超过 3 次,则显示一个页面告诉他们重新启动进程,但我的计数器只输出 1,即使我多次输入错误代码。

<div class="container">


<div class="alert alert-success" role="alert" align="center">
    <p>A code has been sent to your email</p>
    <p>Please consult your email to proceed with the login</p>
</div>

<form class="form-signin"  method="post">
    <h2 class="form-signin-heading">Enter code</h2>
    <input type="hidden" name="partnerEmail" value="<?php echo $_POST['partnerEmail']; ?>">
    <input class="form-control" type="text" name="partnerCode" placeholder="Code">
    <button class="btn btn-lg btn-primary btn-block" type="submit">Accept</button>

</form>

</div> <!-- /container -->

<?phpsession_start();echo $_SESSION['partnerEmail'];?>

<div class="container">

<?php
include_once "conn.php";

$partnerCode = $_POST['partnerCode'];
$partnerEmail = $_SESSION['partnerEmail'];

$sql = "SELECT * FROM partners WHERE partner_email='$partnerEmail' AND 
partner_login_code='$partnerCode' AND partner_active ='yes'";


$counter = 0;
echo $counter;

$result = $conn->query($sql);

if (mysqli_num_rows($result)>0){
    echo '<div class="alert alert-success" role="alert" align="center">
          <p>Congratz - You logged in successfully!</p>
          </div>';


}
else
{
    echo '<div class="alert alert-danger" role="alert" align="center">
          <p>ERROR - Please consult your email for the correct code!</p>
          </div>';

    $counter ++;
    echo $counter;

?> <script> $(".alert").effect("shake");</script> <?php
}

echo $counter;
?>

【问题讨论】:

  • 旁注:如果这是您的实际代码,您需要将这个&lt;?phpsession_start() 分开。 &lt;?php session_start()
  • 我没有尝试更新查询。我正在尝试计算 else 语句通过了多少次。
  • &lt;?phpsession_start() 是你的实际代码吗?正如我已经说过的那样。

标签: php jquery mysql database counter


【解决方案1】:

您需要存储 $counter 值。

第一行说:

$counter = 0;
echo $counter;

可以转化为:

if(isset($_SESSION['counter']) && $_SESSION['counter'] > 0){
 $counter = $_SESSION['counter'];
}else{
 $counter = 0;
}

说的部分

$counter ++;

成为

$counter ++;
$_SESSION['counter'] = $counter;

然后你就可以在其他页面访问了(只要是php并且可以访问sessions变量)。

【讨论】:

    【解决方案2】:

    PHP 是无状态的。每次加载页面时都会覆盖计数器。 而是将计数器保存到会话中:

    //$counter = 0; this is overwritting, replace with:
    $_SESSION['counter'] = isset($_SESSION['counter']) ? $_SESSION['counter'] : 0;
    //assigned by reference, changes to $counter will change $_SESSION['counter'] also
    $counter = &$_SESSION['counter'];
    

    除了上述情况外,您似乎还输出 html 之后开始了会话。这将不起作用,因为启动会话需要发送一个 http 标头,必须在发送 http 响应(例如 html)之前完成

    【讨论】:

      【解决方案3】:

      U 可以在 $_SESSION 数组中保存一个计数器,并在用户输入错误代码时增加该值。达到某个值后,您可以在代码中执行不同的操作。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多