尝试允许文件上传以及其他方式正常工作的表单。我删除了相关的表格/输入/处理规则。希望有人在PHP中擅长脚步(就像我一样)能指出我正确的方向吗?
<form name="form-quote" id="form-quote" enctype="multipart/form-data" action="<?php echo $_SERVER['../WPTheme/REQUEST_URI' . '#form-quote'] ?>" method="POST">
<div class="form_labels">
<p><label for="fileupload">Upload File (optional):</label></p>
</div>
<div class="form_inputs">
<input type="hidden" name="MAX_FILE_SIZE" value="5242880" />
<p><input type="file" name="fileupload" id="fileupload" accept=".pdf, .txt, .rtf, .doc, .docx, .xls, .xlsx" style="margin-bottom:2px;"/>
<span style="color:#777;">(pdf, txt, rtf, doc, docx, xls, xlsx, <5MB)</span></p>
</div>
<input type="hidden" name="formtype" id="formtype-quote" value="quote">
<div class="form_labels submit">
<p> </p>
</div>
<div class="form_inputs">
<a href="javascript:void(0);"><input type="submit" value="Submit" name="action" class="btn-red" ></a>
</div>
</form>
<?php
//$formerrors is set to false unless one of the validation rules for the OTHER fields fails - no validation on the file upload, although I would like to trim & sanitize it if possible.
if (!($formerrors) && isset($_POST['fileupload'])):
$tmp_name = $_FILES["fileupload"]["temp_name"];
$uploadfilename = $_FILES["fileupload"]["name"];
$savedate = date("mdy-Hms");
$newfilename = "/wp-content/uploads_forms/" . $savedate . "_" . $uploadfilename;
$uploadurl = 'http://' . $_SERVER['SERVER_NAME'] . $newfilename;
if (move_uploaded_file($tmp_name, $newfilename)):
$msg = "File uploaded.";
else:
$msg = "Sorry, your file could not be uploaded." . $_FILES['file']['error'];
$formerrors = true;
endif; //move uploaded file
endif;
?>
感谢Alexander在下面的回答,我能够修改我的验证器以实现我的原始目标(检查null,并在上传之前给出文件唯一的名称)。这是我的“最终草案”,现在正在运作。
//Check form errors, check file name not null, rename file with unique identifier to avoid overwriting existing files with same name
if (!($formerrors)) {
$tmp_file = $_FILES["fileupload"]["tmp_name"];
if ($tmp_file != "") {
$savedate = date("mdy-Hms");
$target_dir = "wp-content/uploads/";
$target_file = $target_dir . $savedate . '_' . $_FILES["fileupload"]["name"];
if (move_uploaded_file($tmp_file, $target_file)) {
$msg = "File uploaded.";
} else {
$msg = "Sorry, your file could not be uploaded.";
$formerrors = true;
}//move successful
}//end null check
}//end form errors check
答案 0 :(得分:0)
您上面使用的代码是Javascript。如果你依赖它,请更改帖子的标签。如果不是这里有PHP-Uploadscript的可能性:
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileupload"]["name"]);
if (move_uploaded_file($_FILES["fileupload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileupload"]["name"]). " has been uploaded.";
} else {
echo "Sorry, there was an error uploading your file.";
}
消息来源:http://www.w3schools.com/php/php_file_upload.asp
编辑:上面的脚本放在从表单接收POST的文件中。
答案 1 :(得分:0)
你发布的代码很乱!
让我们试着澄清一些基本观点......
文件上传机制
要让文件上传工作,您必须拥有一个<form>
action
属性,用于查找您要检查并使用上传文件的脚本。
此脚本可能与生成<form>
的脚本相同,假设您处理此情况带来的陷阱。
初看起来,您当前的代码似乎与后一种情况相符
但是您的表单action
看起来很奇怪:
action="<?php echo $_SERVER['../WPTheme/REQUEST_URI' . '#form-quote'] ?>"
作为第一个意图,如果您想要找到您已经存在的同一页面,您可以简单地省略action
属性。
在这里,您似乎明确地尝试相同,添加#form-quote
的精度,但是:
#form-quote
此处不起作用,因为此类哈希定位于<a>
,而目前它对您的<form>
有影响。REQUEST_URI
(其中一个$_SERVER
成员的名称)与核心在您的上下文中表达路径。$_SERVER[...something which is not a known $_SERVER member...]
结束,所以它实际上会返回NULL
,而且具有讽刺意味的是,它具有与您没有相同的效果完全指定action
!在SO片段中的PHP
因此,您将代码放在一个代码段中,但SO代码段仅适用于HTML,CSS和Javascript,因此您无法预期它可以演示您的代码是如何工作的。
请注意,在此步骤中,尽管出现上述错误,但我们并未指出会导致代码失败的内容。
在你的问题中,你没有提到它是如何失败的!
上传文件处理
所以看看你的PHP代码部分,我首先注意到这个陈述:
$tmp_name = $_FILES["fileupload"]["temp_name"];
您正在寻找temp_name
,而真正涉及的密钥是tmp_name
。仅此一项就足以使您的代码失败。
再看看这两个陈述:
$uploadurl = 'http://' . $_SERVER['SERVER_NAME'] . $newfilename;
if (move_uploaded_file($tmp_name, $newfilename))
在第一个中,您使用$newfilename
作为您正在构建的网址的补充,因此显然$newfilename
无法定位绝对物理路径。
这意味着在第二个尝试move_uploaded_file()
到错误的地方!
最后一点,在尝试使用上传的文件之前,您目前不会处理可能的错误 你应该像这样完成你的主要条件:
if (!($formerrors) && isset($_POST['fileupload'])) && !$_FILES["fileupload"]["error"])
如果你有效地犯了一些错误并且无法理解原因,那么你也应该看看this interesting PHP manual page。