php条件语句没有给出假设的结果

时间:2014-01-05 06:57:09

标签: php if-statement conditional-statements

如果日期到期日期小于当前日期,我的代码应显示最后一个语句,但它显示第二个语句,就好像有效期限大于当前日期一样。我使用自2013年12月1日到期的代码进行了测试,但仍然显示客户端有活跃的折扣。请帮助指出我可能犯错的地方。

<?php if ($totalRows_coupon == 0) { ?>
<table width="96%" border="0">
  <tr>
    <td bgcolor="#FF0000" class="hint style2">
<div align="center" class="style3">You have entered an invalid discount 
        code. Leave blank if you don't have any.</div></td>
  </tr>
</table>

  <?php } else { if ($row_coupon['type']=='percentage' && date("d-m-Y") < strtotime("$edate") && $row_coupon['status']=='active') {?>
<table width="96%" border="0">
    <tr>
    <td bgcolor="#FFCCCC" class="hint"> 
      <div align="center">You have a <span class="style1"><?php echo $row_coupon['value']; ?>%</span> 
        discount valid for <?php if ($row_coupon['freq'] == 888) {
    echo "<font color=black>unlimited</font>";}else {
    echo $row_coupon['freq'];}?> uses. You have <?php if ($row_coupon['freq'] == 888) {
    echo "<font color=black>unlimited</font>";}else {
    echo $row_coupon['rem'];}?> 
        uses left to expire on <?php echo $row_coupon['eDate']; ?> </div></td>
      <input name="coupon" type="hidden" id="coupon" value="<?php echo $row_coupon['value']; ?>"/>
    </tr>
  </table>
  <?php }elseif (date("d-m-Y") > strtotime("$edate") OR $row_coupon['status']!='active') { ?>
  <table width="96%" border="0">
  <tr>
    <td bgcolor="#FF0000" class="hint style2">
<div align="center" class="style3">This discount code have expired since <?php echo $row_coupon['eDate']; ?>. Please enter an active code or leave blank.</div></td>
  </tr>
</table>
<?php  }
} ?>

3 个答案:

答案 0 :(得分:4)

你比较苹果和橘子:

date("d-m-Y") < strtotime("$edate")

date()返回 STRING ,表示指定格式的日期,例如04-01-2014strtotime()返回 INTEGER - 一个unix时间戳,这是自1970年1月1日以来的秒数。

换句话说,您的代码归结为

if('04-01-2014' < 523423423)  // picking out some random timstamp value

由于您要将字符串与整数进行比较,因此该字符串将转换为int,从而生成4,最后会出现

if (4 < 523423423)

这是真的。

答案 1 :(得分:0)

您的else if声明存在一些问题:

elseif (date("d-m-Y") > strtotime("$edate") OR $row_coupon['status'] != 'active') {

首先date("d-m-Y")strtotime("$edate")的输出不一样,因为date会给你人类可读的时间,strtotime会给你一个Unix时间戳。要进行比较,您只需使用time即可。这是我的修复&amp;清理以及下面的附加说明。

elseif ((time() > strtotime("$edate")) || ($row_coupon['status'] != 'active')) {

除了使用time()进行检查外,我还更正了使用OR这个词作为||的真正PHP逻辑“OR”运算符。阅读有关PHP逻辑运算符here的更多信息。另外,我在括号中包含了每个条件 - ()。即使这只是一个简单的双重检查条件,它可以更容易阅读,解析&amp;调试,如果清楚地描述如此。

答案 2 :(得分:-3)

$row_coupon['status']!='active'

应该是

$row_coupon['status']!=='active'

double equals - 否则你将设置它并使其成立 - 它将完成声明的OR部分。