0

答えをネットで検索する方法がわからず、問題を説明する方法がわからないので、明確でない場合や以前に質問された場合は申し訳ありません。

取り引きは次のとおりです。さまざまなステータス (「未回答」、「ディスカッション中」、「回答済み」など) を持ついくつかのアイテムを表示する必要があります。現在起こっていることは、未回答の質問が表示され、議論中の質問に対して正しいテキストが表示されていますが、回答された質問のテキストは「議論中」と同じです。質問の 1 つが「未回答」から「議論中」に移動すると、「回答済み」の質問に対して正しいテキストが表示されます。「未回答」の質問がない場合、テキストはその項目に対して正しいです。しかし、他の項目には「未回答」と同じテキストが表示され、「議論中」に表示されるべき質問が表示されません。

これを修正するために私ができることを誰かが知っていますか? 以下にいくつかのコードを置きます。ありがとう!!!

overzicht.php

<?php 
session_start();
if(!isset($_SESSION['views']))
{
    header('Location: index.php');
}
else
{
    $feedback = "";
    try
    {
        include_once('classes/question.class.php');
        $oQuestion = new Question();
        $oQuestionsUnanswered = $oQuestion->getQuestionsUnanswered();
        $oQuestionsInDiscussion = $oQuestion->getQuestionsInDiscussion();
        $oQuestionsAnswered = $oQuestion->getQuestionsAnswered();
    }
    catch(Exception $e)
    {
        $feedback = $e->getMessage();
    }
}
?>

異なるアイテムを表示するには (これは、他の 2 つのステータスについて、$oQuestionsAnswered などの他の変数を使用して 2 回繰り返されます):

<h3>Vragen onbeantwoord:</h3>
        <div id="questionUnanswered">
        <?php
            if(isset($oQuestionsUnanswered))
            {
                $unanswered_details = "";
                while($arr_unanswered = mysqli_fetch_array($oQuestionsUnanswered))
                {
                    $unanswered_details .= "<div class='head'>";
                    $unanswered_details .= "<div class='titel'>";
                    $unanswered_details .= "<a href='full_topic.php?id=".$arr_unanswered['bericht_id']."'>".$arr_unanswered['bericht_titel']."</a></div>";
                    $unanswered_details .= "<div class='datum'>" . $arr_unanswered['bericht_datum'] . "</div></div>";
                }
                echo $unanswered_details;
                }
            else
            {
                echo $feedback;
            }
        ?>
        </div>

question.class.php (これは他の 2 についても繰り返されます)

public function getQuestionsUnanswered()
    {
        include('connection.class.php');
        $sql = "SELECT *
                FROM tblbericht
                WHERE fk_status_id = 3;";
        $result = $conn->query($sql);
        if($result->num_rows!=0)
        {
            return $result;
        }
        else
        {
            throw new Exception("Er zijn momenteel nog geen onbeantwoorde vragen");
        }
        mysqli_close($conn);
    }
4

1 に答える 1

0

IMO大きな間違いを犯しました。クエリの瞬間をフェッチの瞬間から分割したため、ページ内で使用するよりも質問オブジェクトの配列を作成できました。

適応したコードのドラフトは次のとおりです。

public function getQuestionsUnanswered()
    {
        include('connection.class.php');
        $sql = "SELECT *
                FROM tblbericht
                WHERE fk_status_id = 3;";
        $result = $conn->query($sql);

        $_rv =array()
        if($result->num_rows!=0)
        {
                while($arr = mysqli_fetch_array($result))
                {
                    $_rv[] = new QuestionBean($arr);                    
                }

        }
        else
        {
            throw new Exception("Er zijn momenteel nog geen onbeantwoorde vragen");
        }
        mysqli_close($conn);
        return $_rv
    }

それで

<h3>Vragen onbeantwoord:</h3>
        <div id="questionUnanswered">
        <?php
            if(count($oQuestionsUnanswered))
            {
                $unanswered_details = "";
                foreach( $oQuestionsUnanswered as $bean)
                {
                    $unanswered_details .= "<div class='head'>";
                    $unanswered_details .= "<div class='titel'>";
                    $unanswered_details .= "<a href='full_topic.php?id=".$bean->bericht_id."'>".$bean->bericht_titel."</a></div>";
                    $unanswered_details .= "<div class='datum'>" . $bean->bericht_datum . "</div></div>";
                }
                echo $unanswered_details;
                }
            else
            {
                echo $feedback;
            }
        ?>


</div>

もちろん、すべての種類の質問に対して 1 つのクラスを使用し、パラメータを使用して必要な種類の質問を選択する 1 つの関数を使用して最適化できます。

質問の種類は QuestionBean のパラメータになります。

QuestionBean は Bean です :)

Bean とは、各属性にゲッターとセッターがあり、OR がパブリックである「単純な」データ オブジェクトを意味します。

populate という関数で __constructor を初期化子として使用します。

class simpleBean{
  public $id;
  public function __construct($params){
    // some logic as need
  }

  // simple populate
  public function populate($params){
    $valid =  get_class_vars ( self );
    foreach($params as $k => $v){
      if(!isset($valid[$k]){
        // if this key has no attrib matchig I skip it
        continue;
      }
      $this->$k = $v;
    }
  }
}

class QuestionBean extend simpleBean{
  public $attr1;
  public function __construct($params){
    // may be I've some common logic in parent
    parent::__construc($params);

    // 
    $this->populate($params);
  } 
}

今、

            while($arr = mysqli_fetch_array($result))
            {
                $_rv[] = new QuestionBean($arr);                    
            }

Bean の配列 ($rv) があり、各 Bean はクエリの単一の結果行ですが、それはオブジェクトであり、愚かな配列よりもはるかに優れています。

于 2012-11-23T18:12:59.753 に答える