3

我在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) 它是一个空数组。所以它应该是我的表单中的东西,但我已经将它设置为 post 并且 enctype 是正确的(我记得)....

我必须承认我的编码已经关闭并且已经有一段时间了。

提前致谢!!

4

3 回答 3

3

这些只是通知。它们出现是因为您尝试使用$_POST带有不存在索引的数组。

代替

  if ($_POST["inputName"]) {

利用

  if (!empty($_POST["inputName"])) {

其他人会告诉你使用isset(),但它不会做你想做的事。isset()函数只是检查变量是否存在。但是在这里你也希望这个变量是布尔值,它们也不能为空。在这里,empty函数检查变量是否存在且不为空。

此外,您的元素中没有name属性。input它们是由您识别的,name而不是id您所期望的。

于 2013-09-16T19:45:59.610 回答
2

尝试使用该isset方法测试是否已填充 POST 全局变量。

例如:

if (isset($_POST["inputName"])) {
  echo "Naam: " . $_POST["inputName"] . "<br />";
}

另外,给<input>元素一个name值,该值与您期望的请求中的 POST 变量相同。

于 2013-09-16T19:46:32.190 回答
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'];
    }

}

希望这可以帮助!

于 2013-09-16T19:46:19.473 回答