【问题标题】:Serialize a POST array so that Cake PHP can insert into MySQL database序列化一个 POST 数组,以便 Cake PHP 可以插入 MySQL 数据库
【发布时间】:2013-11-07 16:04:03
【问题描述】:

这很难解释,因为我的代码一半有效。

基本上这就是我所拥有的:

public function add() {
    $this->set('branchingQuestions', $this->BranchingQuestion->find('all'));

    if ($this->request->is('post')) {
        $_POST['data']['Job']['branchingQuestions'] = mysql_escape_string(serialize($_POST['data']['Job']['branchingQuestions']));
        var_dump($_POST['data']['Job']);
        //die;
        $this->Job->create();
        if ($this->Job->save($this->request->data)) {
            $this->Session->setFlash(__('The job has been saved.'));
            return $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The job could not be saved. Please, try again.'));
        }
    }
}

这是在 Cake PHP 控制器中。大部分代码都是通过 Bake 生成的。

无论如何,在我的 POST 数组中是另一个名为 branchingQuestions 的数组,因为它是一个数组,所以在插入时会出现错误,正如您所期望的那样。但是,从 var_dump 我得知该数组已成功序列化,现在是一个字符串,与 POST 的其余内容相同。所以它应该可以工作。

但是,从测试几件事来看,CakePHP 似乎甚至没有意识到我已经使用序列化行更新了数组。即使我的 var_Dump 另有建议,它也好像从未发生过一样。

['data']['job'] 包含我所有的字符串和 int,例如 ['data']['job']['title'] 并且它们可以很好地插入,但是为了测试我的理论,我也改变了['title'] 像这样:

$_POST['data']['Job']['title'] = 120;

哪个应该让 SQL 给出错误,因为标题是一个字符串。但它甚至没有改变标题在我的表中仍然是“测试”。

branchingQuestions 是这样发布的:

<select name='data[Job][branchingQuestions][question" + branchCount + "]'

我有一个动态表单,您可以在需要时添加更多选择框,这就是为什么我在问题部分有一个变量。这一切正常,var_dump 给了我我的预期。

【问题讨论】:

    标签: php mysql arrays cakephp post


    【解决方案1】:

    您实际上必须编辑 $this->request->data 数组而不是 $_POST 数组。

    【讨论】:

    • 谢谢你成功了。我没有意识到使用 $_POST 和 $this->request->data 之间有区别。由于我没有在视图中使用 html 帮助程序,但效果很好,所以我只是假设。无论如何,再次感谢,显而易见的事情总是暗示我。
    猜你喜欢
    • 2023-03-21
    • 2014-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-15
    • 2013-06-20
    相关资源
    最近更新 更多