2011-08-05 23 views
0

我正在爲Cakephp編寫一個簡單的調查。我創建了表格輪詢和poll_votes。投票包含7列:id,question,numberofanswers,answer1,answer2,answer3,answer4。 PollVote包含4:id,poll_id,ip,vote。如果這樣做,我可能會添加一個名爲PollAnswers的新表格,以此來擺脫答案限制。調查表(查看)在CakePHP中創建安全錯誤

不幸的是,我所做的觀點導致安全錯誤。我更願意使用form-helper作爲一個整體,但我還沒有弄清楚,因爲我需要具有id爲1到4的多個選項的無線按鈕,但是顯示answer1到answer4。

[[email protected] public_html]$ cat models/poll.php 
<?php 
class Poll extends AppModel { 
     var $name = 'Poll'; 
     var $displayField = 'question'; 

     var $hasMany = array(
       'PollVote' => array(
         'className' => 'PollVote', 
         'foreignKey' => 'poll_id', 
         'dependent' => false 
       ) 
     ); 
} 
?> 
[[email protected] public_html]$ cat models/poll_vote.php 
<?php 
class PollVote extends AppModel { 
     var $name = 'PollVote'; 

     var $belongsTo = array(
       'Poll' => array(
         'className' => 'Poll', 
         'foreignKey' => 'poll_id' 
       ) 
     ); 
} 
?> 
[[email protected] public_html]$ cat views/polls/view.ctp 
<h2><?=$polls[0]['Poll']['question']?></h2> 
<?php 
echo $this->Form->create('Poll'); 
?> 
<br /><p> 
<select name="PollName" id="PollFieldId"> 
<option value="0"><?=$polls[0]['Poll']['answer1']?></option> 
<option value="1"><?=$polls[0]['Poll']['answer2']?></option> 
<option value="2"><?=$polls[0]['Poll']['answer3']?></option> 
<option value="3"><?=$polls[0]['Poll']['answer4']?></option> 
</select> 
<?php 
echo $this->Form->input('id', array('type' => 'hidden')); 
echo $this->Form->end('Submit'); 
?> 
</p> 
[[email protected] public_html]$ 

我真的不知道我創建與正確的設計的投票應用程序,所以一般建議是值得歡迎的。不幸的是,我無法找到用Cakephp編寫的民意調查來幫助我。

回答

0

你的設計很好,只要你每次投票只需要4個問題。將numberofanswers更改爲pollVote_count並使用counterCache 看一看Database design for a survey,雖然這可能是爲了您的目的矯枉過正。

用於無線電輸入,即應該在pollVotes控制器/添加動作,而不是在輪詢/視圖:

echo $this->Form->create('PollVote'); 
echo $this->Form->input('poll_id'); 
echo $this->Form->input('vote',array('type' => 'radio','options' => $polls[0]['Poll'])); 
echo $this->Form->end('Submit');