我在cakephp工作。我创建了一个包含文件上传和textbox nad textarea的表单。
在这里,我的html代码如下所示:
<form action="" id="frmReg" method="post" enctype= "multipart/form-data">
<div style="position:relative; margin-bottom:30px;" class="fildtpart4">
<label><?php __d('statictext', 'Question', false); ?>:</label>
<span>
<textarea class="validate[required]" name="question1['question']" cols="" rows=""></textarea>
<div style="color: red; position:absolute ; bottom:-25px ;" id="charNum"></div>
</span>
<div class="clear"></div>
<div class="fildtpart3">
<label><?php __d('statictext', 'Currect Answer', false); ?></label>
<span>
<input name="question1['currect_ans']" type="text" class="validate[required]" id="" value="">
<input type="file" class="validate[required]" onchange="showMyImage1(this)" name="question1['sponsor_image']" id="" />
<input type="file" class="validate[required]" onchange="showMyImage2(this)" name="question1['question_image2']" id="" />
</span>
<input type="submit" value="submit" name="submit">
<div class="clear10"></div>
</div>
</div>
<form>
当我提交此表单时,它将仅显示图像而不是所有数据。
在我的控制器中,我写道:
function add_polls()
{
print_r($this->params['form']);exit;
}
然后它输出如下:
array(
[question1]=>array(
[name] => Array
(
['sponsor_image'] => contact.jpg
['question_image2'] => contact.jpg
)
[type] => Array
(
['sponsor_image'] => image/jpeg
['question_image2'] => image/jpeg
)
[tmp_name] => Array
(
['sponsor_image'] => /tmp/phpUK7Vcj
['question_image2'] => /tmp/php3SCWGZ
)
[error] => Array
(
['sponsor_image'] => 0
['question_image2'] => 0
)
[size] => Array
(
['sponsor_image'] => 2305
['question_image2'] => 2305
)
)
)
此处,未打印问题1 ['currect_ans'] 和问题1 ['问题'] 。当我从表单中删除enctype时,它将显示所有值。那么我该如何解决这个问题呢?
注意: CakePHP vesrion是1.3.13。
答案 0 :(得分:0)
这是PHP如何处理文件,而不遵循CakePHP约定,导致CakePHP“覆盖”您的其他表单数据。
你应该使用表单助手,这样你就可以首先避免这个问题,除非你当然要弄乱字段名称并再次使用这些冲突。
添加question1
中的所有内容(包括文件)会导致文件在question1
$_FILES
下分组,正如您的问题所示,即
Array(
[question1] => Array(
[name] => Array(
['sponsor_image'] => contact.jpg
['question_image2'] => contact.jpg
)
// ...
)
)
和$_POST
中的其余表单数据使用相同的键,即
Array(
[question1] => Array(
['question'] => 'foo',
['currect_ans'] => 'bar'
)
)
你应该闻到即将到来的冲突。
CakePHP将首先用$params['form']
填充$_POST
,然后迭代$_FILES
并使用密钥在$params['form']
中设置文件数据,这将导致之前设置的表单数据,即文本输入,要被覆盖,因为它们都使用密钥question1
。
遵循CakePHP约定并使用data
键(以及可选的模型名称,不需要存在)来对输入进行分组,这样所有数据都将被单独正确处理并通过{ {1}}
Controller::$data
无需使用嵌套键的引号btw。
更好的是,如前所述,使用表单助手,它会自动创建正确的字段名。
另见
答案 1 :(得分:-1)
所以我转载了你的问题,我正在报告以下内容。
在我的cakephp 3.x上,通过提交“常规”HTTP帖子,您的表单效果很好。 (我在您的表单中添加了<input type="submit">
。
[
'question1' => [
'question' => 'da',
'currect_ans' => 'da',
'sponsor_image' => [
'name' => 'Mobile version.png',
'type' => 'image/png',
'tmp_name' => '/tmp/php3A021O',
'error' => (int) 0,
'size' => (int) 149447
],
'question_image2' => [
'name' => 'Mobile version.png',
'type' => 'image/png',
'tmp_name' => '/tmp/phpi6VWxl',
'error' => (int) 0,
'size' => (int) 149447
]
]
]
那么你如何提交数据呢?是通过ajax吗?你使用的是什么版本的cakephp?尝试回答这些问题,以便我可以为您提供进一步的帮助。
答案 2 :(得分:-2)
您是否尝试使用
获取数据$postedData = $this->request->data;