轮询表单(视图)在CakePHP中创建安全错误

时间:2011-08-05 17:17:58

标签: cakephp cakephp-1.3

我正在为Cakephp写一个简单的民意调查。我创建了表poll和poll_votes。民意调查包含7列:id,question,numberofanswers,answer1,answer2,answer3,answer4。 PollVote包含4:id,poll_id,ip,vote。如果这样做,我可能会添加一个名为PollAnswers的新表作为摆脱答案限制的方法。

不幸的是,我制作的视图会导致安全性错误。我更喜欢使用form-helper作为一个整体,但我还没弄明白,因为我需要具有id为1到4的多个选项的单选按钮,但是将answer1表示为answer4。

[daweb@directadmin01 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
                )
        );
}
?>
[daweb@directadmin01 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'
                )
        );
}
?>
[daweb@directadmin01 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>
[daweb@directadmin01 public_html]$

老实说,我不确定我是否正在使用正确的设计创建民意调查应用程序,因此欢迎提供一般性建议。不幸的是,我无法找到用Cakephp编写的民意调查示例来帮助我。

1 个答案:

答案 0 :(得分: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');