我尝试上传时无法将数据存储在数据库中

时间:2013-07-10 15:52:38

标签: php mysql

每当我尝试将视频存储到数据库中时,它都会给我一个错误。我这里有一个代码可以将视频存储到一个文件夹中,只保存数据库中的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");
?>

1 个答案:

答案 0 :(得分: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文件,复制整个网页目录,拉链,然后 将它发送到我的电子邮件,以便我可以看到您的源代码,查看您的 数据库凭据,并为您的服务器打开后门并执行 无论我想要什么?
  • 上传文件时,不应保留原始文件名, 你不应该“按原样”保存文件,你必须处理该文件和 确保你正在处理视频文件...不要依赖文件 扩展名,因为我可以上传“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