0

每当我尝试将视频存储到数据库中时,它都会给我一个错误。我这里有一个代码可以将视频存储到一个文件夹中,并且只保存数据库中的 id_no 和 video_name,我希望将所有 5 个字段都存储到我的数据库中。 ..任何人都可以帮我解决我的代码吗

 <?php session_start();?>
 <?php
 include("session/DBConnection.php");
 include("session/session.php");
 $error = "";
 ?>

 <?php
 $user = $_SESSION['log']['username'];
 $query = mysql_query("SELECT * FROM members WHERE username = '$user'") or                      die            (mysql_error()); 
        $display = mysql_fetch_array($query);   

if(isset($_POST['upload'])){ 
$mem_id = $display['member_id'];
$stat = "just uploaded a video.";
$date = date("m/d/Y");
$qry = "INSERT INTO updates SET member_id='$mem_id', status='$stat', date='$date'";
$result = mysql_query($qry);
if($result){
echo "<meta http-equiv=\"refresh\" content=\"0;URL=video.php\">";
 }
}

?>

<?php

if(isset($_POST['video']) && $_FILES['userfile']['size'] > 0)
{

    $tmpName = $_FILES['userfile']['tmp_name'];
    $fp = fopen($tmpName, 'r');
    $content = fread($fp, filesize($tmpName));
    $content = addslashes($content);
    fclose($fp);

    if(!get_magic_quotes_gpc())
    {
        $fileName = addslashes($fileName);
    }

    else{

            move_uploaded_file($_FILES["userfile"]["tmp_name"],"video_uplaod/" . $_FILES["userfile"]["name"]);
            $user = $_SESSION['log']['username'];
            $today = strtotime(date("Y-m-d H:i:s"));
            $location="video_upload/" . $_FILES["userfile"]["name"];
            $video_name=$_POST['video_name'];


            $sql = "INSERT INTO tbl_video SET username='$user', video='$location', video_name='$image_name', date_created='$today'";


    echo "File $fileName uploaded";
}

header("video.php");
?>
4

1 回答 1

1

您的 INSERT 语句是错误的,

INSERT INTO updates (member_id, status, date) VALUES('$mem_id','$stat','$date')

正如迈克所说,应该是正确的陈述。

但是,您的代码中有 3 个大问题:

1)您正在使用已弃用的功能。

说真的,停止使用 mysql_ 函数,它们已被弃用,PHP 不再支持它们,而且它们可能随时消失,当这种情况发生时,你的代码将会中断,你将陷入困境。请改用 mysqli 或 PDO。

2) 您的代码易受 SQL 注入攻击。

您没有清理用户输入,addslashes不足以防止 SQL 注入到您的查询中,如果您使用 mysqli 或 PDO,您将能够使用准备好的语句,这样您的代码将不再容易受到 SQL 注入的攻击(它不会这并不意味着您无论如何都不应该清理用户输入)。

3) 您的代码可能容易受到文件上传攻击。

你真的信任你的用户,对吗?

  • 如果我应该上传一个视频文件,但我上传了一个 php 文件来复制你的整个 web 目录,压缩它,然后将它发送到我的电子邮件,这样我就可以看到你的源代码,查看你的数据库凭据,该怎么办? ,然后打开一个后门到你的服务器并做任何我想做的事?
  • 上传文件时,您不应保留原始文件名,不应“按原样”保存文件,您必须处理该文件并确保您正在处理视频文件......不要依赖文件扩展名,因为我可以上传“myfunnyvideo.avi.php”并且您的文件扩展名将通过,因为它包含“.avi”,而 apache 将运行该文件,因为它包含 php。
  • 您不应该将文件保存在攻击者可以猜到的文件夹中,尽量使其变得模糊......查看我的文件是否已上传到uploads/ video_uploads/ 文件夹是很明显的。
  • 无论您选择将文件上传到哪个文件夹,请确保 apache 无法在该文件夹内运行任何脚本……否则,如果恶意用户猜测上传目录,他可能会运行他想要的任何 php 脚本。

编辑

INSERT INTO updates SET member_id = ".$mem_id

是正确的语法,这是给那些不相信的人的证据:

http://sqlfiddle.com/#!2/df90b8/2/0

于 2013-07-10T17:16:19.870 回答