CakePHP 2.4:不需要的预填充表单数据

Posted

技术标签:

【中文标题】CakePHP 2.4:不需要的预填充表单数据【英文标题】:CakePHP 2.4: Unwanted pre-filled form data 【发布时间】:2013-09-24 17:35:39 【问题描述】:

我有一个添加新用户的表单。只有登录的管理员才能访问此表单。不幸的是,管理员的用户名和密码填写在表单字段中,这些字段应该是完全清楚的。一件非常奇怪的事情是:用户名被打印到生日字段中!

我真的无法解释自己是如何工作的。而且我在 WWW 上找不到任何来自有同样问题的人的帖子 - 我只找到了有关所需预填表单数据的问题和答案。

这是视图 /Users/add.ctp

<h1>Add a new Member</h1>
<?php echo $this->Form->create('User', array('url' => BASE_URL.'/users/add', 'action'=>'post')); ?>
<table class="form">
     <tr><td>Username:</td><td><?php echo $this->Form->input('User.username', array('label' => false, 'div' => false, 'value' => ''));?></td></tr>
     <tr><td>Name:</td><td><?php echo $this->Form->input('User.name', array('label' => false, 'div' => false, 'value' => ''));?></td></tr>
     <tr><td>Lastname:</td><td><?php echo $this->Form->input('User.lastname', array('label' => false, 'div' => false, 'value' => ''));?></td></tr>
     <tr><td>E-Mail:</td><td><?php echo $this->Form->input('User.email', array('label' => false, 'div' => false, 'value' => ''));?></td></tr>
     <tr><td>Birthday:</td><td><?php echo $this->Form->input('User.birth', array('label' => false, 'div' => false, 'value' => ''));?></td></tr>
     <tr><td>Password:</td><td><?php echo $this->Form->input('User.password', array('label' => false, 'div' => false, 'value' => ''));?></td></tr>
</table>

<?php 
     echo $this->Form->submit('Submit', array('formnovalidate' => true));
     echo $this->Form->end();
?>

这里是控制器 /UsersController.php

public function add() 

    $this->layout = 'admin';

    if ($this->request->is('post')) 
        // Saving the data
        $this->User->create();
        if ($this->User->save($this->request->data)) 
            $this->Session->setFlash(__('Data saved.'));
            return $this->redirect(array('action' => 'view'));
        
        $this->Session->setFlash(__('Data could not be saved.'));
    


顺便说一句:保存工作正常。 当然,管理员是对象用户,要添加的新成员也是如此。我想,这就是问题所在,但我真的不知道......我整天都在想这个问题:(有人知道该怎么做吗?

提前致谢。

【问题讨论】:

'url' 和 'action' 一起没有意义 :),而且 url 也不应该被声明得那么复杂,使用控制器和操作键的数组语法就足够了。并放弃那些“价值”的东西,它也会破坏你的无效表格。馊主意。尽量简单(输入的越少越好)。 感谢您的评论。我知道 cakePHP 允许以更舒适的方式生成表单。但我仍然需要'url'的东西,因为域重定向的一个非常烦人的问题,不幸的是不是由htaccess而是由iFrame以某种方式......如果我不以这种方式声明url,表格会不保存任何东西,不给出失败消息,但只会再次加载表单......直到现在都无法对它做任何事情,必须使用我所拥有的:'( 然后你就可以放弃这个动作了。两者都放在那里是没用的,因为其中至少有一个没有做它应该做的事情 - 只会继续让每个人感到困惑:) 【参考方案1】:

是不是你的浏览器? (第一次输入时保存的用户名/密码)

所以,你可以关闭自动完成功能。

<?php echo $this->Form->create('User', array('url' => BASE_URL.'/users/add', 'action'=>'post', 'autocomplete' => 'off')); ?>

这个选项 => 'autocomplete' => 'off'

【讨论】:

天哪....你明白了!我太傻了!非常感谢!我想我完全专注于这个问题,为什么用户名出现在生日字段,而不是用户名字段。这就是为什么我没有看到明显的东西。非常感谢您的帮助。 @Snoops 很高兴为您提供帮助。这种错误很正常,经常发生在我身上。【参考方案2】:

检查您的$this-&gt;data

CakePHP 自动填写表单,其中包含在那里找到的数据,因为它猜测是用户已经提交的数据。

在您的示例中,如果您在 $this-&gt;data['User']['birth'] 中有一些值,它应该在生日输入中显示该值。

【讨论】:

不是这个,我先查了这个。但是非常感谢您的提示。 $this-&gt;data 不是您要检查的变量。查看$this-&gt;request-&gt;data,因为它是请求的一部分。不是控制器的一部分。

以上是关于CakePHP 2.4:不需要的预填充表单数据的主要内容,如果未能解决你的问题,请参考以下文章

CakePHP Master/Detail 表单 - 简单问题

CakePHP 2.2:预填充 AJAX“更新”div?

使用表单助手在 Rails 的预填充文本区域中保留换行符

带有更新的预填充数据库的 Android Room 迁移

cakephp:使用 saveAll(),导入的(非表单相关的)关联数据不保存

如何防止表单元素在 Chrome 中预填充