带有混合输入的PHP表单(文件和文本)

时间:2013-09-16 19:43:25

标签: php forms post enctype

我在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是正确的(我记得)....

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

提前致谢!!

3 个答案:

答案 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'];
    }

}

希望这有帮助!