提问者:小点点

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


所以我有一个代码,用户从某个目录上传视频文件。

-现在,只要用户上传了文件,我就希望创建一个表,其中文件名作为表名,正好有三列被命名为

ID(主),类型(varchar20),时间戳(浮点)

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

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

<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个答案

匿名用户

(无情地从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必须是唯一的)。

匿名用户

以下是您可能希望做的事情的总体概述。

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

为此,您需要一个登录系统。这里有一个帖子链接到几个视频,带你经历这个过程。

你可以像现在这样从头开始写,或者你可以使用一个已经发明的轮子(而不是自己重新发明)。这个jQuery插件是真棒-看起来世界级和完美的作品。我已经在几十个项目上使用了它。此外,它还为服务器端和客户端提供了示例代码。看看吧。

在服务器端,您可能希望在某种程度上组织上传的文件。不需要在服务器上创建太多的文件夹结构,因为您有一个数据库表来跟踪内容,但至少您可能希望将它们放在一个名为“uploads”或“videos”等的文件夹中,这样它们就不会与HTML文件一起存储。

如果您使用jQuery文件上传插件,您将已经有一个文件来处理上传文件的后端接收。正是在这个文件中,您编写了代码,也将数据发布到数据库中。

看看这个jQuery文件上传插件的文档。该插件允许您从页面中获取一些额外的数据(例如,您可能有要求用户提供标记的字段,或者允许用户选择类别的下拉列表),并且您还希望在以下情况下将这些选择插入数据库你上传文件。你就是这样做的。

这是一个简单的问题,查询数据库,在PHP变量中创建一些HTML代码,然后在网页的适当位置输出包含该HTML的PHP变量。就我个人而言,我更喜欢将尽可能多的PHP放在页面顶部——创建包含任何PHP输出的字符串——然后在适当的位置echoHTML代码。保持文件整洁,易于阅读。

这段youtube视频将帮助您掌握如何做到这一点。也可以看到这篇文章和这篇文章。

要记住的一些注意事项:

a、 您必须将所有网页文件命名为。php而不是。html。页面的工作方式几乎没有什么不同——唯一的区别是任何以结尾的页面。php现在可以处理php代码了。否则,它们是相同的。事实上,你现在可以重命名它们——试试看——它们的工作原理是一样的。

B.PHP代码可以插入到您网页的任何地方-您只需将PHP代码放在PHP_Start和PHP_END标记之间-它看起来像这样:

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

c、 PHP对于缺少语句结尾分号是非常不可原谅的。如果您忘记了一个,PHP脚本将在没有通知的情况下中止,这使得使用PHP有点棘手。请参阅此答案以获得一些建议。

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

e、 PHP$\u会话非常有用。这并不难——它只是在服务器上存储变量的一种方法。对于诸如记住是否有人登录、记住存储在MySQL表中的关于该用户的数据等非常有用。

祝你的项目好运。