自动提交未将数据发布到数据库

时间:2019-04-08 15:13:54

标签: php html mysql

我正在尝试将文件发布到Blob。我创建了一个HTML表单,该表单会在选择A文件时自动发布:

<form id="target" method="post" name="frmImage" class="frmImageUpload" action="./post.php">  
  <div id="pic1">
    <input type="file" name="userfile" id="userfile" class="userfile"/>
  </div>
</form>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script type="text/javascript">
  $('#pic1').click(function(){ 
    $('#userfile').trigger('click'); 
  });
</script>

<script type="text/javascript">
  $('#userfile').change(function() {
    $('#target').submit();
  });
</script>

当我选择文件时,脚本会将我导航到post.php。但是它没有向数据库发布任何内容。

这是我的post.php:

<?php
    include_once '../../../../includes/connect.php';
    include_once '../../../../includes/functions.php';

    sec_session_start();

    $correct = true;

    if(isset($_POST['userfile']) && $_FILES['userfile']['size'] > 0) {
      $fileName = $_FILES['userfile']['name'];
      $tmpName  = $_FILES['userfile']['tmp_name'];
      $fileSize = $_FILES['userfile']['size'];
      $fileType = $_FILES['userfile']['type'];
      $_SESSION['user_id'];

      $fp = fopen($tmpName, 'rb');
      $content = fread($fp, filesize($tmpName));
      $content = addslashes($content);
      fclose($fp);

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

        $query = "INSERT INTO temp (user_id, content) VALUES (". $_SESSION['user_id'] .", '$content')";
        mysql_query($query) or die(mysql_error()); 
        $msg = "<br>File <b>$fileName</b> uploaded<br>";

    }
    else
    {
        $msg = "<br>File <b>$fileName</b> not uploaded<br>";
    }
?>

有人知道我的脚本出了什么问题吗?

编辑: 收到的错误消息如下:

  

注意:未定义的索引:第12行(...)中的用户文件

  

注意:未定义的变量:第37行(...)中的文件名

2 个答案:

答案 0 :(得分:2)

根据您的评论,由于multipart/form-data,您将收到未定义的索引通知,

您需要在<form>中将enctype="multipart/form-data"用作:

<form id="target" method="post" name="frmImage" class="frmImageUpload" action="./post.php" enctype="multipart/form-data">  

第二,您需要在顶级声明中将$fileName定义为$fileName = '';,否则您将收到另一个未定义的变量通知

您需要在此行之前声明它:

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

为:

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

第三,不建议使用mysql_ *扩展名,并已在PHP7中关闭,我建议您使用mysqli_*PDO

第四,您的代码对于SQL注入是开放的,防止SQL注入,您可以使用PDO。

第五,不知道这是什么吗? $_SESSION['user_id'];

一些有用的链接:

How can I prevent SQL injection in PHP?

Are PDO prepared statements sufficient to prevent SQL injection?

答案 1 :(得分:2)

您的表单必须包含enctype='multipart/form-data'属性。上传文件需要此属性。

它看起来像:

<form id="target" method="post" enctype='multipart/form-data' name="frmImage" class="frmImageUpload" action="./post.php">  
  <div id="pic1">
    <input type="file" name="userfile" id="userfile" class="userfile"/>
  </div>
</form>

我建议您使用move_uploaded_fileSee more