【问题标题】:PHP insert form data and upload file to MySQL tablePHP插入表单数据并将文件上传到MySQL表
【发布时间】:2019-06-03 09:55:16
【问题描述】:

我正在尝试创建一个将用户数据插入数据库表并上传文件的表单,但是我不知道如何将文件添加到数据库中。表单数据输入没有问题,只是文件没有。任何帮助,将不胜感激。

PHP 表单:

<form method="post" action="index.php" id="frm_add" enctype="multipart/form-data">
      <input type="hidden" value="add" name="action" id="action">
              <div class="form-group">
                <label for="medID" class="control-label">ID</label>
                <input type="hidden" class="form-control" id="medID" name="medID"/> 
              </div>
      <div class="form-group">
                <label for="emp_id" class="control-label">Employee No:</label>
                <input type="text" class="form-control" id="emp_id" name="emp_id"/>
              </div>
              <div class="form-group">
                <label for="name" class="control-label">Full Name:</label>
                <input type="text" class="form-control" id="name" name="name"/>
              </div>
      <div class="form-group">
                <label for="title" class="control-label">Job Title:</label>
                <input type="text" class="form-control" id="title" name="title"/>
              </div>
      <div class="form-group">
        <label for="documents" class="control-label">Supporting Documents:</label>
        <input type="file" name="documents" class="form-control">
              </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            <button type="button" id="btn_add" class="btn btn-primary">Save</button>
        </div>          
</form>

插入.php

    <?php
    //include connection file 
    include_once("connection2.php");

    $db = new dbObj();
    $connString =  $db->getConnstring();

    $params = $_REQUEST;

    $action = isset($params['action']) != '' ? $params['action'] : '';
    $empCls = new Student($connString);

    switch($action) {
     case 'add':
        $empCls->insertStudent($params);
     break;
     case 'edit':
        $empCls->updateStudent($params);
     break;
     case 'delete':
        $empCls->deleteStudent($params);
     break;
     default:
     $empCls->getStudents($params);
     return;
    }

    class Student {
    protected $conn;
    protected $data = array();
    function __construct($connString) {
        $this->conn = $connString;
    }

    public function getStudents($params) {

        $this->data = $this->getRecords($params);

        echo json_encode($this->data);
    }
    function insertStudent($params) {
        $data = array();
        $sql = "INSERT INTO `employee` (emp_id, name, title, documents) VALUES('" . $params["emp_id"] . "', '" . $params["name"] . "','" . $params["title"] . "', '" . $params["documents"] . "');  "; 
echo $result = mysqli_query($this->conn, $sql) or die("error to insert student data");
}

我做错了什么,我需要在文档中添加什么?任何帮助将不胜感激。

谢谢

【问题讨论】:

  • 请阅读SQL injection。不要使用字符串连接构建查询,而是使用prepared statementsbound parameters。请参阅 this pagethis post 了解一些很好的示例。
  • $_REQUEST 涵盖 GET 和 POST 数组,而不是 FILES。启用错误报告,会给你一个未定义的索引。您需要在此处进行一些重写。
  • 嗨,塔尔哈。在网络上,您可以研究很多关于如何使用 php 管理上传文件的示例。在这里您可以查看一个:w3schools.com/php/php_file_upload.asp 在 DB 中存储文件并不常见。如果你真的想这样做,你可以使用 blob 字段。但是您可以将它们存储在文件系统或外部存储系统中。
  • @Curlas 请避免链接到 w3schools。这是非常低质量的内容,并且通常充满严重的安全漏洞和糟糕的建议。尽可能链接到official manual,或者更高质量的教程或解释器。
  • ????:“看起来您正在编写自己的 ORM。您是否考虑过使用已经编写、测试和广泛支持的 ORM,例如 RedBeanPHPDoctrine、@987654330 @ 或Eloquent?”

标签: php mysql forms file-upload


【解决方案1】:

在数据库中保存文件是没有意义的。只获取文件名,没有别的

$info = pathinfo($_FILES['userFile']['name']);
$ext = $info['extension']; // get the extension of the file
$newname = "newname.".$ext; 

$target = 'images/'.$newname;
move_uploaded_file( $_FILES['userFile']['tmp_name'], $target);

上面的代码来自这里:How to upload & Save Files with Desired name

因此,您需要做的是将名称保存在数据库中,而不仅仅是使用包含“名称”的文件的路径访问该名称

【讨论】:

  • 你是对的,但你也可以通过转换为blob格式将文件保存到db,还需要设置table column to blob的数据类型
  • 感谢您提供的信息,所以 $target 是它存储文件的文件夹路径并且只将名称添加到数据库中?我已经尝试过了,但它实际上并没有向数据库添加任何内容,我猜问题出在我的 INSERT 部分:我还应该如何更改文档值?目前,它是 '" . $params["documents"] . "'
  • @TalhaS 使用 die() 调试表单;在插入方法之前并打印出您的 $_POST 看看那里是否缺少某些东西,如果没有任何东西比 INSERT 方法中的问题
  • 表单正在将所有数据输入数据库,但仍未输入文件名或将文件上传到文件夹。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-08-29
  • 1970-01-01
  • 2012-04-10
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 2017-02-21
相关资源
最近更新 更多