好吧我正在尝试上传图片,然后是图片说明。图像将上载到数据库,但文本字段不会。
我认为我的代码是正确的,但由于某种原因,没有任何内容会进入数据库。我认为什么都没有存入阵列,我不知道为什么。
这是我的表格。
<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>";
}
答案 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保留字的名称。 祝你好运!