将多个表单上传到数据库

时间:2013-11-27 20:44:12

标签: php mysql sql

好吧我正在尝试上传图片,然后是图片说明。图像将上载到数据库,但文本字段不会。

我认为我的代码是正确的,但由于某种原因,没有任何内容会进入数据库。我认为什么都没有存入阵列,我不知道为什么。

这是我的表格。

<form method="post" enctype="multipart/form-data" action="process.php">
<div id="filediv">
<div id="imagefiles">
<input type="hidden" name="MAX_FILE_SIZE" value="2000000">
<label>Upload File:
<input name="userfile[]" type="file" id="userfile" multiple></label>
<label>Item Name: <input name='itemname[]' type="text"></label>
<label>Item Description: <input name="itemdesc[]" type="text"></label>
<label>Item Timeframe: <input name='itemtime[]' type="text"></label>
<label>Item Donor: <input name='itemdonor[]' type="text"></label>
<label>Hidden Information: <input name='hidden[]' type="text"></label>
 </div>
 </div>
<br>

<input type="button" id ="thebutton" value="Add Another File" />
<input name="UploadFile" type="submit" />
</form>

这是我的功能

function uploadFile()
{
include 'functions.php';
hasSession();
session_start();
$dbhost =   '';
$dblogin = '';
$dbpass = '!';
$dbbase = '';
$conn = mysqli_connect($dbhost, $dblogin, $dbpass, $dbbase);
if(mysqli_connect_errno()){
    printf("Can't connect to MySQL Server. Errorcode: %s\n", mysqli_connect_error()); 
    exit; 
} 
$arrCount = count($_POST["itemname"]);

$name[] = $_POST["itemname"];
$donor[] = $_POST["itemdonor"];
$desc[] = $_POST["itemdesc"];
$time[] = $_POST["itemtime"];
$hide[] = $_POST["hidden"];

for($i=0; $i<$arrCount; $i++){
    $sql = "INSERT into items (name, donor, time, desc, hidden) VALUES ('$name[$i]', '$donor[$i]', '$desc[$i]', '$time[$i]', $hide[$i]')";
}
$numFiles = count($_FILES['userfile']['name']);
for($x=0;$x<$numFiles;$x++){
//($_FILES['userfile'][$counter]['error'] == 0) && 
    if (($_FILES['userfile']['size'][$x] > 0)){
        $fileName = $_FILES['userfile']['name'][$x];
        $tmpName = $_FILES['userfile']['tmp_name'][$x];
        $fileSize = $_FILES['userfile']['size'][$x];
        $fileType = $_FILES['userfile']['type'][$x];
            if ((($_FILES['userfile']['type'][$x] == "image/gif")   
            || ($_FILES['userfile']['type'][$x]== "image/jpeg")
            || ($_FILES['userfile']['type'][$x] == "image/png")
            || ($_FILES['userfile']['type'][$x] == "image/pjpeg")))
            {
                $fp=fopen($tmpName,'r');
                $content=fread($fp,filesize($tmpName));
                $SourceImage=imagecreatefromstring($content);
                $SourceWidth=imagesx($SourceImage); 
                $SourceHeight=imagesy($SourceImage);
                $ratio=$SourceWidth/$SourceHeight;
                $DestWidth=100;
                $DestHeight=$DestWidth/$ratio;
                $DestinationImage=imagecreatetruecolor($DestWidth,$DestHeight);
                imagecopyresampled($DestinationImage,$SourceImage,0,0,0,0,$DestWidth,$DestHeight,$SourceWidth,$SourceHeight); 
                ob_start(); 
                imagejpeg($DestinationImage); 
                $BinaryThumbnail = ob_get_contents(); 
                ob_end_clean(); 
                $thumb = addslashes($BinaryThumbnail);
                $content=addslashes($content);
                fclose($fp);
                $fileName = addslashes($fileName);  
                mysql_connect('hartslogmuseum.db.11661984.hostedresource.com','hartslogmuseum','Alexandria1!');
                mysql_select_db('hartslogmuseum');
                mysql_query("INSERT INTO images (name,size,type,content,thumbnail) VALUES ('$fileName','$fileSize','$fileType','$content','$thumb')") or die('Error, query failed');
           }else{
                $fp=fopen($tmpName,'r');
                $content=fread($fp,filesize($tmpName));
                $content=addslashes($content);
                fclose($fp);
                $fileName = addslashes($fileName);  
                $link = mysqli_connect('!');
                mysqli_select_db($link,'');
                mysqli_query($link,"INSERT INTO images (name,size,type,content) VALUES ('$fileName','$fileSize', '$fileType','$content')"); 
          }
    }else{
        echo "Error: ". $_FILES['userfile']['error'][$x]."<br/>";
    }
}
    echo "<script>alert('The file(s) has been uploaded');location.replace('uploaded.php');</script>";
}

2 个答案:

答案 0 :(得分:1)

desc是一个保留字,需要用反引号括起来。

如:

`desc`

$sql = "INSERT into items (name, donor, time, `desc`, hidden) VALUES ('$name[$i]', '$donor[$i]', '$desc[$i]', '$time[$i]', $hide[$i]')";

正如MonkeyZeus所述,并且即将编写相同的注释(在同一时间),最好用反引号包装表名和列。

例如:

$sql = "INSERT into `items` (`name`, `donor`, `time`, `desc`, `hidden`) VALUES ('$name[$i]', '$donor[$i]', '$desc[$i]', '$time[$i]', $hide[$i]')";

编辑:

我注意到

缺少引用
  '$time[$i]', $hide[$i]'

- - - - - - - - - - - - - ^

更改为:

'$time[$i]', '$hide[$i]'

完整的代码:

$sql = "INSERT into `items` (`name`, `donor`, `time`, `desc`, `hidden`) VALUES ('$name[$i]', '$donor[$i]', '$desc[$i]', '$time[$i]', '$hide[$i]')";

答案 1 :(得分:0)

我建议你更改desc列,因为desc是一个为命令保留的mysql字,它的应用程序将是:

    SELECT * FROM my_table ORDER BY id DESC

因此您不能将desc用作列名。要获得有关此类错误的信息,请使用

    mysql_error()
每次查询后都有

功能,即

    mysql_query($sql) or die(mysql_error())

因此,将该列名从 desc 更改为另一个不是mysql保留字的名称。 祝你好运!