【问题标题】:Repeated Record in php and mysqlphp和mysql中的重复记录
【发布时间】:2017-06-20 14:13:50
【问题描述】:

我很想从数据库中列出项目,但是结果一分为二。每条记录显示 2 个结果。目前我在数据库中只有一条记录,但是当我在屏幕上显示它们时,它会重复。我不知道为什么会这样,我试图放置一个计数器,看看循环进行了多少次,结果总是一次。但是结果会显示两次。

代码如下:

<section class="container">
    <div class="row">   
            <?php   
            if($bidCollection->selectBidsByStatusAndAppId(BidAccount::OPEN_NEW, $id)){          
                foreach($bidCollection->getBids() as $bid){
                $banker->find($bid->getCustomerId());   
                $counter=0;
            ?>


                         <div class='col-xs-12 bg-more-light-gray bidlist'>

                             <div class="col-xs-12 col-sm-1 col-md-1">

                                <?php 

                                    if(!$uploader->findProfilePicture($banker->data()->_customer_id)){ 
                                         echo "<img src='image/holder.png ' width='50' height='50'  class='img-responsive' />";
                                            }else{
                                         echo "<img src='upload/proPicture/".$uploader->data()->pictureUrl."' width='50' height='50' class='img-responsive'/>";                         
                                    }
                                ?>              

                             </div>









                             <div class="col-xs-12 col-sm-8 col-md-8">
                                <?php
                                    echo '<h2>Agent name :'.$validate->cleanInput($banker->data()->officer_name).'</h2>';
                                    echo '<h3>Institute name : '.$validate->cleanInput($banker->data()->bank_name).' '.++$counter.'</h3>';
                                    if($bid->getApplicationOwnerId() === $customer->data()->_customer_id){
                                                echo "<p>CheckBook: ";
                                                    if($bid->getRequestCheckBook()){echo "Yes";}else{echo "No";}
                                                echo "</p>";
                                                echo"<p> Minimum Deposit: AED ".$bid->getMinDeposit()."</p>";
                                                echo"<p> Direct Debit Card: ";
                                                        if($bid->getRequestCreditCard()){echo "Yes";}else{echo "No";}
                                                echo "</p>";
                                                echo"<p> Other Fees / Arrangement Fees: AED ".$bid->getFees(). "</p>";
                                                echo"<p> Account Will be ready in: ".$bid->getSetupTime() ."</p>";
                                    }
                                ?>          
                            </div>
                            <div class="col-xs-12 col-sm-2 col-md-2">
                                <?php                   
                                $datetime = new DateTime($bid->getDatePosted());
                                $date = $datetime->format('Y-m-d');
                                $time = $datetime->format('H:i:s');
                                    echo '<h4> Date: '.$date.'<br/>Time: '.$time.'</h4>';
                                    echo"<form method='POST' action='viewBanker.php'>";
                                    echo "<input type='hidden' name='banker' value='".$bid->getCustomerId()."'>";
                                    echo "<input type='submit' class ='btn btn-default' name='submit' value='View Profile'>";
                                    echo "</form>";
                                    echo'<br/>';

                                        if($bid->getApplicationOwnerId() === $customer->data()->_customer_id){                      

                                                echo"<form method='post' action='acceptAccountBid.php'>";                   
                                                    echo "<input type='hidden' value='".$bid->getCustomerId()."' name ='bankerId'/>";
                                                    echo "<input type='hidden' value='".$id."' name ='appid'/>";
                                                    echo "<input type='hidden' value='".$bid->getApplicationOwnerId()."' name='ownerId'>";
                                                    echo "<input class='btn btn-default' type='submit' value='Accept Offer' name='submit'>";

                                                echo"</form>";

                                        }

                            ?>                          
                             </div>
                        </div>

            <?php

                }
            }
            ?>

返回值的方法如下:

public function selectBidsByStatusAndAppId($status, $appid)
    {
        $sql = "SELECT * FROM accountBid WHERE application_id = :appId AND status = :st";
        try {

            $sth = $this->_db->getConnection()->prepare($sql);
            $sth->bindValue(':appId', $appid);
            $sth->bindValue(':st', $status);
            $sth->execute();

        } catch (Exception $e) {
            $this->setAlert('danger', 'Information Presentation Error: ' . $e->getMessage());   
        }

        foreach ( $sth->fetchAll(PDO::FETCH_ASSOC) as $data) {
           $this->addBid($data);
        }

        return true;
    }



public function addBid($data = null)
    {
        $bid = new BidAccount($data);
        $this->bids[] = $bid; 

    }   


public function getBids()
    {
        return $this->bids;
    } 

【问题讨论】:

  • $bidCollection-&gt;getBids() 返回什么?在`foreach, add echo "

    getBids():

    ".print_r($bidCollection->getBids(),true)."
    ";```之前我们知道您会得到什么。
  • 您可以将 $bidCollection-&gt;getBids() 移到 foreach 之外,并将其值放入变量中,这样它只会被调用一次。
  • getBids() 返回对象数组。它所做的只是返回一个 Bid 对象的集合,然后使用 foreach 提取每个对象并显示它们的内容。
  • 这从代码中很明显。但是每次通过 foreach 时都会调用它。另外,除非你回应它,否则你怎么确定它包含什么?
  • print_r 不显示任何内容,但是 var_dump 显示记录两次,但 Mysql 只有一条记录。相同的记录显示在屏幕上,我不明白是什么导致它循环两次。

标签: php css mysql


【解决方案1】:

首先,我要感谢之前试图帮助我的伙伴们。问题是我有另一个函数,我忘了把它贴在这里 bidExist()

public function bidExist( $appId , $id){


        $sql = "SELECT * FROM accountBid WHERE application_id = :appId AND _customer_id = :id";
        try {

            $sth = $this->_db->getConnection()->prepare($sql);
            $sth->bindValue(':appId', $appId);
            $sth->bindValue(':id', $id);
            $sth->execute();

        } catch (Exception $e) {
            $this->setAlert('danger', 'Information Presentation Error: ' . $e->getMessage());   
        }

        foreach ( $sth->fetchAll(PDO::FETCH_ASSOC) as $data) {
           $this->addBid($data);
        }

        return $sth->rowCount();


    }

上面的函数循环遍历集合以检查对象在此之前是否存在,如果存在,则不能再添加出价,但是,我忘记删除此方法上的 addBid() 函数,这会导致要向集合中添加两次的对象。这花了我整个晚上才弄清楚。但我感谢所有试图支持和协助的人。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-08
    • 2015-12-04
    • 2015-11-20
    • 2019-06-03
    相关资源
    最近更新 更多