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

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

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

提前致谢!

最佳答案

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

代替

  if ($_POST["inputName"]) {

使用

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

其他人会告诉你使用isset(),但它不会做你想做的。 isset() 函数只是检查变量是否存在。但是在这里您还期望此变量为 ba boolean true,这意味着它们也不能为空。此处,empty 函数检查变量是否存在且不为空。

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

关于具有混合输入(文件和文本)的 PHP 表单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18836030/

相关文章:

ruby - 为什么我在查看 Sinatra 表单时会得到 "Errno::ENOENT: No such file or directory"?

php - 允许用户在运行时向表单添加字段

html - 包括具有相同样式的文本区域

PHP 在 <a> 标签内发布一个变量

jquery - Asp.net MVC 5 Ajax POST 在应用程序发布后抛出异常 404(未找到)

html - 为什么我的邮政容器不起作用?

如果不包含 $parallel litem,php 变量将不会保存到数据库中

php - 创建过滤器 _GET(或 _POST)变量的正确方法是什么?

php - CSV 导出脚本仅在 IE 中生成错误?

php - 如何将MySQL列数据中的换行符转换为\n?