我想发布一个包含输入和文件的表单,并在目标页面中以相同的顺序检索中的,例如:
<form id="form" method="post" action="">
Description file: <input type="text" name="input-1" value="description 1">
<br>
File: <input type="file" name="input-2">
<br>
<br>
Others data: <input type="text" name="input-3" value="some others unique data">
<br>
Description file: <input type="text" name="input-4" value="description 2">
<br>
File: <input type="file" name="input-5">
<br>
Description file: <input type="text" name="input-6" value="description 3">
<br>
File: <input type="file" name="input-7">
<br>
</form>
<?php
$post = $_POST;
$files = $_FILES;
foreach ( $post as $i => $value ) {
echo "Variables passed: " . $value . "<br>";
}
foreach ( $files as $i => $value ) {
echo "File: " . $value['name'] . "<br>";
}
?>
我喜欢输出:
Variables passed: description 1
File: file1.jpg
Variables passed: some others unique data
Variables passed: description 2
File: file2.jpg
Variables passed: description 3
File: file3.jpg
但我得到了这个,因为我有两个不同的预言:
Variables passed: description 1
Variables passed: some others unique data
Variables passed: description 2
Variables passed: description 3
File: file1.jpg
File: file2.jpg
File: file3.jpg
这只是一个简单的例子。我是一个动态表单,我可以使用按钮添加不同排序的输入字段。
有没有办法将相同的订单保留到目标网页?
更新:我已经编辑了我的原始帖子:在输入字段文本之后,它始终是一个文件输入。
更新2:当我单击添加按钮以插入新输入时,{mys}数据库中会自动检索name
input-1, input-2, input-3, input-4, ...
,因此它们的顺序可以不同,如:input-1,input- 3,输入-2,输入-4,......
答案 0 :(得分:0)
假设文件始终伴随着描述,并且描述将始终伴随着文件(您需要对此进行验证)。这样的事情应该指向正确的方向:
<form id="form" method="post" action="">
Description file: <input type="text" name="input-1" value="description 1">
<br>
File: <input type="file" name="file-2">
<br>
Description file: <input type="text" name="input-3" value="description 2">
<br>
File: <input type="file" name="file-4">
<br>
Description file: <input type="text" name="input-5" value="description 3">
<br>
File: <input type="file" name="file-6">
<br>
</form>
<?php
$post = $_POST;
$files = $_FILES;
foreach ( $post as $i => $value ) {
echo "Description: " . $value . "<br>";
echo "File: " . $files[$i]['name'] . "<br>";
}
?>
答案 1 :(得分:0)
如果您事先知道这些字段将具有该格式的名称,那么您可以执行以下操作:
$len = sizeof($post);
for ($i = 0; $i<len;$i++)
{
$item = $i + 1;
echo "Description: ".$item.": ".$post["input-".$item]."<br>";
echo "File: ".$item.": ". $files["file-".$item]."<br>";
}
当然,如果你的$ _POST还包含其他变量,你可能需要做一些事情,比如使用正则表达式来过滤那些与你的模式匹配的名字,并且只在你的循环中使用那些匹配。
正如其他人在评论中提到的那样,你应该始终牢记意外输入的可能性。
答案 2 :(得分:0)
好的,我终于找到了解决方案。
在提交之前,我会使用:
$("body").find(":input[name^='input-']").each(function (index, value) {
var value = $(this).attr("name");
$(form).append('<input type="hidden" name="varsOrder[]" value="' + value + '">');
});
form.submit();
然后在index.php中:
// RETRIEVE ONLY $_POST starting with input-
foreach($_POST as $key => $value) {
if (strpos($key, 'input-') === 0) {
$idVars = ltrim($key, "input-");
$vars[$idVars] = $value;
}
}
// RETRIEVE ONLY $_FILES starting with input-
foreach($_FILES as $input => $array) {
if (strpos($input, 'input-') === 0) {
$idVars= ltrim($input, "input-");
// PROCESS FILE
...
$vars[$idVars] = $array['name'];
}
}
// FINAL REORDER
$orderedVars = $vars;
$order = isset($_POST['vars']) ? $_POST['vars'] : array();
if ( count($order ) ) {
$orderedVars = array();
foreach ( $order as $index => $nameVar) {
$idVar = ltrim($nameVar, "input-");
if ( array_key_exists($idVar, $vars) ) {
$orderedVars[] = $vars[$idVar];
}
}
}
// $orderedVars AT THIS POINT IS AN ARRAY OF ORDERED INPUTS LIKE ORIGINAL FORM