用户上载文件后如何立即填充数据库

时间:2019-07-05 14:31:16

标签: html mysql

所以我有一个代码,用户可以在其中从某个目录上载视频文件。

-现在,用户上传文件后,我希望创建一个表,其中文件名作为表名,正好是名为

的三列

ID(primary),type(varchar20), timestamp(float)

-第二,该页面应显示创建的表名,并且如果用户愿意,应该有一个删除表的选项。

我的视频上传和播放代码如下

<h1>HTML5 local video file player example</h1>
<div id="message_"></div>
<input type="file" accept="video/*"/>
<video controls autoplay></video>


<script>
(function localFileVideoPlayer() {
        'use strict'
  var URL = window.URL || window.webkitURL
  var displayMessage = function (message, isError) {
    var element = document.querySelector('#message_')
    element.innerHTML = message
    element.className = isError ? 'error' : 'info'
  }
  var playSelectedFile = function (event) {
    var file = this.files[0]
    var type = file.type
    var videoNode = document.querySelector('video')
    var canPlay = videoNode.canPlayType(type)
    if (canPlay === '') canPlay = 'no'
    var message = 'Can play type "' + type + '": ' + canPlay
    var isError = canPlay === 'no'
    displayMessage(message, isError)

    if (isError) {
      return
    }

    var fileURL = URL.createObjectURL(file)
    videoNode.src = fileURL
  }
  var inputNode = document.querySelector('input')
  inputNode.addEventListener('change', playSelectedFile, false)
})()
</script>

2 个答案:

答案 0 :(得分:1)

(从php.net https://php.net/manual/en/features.file-upload.post-method.php无情地被盗)

<?php
$uploaddir = '/var/www/uploads/';
$uploadfile = $uploaddir . basename($_FILES['userfile']['name']);

if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile) && $_FILES['userfile']['type'] === 'image/jpeg') {
    echo "File is valid, and was successfully uploaded.\n";
} else {
    echo "Possible file upload attack!\n";
}

/*for creating table, which I don't recommend*/

$sql_query = "CREATE TABLE ".$_FILES['userfile']['name']." INT(6) AUTO_INCREMENT PRIMARY KEY,
type VARCHAR(20) NOT NULL,
timestamp FLOAT
)";
$mysqli->query($sql_query);

?>

/ 代码的前半部分,但是出现了问题,我将在一个小时后回来... /

<?php
print '<form action="delete.php" method="post">
'.$_FILES['userfile']['name'].' <input type="submit" value="'.$_FILES['userfile']['name'].'" name="delete" />
</form>';
?>

<?php
$sql_query = "DROP TABLE ".$_POST['delete'];
$mysqli->query($sql_query);
?>

我建议不要创建每个文件的表,而是建议创建一次表,然后像这样插入文件:

<?php
$stmt = $mysqli->prepare("INSERT INTO table (name, type, timestamp) VALUES (?,?,?)");
$stmt->bind_param("ssf", $_FILES['userfile']['name'], $_FILES['userfile']['name'], strtotime(date("Y-m-d H:i:s")));
$stmt->execute();
?>

类似地,如果您要删除:

<?php
$stmt = $mysqli->prepare("DELETE FROM table WHERE name = ?");
$stmt->bind_param("s",$_POST['delete']);
$stmt->execute();
?>

或者,如果您知道ID,则可以改为删除它(比较安全,因为多个文件可以拥有相同的名称,但ID必须是唯一的)。

答案 1 :(得分:1)

这是您可能希望做的事情的大概况。

1。识别谁上传了什么

您可能希望每个上传者都能够请求其上传文件的列表,并可以选择删除一个或多个。或者,您可能希望能够列出所有已上传的视频,并按上传者对其进行分组。

为此,您需要一个登录系统。 Here is a post链接到一些视频,可带您完成该过程。

2。提供一个上传系统(客户端)

您可以像这样做一样从头开始编写,也可以使用已经发明的轮子(而不是自己重新发明)。 This jQuery plugin很棒-看起来世界一流,而且效果完美。我已经在数十个项目中使用了它。另外,它附带了服务器端和客户端的示例代码。看看。

3。管理上传的文件(服务器端)

在服务器端,您可能需要某种程度地组织上载的文件。无需在服务器上创建太多的文件夹结构,因为您具有数据库表来跟踪事物,但是至少您可能希望将它们放入名为“上载”或“视频”等的文件夹中-只是为了避免它们与HTML文件一起存储。

4。将每个上传的视频添加到MySQL(现在称为MariaDB)表中

如果您使用jQuery File Upload插件,那么您将已经有一个文件来处理上传文件的后端收据。在此文件中,您将编写代码以将数据也发布到数据库中。

查看this spot jQuery文件上传插件的文档。该插件使您可以从页面中获取一些其他数据(例如,您可能具有要求用户提供标签的字段,或者允许用户选择类别的下拉列表),并且还希望将这些选择插入上载文件时的数据库。这就是您的做法。

5。从MySQL表中获取视频列表并将其列出在网页上

这很简单,只需查询数据库,在PHP变量中创建一些HTML代码,然后在网页的适当位置输出包含该HTML的PHP​​变量。就个人而言,我宁愿将我的PHP尽可能多地保留在页面顶部-创建包含任何PHP输出的字符串-然后在适当的位置echo HTML代码。保持文件整洁并易于阅读。

youtube video将帮助您掌握操作方法。另请参阅这篇文章和这篇文章。

一些注意事项:

a。您必须将所有网页文件命名为以.php而不是.html结尾。页面的工作方式几乎没有区别-唯一的区别是,任何以.php结尾的页面现在都可以处理PHP代码。否则,它们是相同的。实际上,您现在可以重命名它们-试试看-它们将起作用。

b。 PHP代码可以插入到您网页的任何位置-您只需将PHP代码放在PHP_Start和PHP_END标签之间-看起来像这样:

<?php
    $myvar = 'Bob';
?>

c。 PHP对遗失的语句结尾分号非常感到宽恕。如果您忘记了一个脚本,PHP脚本将在该位置 中止而不会发出通知 。这使得使用PHP有点棘手。 See this answer提出了一些建议。

d。所有PHP变量均以美元符号开头。很奇怪,但事实如此。使用echo命令将PHP字符串输出到屏幕上(例如,包含HTML的PHP​​字符串将在屏幕上显示该HTML)。

e。 PHP $_SESSION非常有用。这并不困难-这只是将变量 存储在服务器上 的一种方法。对于记住某人是否已登录,记住存储在MySQL表中的有关该用户的数据等事​​情非常有用。

祝你项目顺利。