1

私はMoodleに取り組んでいますが、私の知識が不足しているため、php-mysql関連の疑問が複雑になっています。

出力を正常に返すクエリがあります。IF-ELSe条件を使用して、文字列を含むフィールドの1つと数値を含むフィールドの1つの組み合わせがあるかどうかを確認する必要があります。

私がチェックしているフィールドは、データベーステーブルで次のタイプです。

 element - varchar(255)
 value - longtext

これは、以下に説明するようにo/pを返す私のクエリです。

クエリ

    $scormstatus = $DB->get_records_sql("SELECT sc.*, s.name AS activityname FROM mdl_scorm_scoes_track AS sc JOIN mdl_scorm AS s ON s.id = sc.scormid WHERE sc.scormid = '" .$activityid. "' AND sc.userid = '" .$userid. "' AND sc.attempt = '".$scormattempt->attempt."'");
     foreach($scormstatus as $status)
      {
         echo "<br/>".$status->element."**".$status->value."<br/>";
         if(is_numeric($status->value))
         {
           if($status->element = 'cmi.core.score.raw' && $status->value != '0')
           {
              echo "<br/>Score";
           }    
           else
           {
                if($status->element = 'x.start.time' && $status->value != '0')
                {
                  echo "<br/>Started";
                }
           }
        }
    }

出力:

         cmi.core.lesson_location**2
         Score

         cmi.core.lesson_status**incomplete
         cmi.core.score.max**50
         Score

         cmi.core.score.min**0
         cmi.core.score.raw**0
         cmi.core.total_time**00:00:22.00

         x.start.time**1334767290
         Score

これで、「cmi.core.score.raw」と0より大きい値の組み合わせである条件をチェックしている場合でも、すべてのレコードに対して「Score」が出力され、他のレコードには表示されないことがわかります。部。

理想的には、私が楽しみにしている出力は次のようなものです。

理想的なO/P:

     cmi.core.lesson_location**2
     cmi.core.lesson_status**incomplete
     cmi.core.score.max**50
     cmi.core.score.min**0
     cmi.core.score.raw**0
     cmi.core.total_time**00:00:22.00
     x.start.time**1334767290
     Started

私の推測では、IF--ELSEの場合は数値である値フィールドを認識していないため、常に間違ったIF部分に入ることになります。

何が起こっているかについての推測。前もって感謝します

4

1 に答える 1

1

このコード:

if($status->element = 'cmi.core.score.raw'

する必要があります:

 if($status->element == 'cmi.core.score.raw'

1つ=は割り当て用で、2つ==は比較用です。

于 2012-04-18T17:42:29.690 に答える