我有两张桌子,有很多关系, 在master add.ctp中,允许用户上传0~5个文件(文件路径信息存放在详细信息表中)
我想在master / add.ctp
中动态显示附件(详细信息)表单1,用户从下拉列表中选择要上传的文件数,
echo $this->Form->input('attachments', array( 'options' => array(1, 2, 3, 4, 5),'empty' => '(choose one)', 'onchange' => 'showNumber(this.value)'));
然后forloop
{
echo $this->Form->input('attachment_path', array('type'=>'file','label' =>'Attachment, Maximum size: 10M'));
}
//但我不知道如何捕获this.value,我知道Javascript无法将值传递给php。
或用户点击“添加其他附件”链接,然后会显示详细信息表单。
如何实现此功能,任何帮助将不胜感激。
我读过这篇文章: Assign Javascript variable to PHP with AJAX 并获得相同的错误:变量未定义
'对于每个字段,使用最后带有[]的默认名称(将生成 它像数组一样堆栈)例子:data [] [book_id]后有字段 已提交'
我应该在哪里放置[]?
答案 0 :(得分:0)
我认为你应该使用Ajax。
只需在select.change()
上创建一个ajax调用,然后在控制器中创建一个返回必要信息的方法。
您可以直接在控制器上使用echo json_encode(array('key' => 'value'))
返回数据数组(或者在自定义视图中更好),并使用Javascript访问它:
success: function(data) {
alert(data.key);
}
编辑...
在你的javascript中使用类似......
的内容$('select').change(function(e) {
var select = $(this);
$.ajax({
type: "POST",
dataType: "json",
url: "/attachments/youraction",
data: { data: { id: select.find(":selected").val() } },
success: function(data) {
for (i in data) {
var input = $('<input>', {type: "file", label: data[i].Attachment.label})
$('form.your-form').append(input);
}
}
})
});
然后在“Yourcontroller”中创建“youraction”方法:
<?php
class AttachmentsController extends AppController
{
public function youraction()
{
if (!$this->RequestHandler->isAjax() || !$this->RequestHandler->isPost() || empty($this->data['id']))
{
$this->cakeError('404');
}
// Do your logic with $this->data['id'] as the select value...
$data = $this->Attachment->find('all', array('conditions' => array('id' => $this->data['id'])));
// ....
// then output it...
echo json_encode($data);
// This should be done creating a view, for example one named "json" where you can have there the above echo json_encode($data);
// Then..
// $this->set(compact('data'));
// $this->render('json');
}
}
现在更清楚了?如果你对ajax + cakephp有疑问,你应该在网上搜索,你会在那里找到很多教程。
答案 1 :(得分:0)
我使用这种方法来实现这个功能。 (终于明白了:))
http://ask.cakephp.org/questions/view/foreach_loop_with_save_only_saving_last_member_of_array
是的,AJAX可以做很多事情,对我而言,很难理解一天中的逻辑......
无论如何,再次感谢。