问题:每当我将HTML表单上的enctype
更改为multipart/form-data
时,{php}脚本中都不会填充$_POST
个变量。用户上传文件并填写表单,文件上传到服务器,但$_POST
变量不会填充。
代码:
我的HTML表单收集数据文本/图片。
的index.php 的
<form name="myForm" METHOD="POST" ACTION="" enctype="multipart/form-data">
<input type="text" name="text1" id="text1">
<input type="text" name="text2" id="text2">
<input type="file" name="filebutton" id="filebutton">
<input type="submit" name="submit" id="submit">
</form>
我的PHP脚本试图更新我的MySQL数据库,以及在我的Ubuntu服务器上传我的文件如下。
upload.php的的
<?php
$uploaddir = "/var/www/img/pictures/";
$uploadfile = $uploaddir . basename($_FILES['filebutton']['name']);
move_uploaded_file($_FILES['filebutton']['tmp_name'], $uploadfile);
if (isset($_POST['filebutton'])) {
$pictureUpdate = ", PICTURE_FILEPATH = '" . $_POST['filebutton'] . "'";
} else {
$pictureUpdate = "";
}
$connection = mysqli_connect("1.2.3.4","xxxx","xxxx","xxxx") or die("Caonnot connect to database.");
$update = "UPDATE table SET COLUMN1='" . $_POST['text1'] . "', COLUMN2='" . $_POST['text2'] . "' . $pictureUpdate . " where COLUMN3 = " . $_POST['text1'] . " ";
$update_sql = mysqli_query($connection, $update) or die("Cannot connect to mysql table. ". $update);
header("Location: " . $_SERVER['REQUEST_URL'] . "?success=1");
exit();
我尝试过的事情: 这是第一次这样做,所以我在这里有点自由,因为我似乎无法让这个工作。
enctype
更改为application/x-www-form-urlencoded
。 {i> upload.php 文件中均未显示$_POST
或$_FILE
数据。application/x-www-form-urlencoded
。当我执行此操作时,我的$_POST
变量可以正常工作,但我的文件无法上传。post_max_size
。在搜索互联网时,我发现了一些有关类似问题的StackOverflow主题。根据我收集的内容,如果尝试上传的文件超过post_max_size
中的值,则$_POST
变量将无法通过。我的 php.ini 文件中post_max_size
的值表示&#34; 8M&#34;,上传的测试文件图片为103 KiB。如何让$_POST
数据生效,以及从同一表单上传文件?
答案 0 :(得分:5)
您只需要在if语句中移动文件内容,然后将$_POST['filebutton']
更改为$_FILES['filebutton']
每当您执行文件上传时,文件都会填充在$_FILES
全局变量中,其他字段将填充在$_POST
全局变量中。
<?php
$uploaddir = "/var/www/img/pictures/";
if (isset($_FILES['filebutton'])) {
$uploadfile = $uploaddir . basename($_FILES['filebutton']['name']);
move_uploaded_file($_FILES['filebutton']['tmp_name'], $uploadfile);
$pictureUpdate = ", PICTURE_FILEPATH = '" . $_FILES['filebutton'] . "'";
} else {
$pictureUpdate = "";
}
$connection = mysqli_connect("1.2.3.4","xxxx","xxxx","xxxx") or die("Caonnot connect to database.");
$update = "UPDATE table SET COLUMN1='" . $_POST['text1'] . "', COLUMN2='" . $_POST['text2'] . "' . $pictureUpdate . " where COLUMN3 = " . $_POST['text1'] . " ";
$update_sql = mysqli_query($connection, $update) or die("Cannot connect to mysql table. ". $update);
header("Location: " . $_SERVER['REQUEST_URL'] . "?success=1");
exit();
尝试使用此代码,看看它为您做了什么,如果这样做有效,而另一方则没有那么意味着我们需要解决问题的代码还有更多。
test.php的
<form name="myForm" METHOD="POST" ACTION="" enctype="multipart/form-data">
<input type="text" name="text1" id="text1">
<input type="text" name="text2" id="text2">
<input type="file" name="filebutton" id="filebutton">
<input type="submit" name="submit" id="submit">
</form>
<xmp><?php if ($_SERVER['REQUEST_METHOD'] === 'POST') { var_dump($_FILES, $_POST); } ?></xmp>
输出
array(1) {
["filebutton"]=>
array(5) {
["name"]=>
string(21) "scanParser.properties"
["type"]=>
string(24) "application/octet-stream"
["tmp_name"]=>
string(14) "/tmp/phpRm1Ytp"
["error"]=>
int(0)
["size"]=>
int(264)
}
}
array(3) {
["text1"]=>
string(1) "1"
["text2"]=>
string(1) "2"
["submit"]=>
string(6) "Submit"
}