【问题标题】:Creating a simple PHP Image Upload within a Form在表单中创建简单的 PHP 图像上传
【发布时间】:2013-03-10 02:50:02
【问题描述】:

我正在制作一个简单的图片上传表单,其中包含供人们添加 cmets 和其他详细信息的地方。到目前为止,我已经达到了这个代码。

问题:当我运行它时,我上传的文件可以正常进入目录,但表单中的数据没有写入数据库。

<?php
//$con = mysql_connect("localhost","root","");
$con = mysql_connect("localhost","Login","password","DBname");
if (!$con)
{
    die('Could not connect: ' . mysql_error());
}


if(isset($_FILES['files'])){
    $errors= array();
    foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
        $file_fname=$_POST['fname'][$key];
        $file_Lname=$_POST['lanem'][$key];
        $file_email=$_POST['email'][$key];
        $file_school=$_POST['school'][$key];
        $file_comment=$_POST['comment'][$key];
        $file_name = $key.$_FILES['files']['name'][$key];
        $file_tmp =$_FILES['files']['tmp_name'][$key];


        if($file_size > 2097152){
            $errors[]='File size must be less than 2 MB';
        }



        $query = "INSERT INTO sameplTable(`fname`,`lname`,`email`,`school`,`comment`,`filename`) VALUES
        ('$fname','$lname','$email','$school','$comment','$filename')";




        $desired_dir="user_data";
        if(empty($errors)==true){
            if(is_dir($desired_dir)==false){
                mkdir("$desired_dir", 0700);        // Create directory if it does not exist
            }
            if(is_dir("$desired_dir/".$file_name)==false){
                move_uploaded_file($file_tmp,"$desired_dir/".$file_name);
            }else{                                  // rename the file if another one exist
                $new_dir="$desired_dir/".$file_name.time();
                rename($file_tmp,$new_dir) ;
            }
            mysql_query($query);
        }else{
            print_r($errors);
        }
    }
    if(empty($error)){
        echo "Success";
    }
}
?>


<form action="" method="POST" enctype="multipart/form-data">
    <input type="file" name="files[]" multiple/>
    Value1: <input type="text" name="fname"><br>
    Value2: <input type="text" name="Lname"><br>
    Value3: <input type="text" name="email"><br>
    Value4: <input type="text" name="school"><br>
    Value5: <input type="text" name="comment"><br>

    <input type="Submit">
</form>

【问题讨论】:

  • 只想指出,您预期的插入变量之一是$Fname,但您拥有的是$file_fname
  • @tradyblix 这实际上是 every 预期插入变量的问题,导致实际上没有插入任何内容。此外,此代码易受 SQL 注入攻击,并且不推荐使用 mysql_* 函数。而是使用 PDO 或 MySQLi,并使用准备好的语句。
  • 感谢您指出这一点。这只是我这边的一个错字。
  • 即使在修复并运行之后。还是一样。我上传了文件,但数据库中没有任何内容。
  • 您的查询的列列表有 6 列,而 VALUES 的长度为 7。我不确定这是否会阻止查询工作,但这绝对是要解决的问题。跨度>

标签: php image forms upload


【解决方案1】:

您忘记在输入名称后添加 [],而不是 type=file。所以 POST 数组不会有 $key。

【讨论】:

  • 我不明白,你能说得清楚一点。
  • 在输入名称后使用 [] 假设您将有几个相同类型的输入名称相同,并且您可以在服务器端使用 foreach 访问它的值。 SomeName[] 的值将作为数组传递给服务器。现在查看您的 HTML - 您使用 [] 进行文件输入,但不用于文本输入。但是在服务器端,您尝试访问 POST 变量,因为它不是一个多维数组 ($file_fname = $_POST["fname"][$key])。
猜你喜欢
  • 2017-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-23
  • 2013-05-22
  • 2011-02-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多