Javascript和PHP上传系统

Posted

技术标签:

【中文标题】Javascript和PHP上传系统【英文标题】:Javascript and PHP upload system 【发布时间】:2012-09-07 16:55:31 【问题描述】:

提前感谢您的帮助,我希望我对我的请求的解释是可以理解的。

我有一个网站,我在其中上传各种 html 页面,其中包含脚本、网站等,我发现这些页面随着时间的推移很有用...目的是 1) 为自己提供参考,以及 2) 分享我的发现和其他人一起。

该网站由 2 个部分组成。用于查找脚本的搜索页面和用于上传脚本的管理页面。上传的 HTML 文件被放置在我服务器上的“docs/”目录中,详细信息被添加到搜索页面的 mysql 数据库中。

表格如下所示:

<form name="upload" enctype="multipart/form-data" action="includes/add.php" 
method="post" onsubmit="return validateForm();"> 

<label for="scriptname">Script Name</label><input class="inputarea" type="text" 
name="scriptname"><br> 
<label for="category">Category</label><input class="inputarea" type="text" 
name="category"><br> 
<label for="keywords">Keywords</label><input class="inputarea" type="text" 
name="keywords"><br>
<label for="content">HTML File</label><input class="inputarea" type="file" 
name="content"><br> 
<input class="submit" type="submit" value="Add"> 
</form>

我的问题是...... javascript 或 PHP 有什么办法可以做到以下几点:

    为上传的文件生成一个自动文件名(几个随机数字就可以了)

    在“脚本名称”输入字段中,在提交时添加文本,以便将脚本名称和文件名作为文本添加到数据库中的超链接...例如。当按下提交按钮时,将以下内容添加到数据库中:

    "scriptname_input"

粗体部分取自生成的文件名,斜体部分取自输入字段...

这样做的目的是为了在搜索结果中,当出现带有脚本名称的数据库列时,脚本名称是指向实际文件的链接。我已经准备好搜索功能,它可以从数据库条目中创建链接,但我只需要简化上传过程。

如果这不可能,是否有其他方法可以实现?

---编辑---

感谢大家的帮助!非常感谢,我结合了一些建议来解决这个问题。但是,我将功劳归功于 Ibere,因为他的解决方案是最接近的。

这是我用于处理上传和数据库添加的“add.php”文件的最终代码,以防它再次出现(我对此表示怀疑):P

<?php

$filename = md5($_FILES['content']['name']);
$labelForUrl = $_POST['scriptname'];
$url = "<a href=\"docs/$filename\">$labelForUrl</a>";
$target = "../docs/";

//This gets all the other information from the form
$name=$_POST['scriptname'];
$cat=$_POST['category'];
$key=$_POST['keywords'];
$link=$_POST['link'];
$file=($_FILES['content']['scriptname']);

// Connects to your Database
mysql_connect("localhost", "username", "password") or
die(mysql_error()) ;
mysql_select_db("scripts") or die(mysql_error()) ;

//Writes the information to the database
mysql_query("INSERT INTO scripttable (scriptname,category,keywords,link,content)
VALUES ('$url', '$cat', '$key', '$link', '$file')") ;

if(move_uploaded_file($_FILES['content']['tmp_name'], $target . $filename)) 
echo "The file ".  $labelForUrl. 
" has been uploaded";

else 
    echo "There was an error uploading the file, please try again!";
    

?>

【问题讨论】:

这些应该是对您当前上传脚本的小改动。你能发布那个脚本吗? 【参考方案1】:

你可以对文件名做这样的事情。

$filename = md5($_FILES['content']['name']);

$labelForUrl = $_POST['scriptname'];

md5 不是随机的,但足以为文件名生成不可读的字符串。 然后你可以创建一个这样的网址

<a href="docs/<?php echo $filename; ?>" ><?php echo $labelForUrl; ?></a>

希望这会有所帮助。

编辑:我忘记在文件名中添加扩展名。所以正确的代码应该是这样的:

$filename = md5($_FILES['content']['name']).$_FILES['content']['type']

【讨论】:

干杯!通过一些调整,我得到了完美的工作......很好的帮助。【参考方案2】:

我建议使用 uploadify 进行上传。但是,按照你的要求做:

$randomFileName = rand(1000, 9999);
if (file_exists("upload/" . $_FILES["file"]["name"]))
  
  echo $_FILES["file"]["name"] . " already exists. ";
  
else
  
  move_uploaded_file($_FILES["file"]["tmp_name"],
  "upload/" . $randomFileName . $_FILES["file"]["type"]);
  // update your db with the location
  $loc = "upload/" . $randomFileName . $_FILES["file"]["type"];    
  mysqli_query("insert into `myTable` (`loc`) values ('$loc')");
  echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  

文件上传帮助请看http://www.w3schools.com/php/php_file_upload.asp

【讨论】:

谢谢堆,这非常接近我的需要,但是,我也希望将表单中的脚本名称作为超链接上传,以便在搜索中找到脚本时,用户将单击脚本名称并被带到上传的 html 文件...为了澄清,脚本名称是插入到文本字段中的内容,而不是文件名,文件名设置为随机。这可能吗? 您是否正在尝试上传与网页相关的文件,然后生成或上传一个为其指定随机名称的网页?【参考方案3】:

如果你知道 codeigniter(PHP 框架),这很容易。

您可以使用Upload Class

您可以轻松创建表单并提交它们并显示它们。

我会那样做。如果您熟悉 MVC,则可以在 10-15 分钟内完成。

【讨论】:

【参考方案4】:
    要生成随机文件名,我通常会发现这很有效:md5( rand( 0, 100000 ) );。如果你想限制文件名的大小,你可以使用substr函数。 (假设是 MySQL 数据库),make the connection,然后是 query the database,使用 INSERT command。 This link 展示了如何做到这一切。

【讨论】:

以上是关于Javascript和PHP上传系统的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Javascript从文件上传中获取完整路径

从 PHP 获取信息到 HTML5 JavaScript 游戏

上传漏洞

将 PHP 转换为 JavaScript。将键/值存储到数组中

使用 PHP 将照片 URL 发送到 JavaScript

使用 Javascript FormData()、AJAX $.post 和 PHP 的简单文件上传