数据库未输入

时间:2019-01-18 09:28:55

标签: php mysql sql

我用PHP编写了一个函数,该函数将上传信息发布到数据库表中。如果有人上传了文件,我会得到上传的日期时间和他的帐号,但是文件名有问题,因为允许用户上传多个文件。

fdatum is Datetime
fmandantnr is User Number
fdateiname is Name of the file

代码如下:

datensenden_copy.php

<?php
session_start();
require("../../require.php");

$omy= new clsMYSQL();
$output = '';
$fmandantnr=$_POST['fMandnr'];
for($i=0;$i<count($_FILES['userfiles']['name']);$i++) {
    echo $_FILES['userfiles']['name'][$i];
    $f1name= $_FILES['userfiles']['name'][$i];
}


$query = "INSERT INTO email_hochladen 
                    (fmandantnr,fdatum,fdateiname) 
            VALUES (". $fmandantnr.",".$fdatum.",".$fdateiname.")";
echo $query;
$omy->Query($query);
?>

我做了研究,发现我需要得到这个:

for($i=0;$i<count($_FILES['userfiles']['name']);$i++){
    echo $_FILES['userfiles']['name'][$i];
    $f1name= $_FILES['userfiles']['name'][$i];
}

对此:

$query = "INSERT INTO email_hochladen 
                    (fmandantnr,fdatum,fdateiname) 
          VALUES (". $fmandantnr.",".$fdatum.",".$fdateiname.")";

因为该代码无法在SQL语句中获取 fdateiname

谢谢你的时间。

1 个答案:

答案 0 :(得分:2)

您正在遍历$ FILES数组并获取文件名,但是您的INSERT命令在循环之外,因此您只能对循环中最后一次出现的数据进行一次插入。因此,只需将插入物移动到循环内

  

在您的代码$fdatum中似乎没有定义任何地方,我希望/假设这只是您提供给我们的示例代码中的一部分,或者它可能是在require.php代码中创建的< / p>

<?php
session_start();
require("../../require.php");

$omy= new clsMYSQL();
$output = '';
$fmandantnr=$_POST['fMandnr'];
for($i=0;$i<count($_FILES['userfiles']['name']);$i++) {
    echo $_FILES['userfiles']['name'][$i];
    $f1name= $_FILES['userfiles']['name'][$i];

    $query = "INSERT INTO email_hochladen 
                    (fmandantnr,fdatum,fdateiname) 
            VALUES (". $fmandantnr.",".$fdatum.",".$fdateiname.")";

    $omy->Query($query);
}
?>
  

您的脚本向SQL Injection Attack开放   甚至if you are escaping inputs, its not safe!   在MYSQLI_PDO API中使用prepared parameterized statements

     

由于我对您的clsMYSQL();一无所知,因此无法重新编码以正确使用准备好的语句。