我在html中有以下表格:
<form id="signguestbook" class="form-horizontal" action="upload.php" method="post" enctype="multipart/form-data">
<div class="control-group">
<label class="control-label" for="inputName">Uw naam</label>
<div class="controls"><input type="text" id="inputName" placeholder="Uw naam"></div>
</div>
<div class="control-group">
<label class="control-label" for="inputEmail">Email</label>
<div class="controls"><input type="text" id="inputEmail" placeholder="Email"><span class="maildisclaimer">(uw e-mailadres zal niet op onze site verschijnen)</span></div>
</div>
<div class="control-group">
<label class="control-label" for="inputText">Uw ervaring:</label>
<div class="controls"><textarea rows="5" cols="50" id="inputText" placeholder="Geef hier mee hoe u uw verblijf ervaren heeft!"></textarea></div>
</div>
<div class="control-group">
<label class="control-label" for="inputPhoto">Foto:</label>
<div class="controls"><input type="file" name="photo" id="photo" /></div>
</div>
<div class="control-group">
<div class="controls"><input type="submit" class="btn" value="Versturen" /></div>
</div>
</form>
使用twitter bootstrap,它的布局看起来还不错。
然后我有一个带有以下测试代码的upload.php:
<?php
if ($_POST["inputName"]) {
echo "Naam: " . $_POST["inputName"] . "<br />";
}
if ($_POST["inputEmail"]) {
echo "Mail: " . $_POST["inputEmail"] . "<br />";
}
if ($_POST["inputText"]) {
echo "Text: " . $_POST["inputText"] . "<br />";
}
// photo is the name of our file input field
if ($_FILES['photo']['error'] > 0) {
echo "Error: " . $_FILES['photo']['error'] . "<br />";
} else {
echo "File name: " . $_FILES['photo']['name'] . "<br />";
echo "File type: " . $_FILES['photo']['type'] . "<br />";
echo "File size: " . ($_FILES['photo']['size'] / 1024) . " Kb<br />";
echo "Temp path: " . $_FILES['photo']['tmp_name'];
}
?>
我没想到会有任何错误,但我得到以下内容:
Notice: Undefined index: inputName in /var/www/greze/upload.php on line 3
Notice: Undefined index: inputEmail in /var/www/greze/upload.php on line 6
Notice: Undefined index: inputText in /var/www/greze/upload.php on line 9
File name: 3479331713.pdf
File type: application/pdf
File size: 230.8388671875 Kb
Temp path: /tmp/phpJ4z0FV
我的文件被识别,但没有$ _POST变量。当我执行var_dump($ _ POST)时,它是一个空数组。所以它应该是我的形式,但我已经设置为发布,并且enctype是正确的(我记得)....
我必须承认我的编码已关闭并且已经有一段时间了。
提前致谢!!
答案 0 :(得分:3)
这些只是通知。它们出现是因为您尝试使用$_POST
数组,其索引不存在。
而不是
if ($_POST["inputName"]) {
使用
if (!empty($_POST["inputName"])) {
其他会告诉您使用isset()
,但它不会做您想要的。 isset()
函数只检查变量是否存在。但是在这里你也期望这个变量为ba boolean true,这也就是说它们也不是空的。这里,empty
函数检查变量是否存在且不为空。
此外,name
元素中没有input
属性。它们由name
而不是id
按照您的预期进行识别。
答案 1 :(得分:2)
尝试使用isset
方法测试是否已填充POST全局变量。
例如:
if (isset($_POST["inputName"])) {
echo "Naam: " . $_POST["inputName"] . "<br />";
}
另外,为<input>
元素提供一个name
值,该值与您在请求时期望的POST变量相同。
答案 2 :(得分:1)
您的输入字段没有name
属性。将其更改为:
<input type="text" id="inputName" name="inputName" placeholder="Uw naam">
和
<input type="text" id="inputEmail" name="inputEmail" placeholder="Email">
另外,请确保为下面提到的用例的提交按钮添加名称属性:
<input type="submit" name="submitButton" class="btn" value="Versturen" />
我还建议使用isset()
来检查表单是否实际提交:
if(isset($_POST['submitButton'])) {
// your PHP code here
}
这样,您可以在尝试访问表单输入值之前确保提交表单。
而且,在您的PHP代码中,您反复使用$_POST
个值。为什么不将它们存储为变量并根据需要重新使用?
通过更正,您的PHP代码应如下所示:
if(isset($_POST['submit'])) { //if form submitted
$name = $_POST["inputName"];
$email = $_POST["inputEmail"];
$text = $_POST["inputText"];
if ($name) {
echo "Naam: " . $name . "<br />";
}
if ($email) {
echo "Mail: " . $_POST["inputEmail"] . "<br />";
}
if ($text) {
echo "Text: " . $text . "<br />";
}
// photo is the name of our file input field
if ($_FILES['photo']['error'] > 0) {
echo "Error: " . $_FILES['photo']['error'] . "<br />";
} else {
echo "File name: " . $_FILES['photo']['name'] . "<br />";
echo "File type: " . $_FILES['photo']['type'] . "<br />";
echo "File size: " . ($_FILES['photo']['size'] / 1024) . " Kb<br />";
echo "Temp path: " . $_FILES['photo']['tmp_name'];
}
}
希望这有帮助!