我有一个php页面(名为add_ship.php),其中包含用于填充数据库的表单,包括文件上载。这可以通过单独的文件upload.php工作(如下所示)。
我无法工作的是当文件上传成功时,我创建了一个链接,返回到add_ship.php,图片名称作为参数......我怎么得到这个用于填写表单中正确字段的参数,如果用户已经输入了几个字段,那么那么选择上传图像,肯定所有其余数据都丢失了 - 有没有办法不丢失输入的内容(所以理想情况下,重新调整为add_ship.php并将文件名添加到正确的字段中?)
非常感谢
<?php
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
if ((($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/png"))
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "Image succsefuly uploaded. " . "<br>" . "<br>";
?>
<a href="add_ship.php?file_name= <?php echo $_FILES["file"]["name"] ?>">Click Hereto return to Add Ship page</a>
<?php
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"../images/ships/" . $_FILES["file"]["name"]);
}
}
}
else
{
echo "Invalid file";
}
?>
答案 0 :(得分:0)
您的直觉是正确的,通过导航到单独的页面来执行文件上传,您将丢失未保存的表单数据。有很多方法可以解决这个问题:
1)不要使用单独的页面。处理add_ship.php中的文件上传。基本上你只需将代码从upload.php移动到add_ship.php。上传完成后,处理剩余的表单数据。
2)将上传表单放入对话框中(例如,使用jquery .dialog())并异步上传文件(例如,使用jquery .ajax())。
您可以想出在两个单独的页面之间来回折叠表单数据的方法,但它们都相当繁琐且容易出错。
关于原始问题,有很多事情可能会出错。首先想到的是文件名中的特殊字符。