所以我有一个代码,用户可以在其中从某个目录上载视频文件。
-现在,用户上传文件后,我希望创建一个表,其中文件名作为表名,正好是名为
的三列 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>
答案 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)
这是您可能希望做的事情的大概况。
您可能希望每个上传者都能够请求其上传文件的列表,并可以选择删除一个或多个。或者,您可能希望能够列出所有已上传的视频,并按上传者对其进行分组。
为此,您需要一个登录系统。 Here is a post链接到一些视频,可带您完成该过程。
您可以像这样做一样从头开始编写,也可以使用已经发明的轮子(而不是自己重新发明)。 This jQuery plugin很棒-看起来世界一流,而且效果完美。我已经在数十个项目中使用了它。另外,它附带了服务器端和客户端的示例代码。看看。
在服务器端,您可能需要某种程度地组织上载的文件。无需在服务器上创建太多的文件夹结构,因为您具有数据库表来跟踪事物,但是至少您可能希望将它们放入名为“上载”或“视频”等的文件夹中-只是为了避免它们与HTML文件一起存储。
如果您使用jQuery File Upload插件,那么您将已经有一个文件来处理上传文件的后端收据。在此文件中,您将编写代码以将数据也发布到数据库中。
查看this spot jQuery文件上传插件的文档。该插件使您可以从页面中获取一些其他数据(例如,您可能具有要求用户提供标签的字段,或者允许用户选择类别的下拉列表),并且还希望将这些选择插入上载文件时的数据库。这就是您的做法。
这很简单,只需查询数据库,在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表中的有关该用户的数据等事情非常有用。
祝你项目顺利。