【问题标题】:forech shows one row less than the databaseforech 显示比数据库少一行
【发布时间】:2021-10-01 04:06:35
【问题描述】:

我有一个 if 语句,如果我的表中存在某种条件,它会动态显示 html,其中包含数据库中存在的每一行的数据,我正在使用 foreach 循环,但它一直显示在较少的行上比实际表中的内容,如果它有三行,它将显示两行,如果只有一个它不显示任何内容,它会通过 if 语句,因为如果它不显示错误消息,但在我的如果它只是显示一个空白页面,为什么会发生这种情况?

function show()
{
   
    $stmt = $this->db->prepare("SELECT offered_rides.*, reg.*
                                FROM offered_rides
                                 JOIN reg ON offered_rides.phone = reg.phone where 
                                 offered_rides.date = :date AND offered_rides.seats >= :seats AND offered_rides.start = :start AND offered_rides.finish = :finish ");
    $stmt->bindParam(':date',$this->date);
    $stmt->bindParam(':seats',$this->seats);
    $stmt->bindParam(':start',$this->from);
    $stmt->bindParam(':finish',$this->to);
    $stmt->execute();
    $row = $stmt->fetch(PDO::FETCH_ASSOC);
    
    
    
   if($row)   
   { 
           
      foreach($stmt as $row):
            
          
         ?>

        <form action="Update.php" method="POST">
            
            <div class="a">
                
                <div class="fnamelname">
                <p style="display:inline;"> <?php echo $row["fname"];?>  </p>
                <p style="display:inline;"> <?php echo $row["lname"];?> </p>
                </div>
                    
            </div>
                
            
            //i need to store these to use them later
            <input type = "hidden" name = "phone-D" value = "<?=$row['phone'] ?>" />
            <input type = "hidden" name = "time" value = "<?= $row['time'] ?>" />
            <input type = "hidden" name = "seats" value = "<?= $row['seats'] - $this->seats?>" />
             
            
        </form>

        <?php endforeach; 
        
        
   }    

【问题讨论】:

    标签: php html pdo


    【解决方案1】:

    这完全没有意义:foreach($stmt as $row):$stmt 不是数组,它是单个对象。相反,您应该使用带有$row = $stmt-&gt;fetch(PDO::FETCH_ASSOC); 步骤的while 循环作为条件。因为fetch() 方法每次调用都会返回一行。这就是你想要的。

    function show() {
       
        $stmt = $this->db->prepare("SELECT offered_rides.*, reg.* FROM offered_rides JOIN reg ON offered_rides.phone = reg.phone WHERE  offered_rides.date = :date AND offered_rides.seats >= :seats AND offered_rides.start = :start AND offered_rides.finish = :finish ");
        $stmt->bindParam(':date',$this->date);
        $stmt->bindParam(':seats',$this->seats);
        $stmt->bindParam(':start',$this->from);
        $stmt->bindParam(':finish',$this->to);
        $stmt->execute();
    
    
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            ?>
    
            <form action="Update.php" method="POST">                
                <div class="a">
                    <div class="fnamelname">
                    <p style="display:inline;"> <?php echo $row["fname"];?>  </p>
                    <p style="display:inline;"> <?php echo $row["lname"];?> </p>
                    </div>
                </div>
                //i need to store these to use them later
                <input type = "hidden" name = "phone-D" value = "<?=$row['phone'] ?>" />
                <input type = "hidden" name = "time" value = "<?= $row['time'] ?>" />
                <input type = "hidden" name = "seats" value = "<?= $row['seats'] - $this->seats?>" />
            </form>
    
            <?
        }
    }
    

    还有一个提示:当你在 php 中使用“短标签”时,你的 html 标记会更容易阅读:

            <form action="Update.php" method="POST">                
                <div class="a">
                    <div class="fnamelname">
                    <p style="display:inline;"><?= $row["fname"]?></p>
                    <p style="display:inline;"><?= $row["lname"]?></p>
                    </div>
                </div>
                //i need to store these to use them later
                <input type="hidden" name="phone-D" value="<?=$row['phone']?>"/>
                <input type="hidden" name="time" value="<?= $row['time']?>"/>
                <input type="hidden" name="seats" value="<?= $row['seats'] - $this->seats?>"/>
            </form>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-08
      • 2019-01-06
      相关资源
      最近更新 更多