2013-03-22 56 views
1

我一直在试图解决这个问题几天。请尽可能协助或建议其他方法。我能够显示每个学生在铬,safari和firefox的10节课的总分。但是,我在IE9/10中出现了“此页无法显示”的错误。cakephp逻辑 - 其他方法获得相同的结果

我厌倦了调试,发现IE9/10显示上述错误,当我使用for循环通过requestAction。话虽如此,我会要求requestAction得到总分。

为了得到总分我依赖于每个循环(foreach($ customers as $ customer){...})来获取每个$ customer ['Customer'] ['id']并将其传递给requestAction并返回得分结果。

QNS 1.是否有另一种方法来实现这个结果?

QNS 2.我可以在控制器中做所有事情吗?如果是这样,怎么样?

控制器

function eachlesson($lessonid, $sessionkey, $customer_id) { 

return $this->Score->find('first', array('conditions' => array('Score.test_bk_session_id' => $sessionkey, 'Customer.customers_types' => 'student', 'Score.lesson' => $lessonid, 'Score.customer_id' => $customer_id))); 

} 

VIEW

<table> 
<?php foreach ($customers as $customer) { ?> 
<tr> 
    <td> 
     <?php echo $customer['Customer']['customers_name']; ?> 
    </td> 
    <td> 
    <?php 
    $customer_id = $customer['Customer']['id']; 
    $sessionkey = $this->params['pass'][1]; 

    //LOOP THROUGH 10 TIMES TO GET LESSON 1 - 10 SCORES 
    for ($i=1; $i<=10; $i++) { 
     $lessonid = $i; 
     $score = $this->requestAction('/scores/eachlesson/'.$lessonid."/".$sessionkey."/".$customer_id); 


    //GETTING THE TOTAL SCORE FOR LESSON 1 TO 10 
    (int)${'totaleachlesson'.$i} = $score['Score']['BI_pts'] + $score['Score']['FD_pts'] + $score['Score']['PO_pts'] + $score['Score']['WW_pts'] + $score['Score']['MG_pts'] + $score['Score']['FO_pts']; 

    } 

    //ADDING THE TOTAL SCORE OF THE 10 LESSONS 
    $figureofcorrecttotal = $totaleachlesson1 + $totaleachlesson2 + $totaleachlesson3 + $totaleachlesson4 + $totaleachlesson5 + $totaleachlesson6 + $totaleachlesson7 + $totaleachlesson8 + $totaleachlesson9 + $totaleachlesson10; 

    //DISPLAY THE TOTAL SCORE 
    echo $figureofcorrecttotal; 

    ?> 
    </td> 
</tr> 
<?php } ?> 
</table> 

HTML输出

<table class="tablesorter summary3pt2"> 
     <thead> 
     <tr> 
       <th width="170" style="padding-right:5px;" class="empty">Name</th> 
       <th width="120" class="header">No of Correct</th> 

      </tr> 
      </thead> 
      <tbody> 
         <tr> 
      <td class="bold" align="right"> 
      Drew Parsons    </td> 
      <td> 
     2    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Natasha Francis    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Johanna Harmon    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Aubrey Mckenzie    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Edith Sims    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Brandy Ruiz    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Toni Marshall    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Cedric Nash    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Penny Maldonado    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Brandi Perry    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Conrad Hogan    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Travis Sparks    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Winifred Watson    </td> 
      <td> 
     0    </td> 
      </tr> 
          <tr> 
      <td class="bold" align="right"> 
      Shannon Strickland    </td> 
      <td> 
     0    </td> 
      </tr> 
         </tbody> 

     </table> 
+2

我怀疑那里和Html的错误,但我不能确定,除非你添加一些例子生成的HTML。但是,检索分数应该直接从控制器内的模型中直接检索。 RequestAction通常对性能不利,并导致大量开销。 – thaJeztah 2013-03-22 07:44:46

+0

是的,服务器并不关心你运行的是什么浏览器,所以错误将会与生成的HTML一起。发布。 – 2013-03-22 10:14:16

+0

嗨,大家好。我已经发布了html输出。我怀疑在HTML中有错误。 thaJeztah。你建议我应该从控制器内的模型中检索结果?你有任何我可以遵循的例子,因为我需要requestAction来获得分数结果。 – DANLEE 2013-03-24 04:24:38

回答

1

首先,你为什么“HAVE“要使用requestAction?你根本没有遵循蛋糕协定..你需要花一分钟时间去阅读文档...... Imo,你想将“Score”模型与“客户”模型关联起来,并将这两个模型包含在一个调用中。

var $actsAs = array('Containable'); 

<?php 
// Customer model. 

class Customer extends AppModel { 
    var $name = 'Customer'; 

    var $hasMany = array(
     'Score' => array(
      'className' => 'Score', 
      'foreignKey' => 'customer_id', 
      'limit' => 10, 
      'conditions' => array(
       '<conditions go here>' 
      ) 
     ) 
    ); 
} 

?> 

<?php 
// Score model. 

class Score extends AppModel { 
    var $name = 'Score'; 

    var $belongsTo = array(
     'Customer' => array(
      'className' => 'Customer', 
      'foreignKey' => 'customer_id' // This assumes you have a customer_id field in the 'scores' table. 
     ) 
    ); 
} 

?> 

现在的模型中加入相关的,如果你没有连接中可容纳的行为给他们,你可以在每个模型或主app_controller.php这样做

现在,您只需在Customer模型上执行查找时包含Score模型,并自动为您检索10个分数。

<?php 
// customers_controller.php 

class CustomersController extends AppController { 
    var $name = 'Customers'; 

    function index() { 
     // Contain the child method. 
     $this->Customer->contain(array(
      'Score' => array(
       'conditions' => array(
        'Score.test_bk_session_id' => $sessionkey, 
        'Score.lesson' => $lessonid 
       ) 
      ) 
     )); 
     $customers = $this->Customer->find('all', array(
      'conditions' => array(
       'Customer.customers_types' => 'student' 
      ) 
     )); 
     // Now you have all your customers, AND their associated 
     // scores. No more request action needed (never use that imo) 
     $this->set('customers', $customers); 

     // Your array should look like this: 
     // $customers = 
     //array(
     // [0] => array(
     //  'Customer' => array(<CustomerArray>), 
     //  'Score' => array(<ScoreArray>) 
     // ), 
     // [1] => ... 
     //) 
    } 
} 

?> 

我写这个很快,所以请原谅任何错误或错误的假设。希望这有助于你的问题。

+1

只要原来的“此页面无法显示”。我会把资金,IE浏览器阻止所有的请求,认为它是垃圾邮件..由于谁知道你有多少客户有10个HTTP请求,每个客户...只有100个客户会给你每个请求1000个请求约1-2秒的负载。所以每秒约有500个HTTP请求......非常低效。 – 2013-03-25 21:46:27

+0

感谢您的建议!我同意你所说的话。我会尝试你的代码,看看它是否适合我。 – DANLEE 2013-03-26 05:30:13

+0

嘿,我没有'课'表。目前,用户输入一个测试,课程号。并将得分存储在“分数”表格中。我试图达到的目标是为每个学生的分数表中的10课记录/记录获得一起标记。 – DANLEE 2013-03-26 06:04:25