gpt4 book ai didi

PHP 多图像输入表单未将图像输入 MySQL 表列

转载 作者:行者123 更新时间:2023-11-29 13:13:41 25 4
gpt4 key购买 nike

我正在尝试制作一个表单,供用户一次上传多个图像。我试图将所有一次提交的图像放入同一个 MySQL 表行中。我遇到的问题是,当用户提交图像时,除了 image、image1、image2、image3 和 image4 列之外,所有数据都会正确提交到列中。我认为这些列是保存实际图像文件的列。例如,我提交了一张图像,图像列显示[BLOB - 14 B],而我认为它应该至少为 300 KB。我还有一个 viewimage.php 页面,通常应该显示图像,但它显示了一个微小的错误图片。我相信这意味着该列不包含任何图像文件。

这是我的完整 PHP 页面代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head><title>File Upload To Database</title></head>
<body>
<h2>Please Choose a File and click Submit</h2>
<form enctype="multipart/form-data" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="99999999" />
<div><input name="userfile[]" type="file" /></div>
<div><input name="userfile[]" type="file" /></div>
<div><input name="userfile[]" type="file" /></div>
<div><input name="userfile[]" type="file" /></div>
<div><input name="userfile[]" type="file" /></div>
<div><input type="submit" value="Submit" /></div>
</form>

</body></html>

<?php
/*** check if a file was submitted ***/
if(!isset($_FILES['userfile']))
{
echo '<p>Please upload a display picture.</p>';
}
else
{
try {
upload();
/*** give praise and thanks to the php gods ***/
echo '<p>Thank you for submitting</p>';
}
catch(Exception $e)
{
echo '<h4>'.$e->getMessage().'</h4>';
}
}

/*
* Check the file is of an allowed type
* Check if the uploaded file is no bigger thant the maximum allowed size
* connect to the database
* Insert the data
*/

/**
*
* the upload function
*
* @access public
*
* @return void
*
*/
function upload(){

$maxsize = 99999999;
$columnNames = '';
$columnValues = '';
$paramsToBeBound = array();

echo '<pre>' . print_r($_FILES, TRUE) . '</pre>';

/*** check if a file was uploaded ***/
for($i = 0; ($i < count($_FILES['userfile']['tmp_name']) && $i < 5); $i++) {
if($_FILES['userfile']['tmp_name'][$i] != '') { // check if file has been set to upload
if($_FILES['userfile']['error'][$i] == 0 && is_uploaded_file($_FILES['userfile']['tmp_name'][$i]) && getimagesize($_FILES['userfile']['tmp_name'][$i]) != false) {
/*** get the image info. ***/
$size = getimagesize($_FILES['userfile']['tmp_name'][$i]);
/*** assign our variables ***/
$type = $size['mime'];
$imgfp = fopen($_FILES['userfile']['tmp_name'][$i], 'rb');
$size = $size[3];
$name = $_FILES['userfile']['name'][$i];


/*** check the file is less than the maximum file size ***/
if($_FILES['userfile']['size'][$i] < $maxsize)
{
if($i > 0) {
$columnNames .= ', image_type' . $i . ', image' . $i . ', image_size' . $i . ', image_name' .$i;
$columnValues .= ', ?, ?, ?, ?';
} else {
$columnNames .= 'image_type, image, image_size, image_name';
$columnValues .= '?, ?, ?, ?';
}

$paramsToBeBound[] = $type;
$paramsToBeBound[] = $imgfp;
$paramsToBeBound[] = $size;
$paramsToBeBound[] = $name;
} else
throw new Exception("File Size Error"); //throw an exception is image is not of type
}
else
{
// if the file is not less than the maximum allowed, print an error
throw new Exception("Unsupported Image Format of image!");
}
}
}
if(count($paramsToBeBound) > 0) {
$dbh = new PDO("mysql:host=scom;dbname=ksm", 'kesgbm', 'Kszer'); // I tested with MySQL database and worked fine.

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $dbh->prepare('INSERT INTO testblob (' . $columnNames . ') VALUES (' . $columnValues . ')');

$i = 0;
foreach($paramsToBeBound as &$param) {
$i++;
if($i == 2 || $i - floor($i / 4) == 2) {
$stmt->bindParam($i, $param, PDO::PARAM_LOB);
} else {
$stmt->bindParam($i, $param);
}
}

$stmt->execute();
}
}


?>

以下是我在 PHP MyAdmin SQL 中用于创建 MySQL 表的代码:

创建表 testblob (
image_id tinyint(3) NOT NULL AUTO_INCRMENT,
image_type varchar(25) NOT NULL,
图像长 Blob 不为空,
image_size varchar(25) NOT NULL,
image_name varchar(50) NOT NULL,
image_type1 varchar(25) NOT NULL,
image1 长 Blob 不为空,
image_size1 varchar(25) NOT NULL,
image_name1 varchar(50) NOT NULL,
image_type2 varchar(25) NOT NULL,
image2 longblob NOT NULL,
image_size2 varchar(25) NOT NULL,
image_name2 varchar(50) NOT NULL,
image_type3 varchar(25) NOT NULL,
image3 longblob NOT NULL,
image_size3 varchar(25) NOT NULL,
image_name3 varchar(50) NOT NULL,
image_type4 varchar(25) NOT NULL,
image4 longblob NOT NULL,
image_size4 varchar(25) NOT NULL,
image_name4 varchar(50) NOT NULL,
image_ctgy varchar(25) NOT NULL,
关键图像_id (图像_id)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

感谢您的帮助。我感谢所提供的所有帮助。

附加信息:只有在至少第一个输入已给出图像的情况下,表单才应该提交图像。如果用户将第一个图像输入留空,但选择第二个图像输入,则表单将不会提交。第一个图像输入应该充当用户的显示图片,这就是为什么我希望首先需要它。用户不必上传所有 5 张图像才能提交表单。

最佳答案

对于上传的每张图片,您都会执行 INSERT 查询。 4 个图像等于 4 个插入查询。每个插入查询都会在 MySQL 数据库中生成新行。您应该在最后只执行一个 INSERT 查询,如果图像已上传,则向该查询添加更多值。重写代码需要一些时间。我想你也可以使用:

<input name="userfile[]" type="file" /><br />
<input name="userfile[]" type="file" /><br />

而不是userfileuserfile1

@编辑

最后,我重写了代码并且它可以工作。我在MySQL数据库上测试了它。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html>
<head><title>File Upload To Database</title></head>
<body>
<h2>Please Choose a File and click Submit</h2>
<form enctype="multipart/form-data" action="<?php echo htmlentities($_SERVER['PHP_SELF']);?>" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="99999999" />
<div><input name="userfile[]" type="file" /></div>
<div><input name="userfile[]" type="file" /></div>
<div><input name="userfile[]" type="file" /></div>
<div><input name="userfile[]" type="file" /></div>
<div><input name="userfile[]" type="file" /></div>
<div><input type="submit" value="Submit" /></div>
</form>

</body></html>

<?php
/*** check if a file was submitted ***/
if(!isset($_FILES['userfile']))
{
echo '<p>Please upload a display picture.</p>';
}
else
{
try {
upload();
/*** give praise and thanks to the php gods ***/
echo '<p>Thank you for submitting</p>';
}
catch(Exception $e)
{
echo '<h4>'.$e->getMessage().'</h4>';
}
}

/*
* Check the file is of an allowed type
* Check if the uploaded file is no bigger thant the maximum allowed size
* connect to the database
* Insert the data
*/

/**
*
* the upload function
*
* @access public
*
* @return void
*
*/
function upload(){

$maxsize = 99999999;
$columnNames = '';
$columnValues = '';
$paramsToBeBound = array();

echo '<pre>' . print_r($_FILES, TRUE) . '</pre>';

/*** check if a file was uploaded ***/
for($i = 0; ($i < count($_FILES['userfile']['tmp_name']) && $i < 5); $i++) {
if($_FILES['userfile']['tmp_name'][$i] != '') { // check if file has been set to upload
if($_FILES['userfile']['error'][$i] == 0 && is_uploaded_file($_FILES['userfile']['tmp_name'][$i]) && getimagesize($_FILES['userfile']['tmp_name'][$i]) != false) {
/*** get the image info. ***/
$size = getimagesize($_FILES['userfile']['tmp_name'][$i]);
/*** assign our variables ***/
$type = $size['mime'];
$imgfp = fopen($_FILES['userfile']['tmp_name'][$i], 'rb');
$size = $size[3];
$name = $_FILES['userfile']['name'][$i];


/*** check the file is less than the maximum file size ***/
if($_FILES['userfile']['size'][$i] < $maxsize)
{
if($i > 0) {
$columnNames .= ', image_type' . $i . ', image' . $i . ', image_size' . $i . ', image_name' .$i;
$columnValues .= ', ?, ?, ?, ?';
} else {
$columnNames .= 'image_type, image, image_size, image_name';
$columnValues .= '?, ?, ?, ?';
}

$paramsToBeBound[] = $type;
$paramsToBeBound[] = $imgfp;
$paramsToBeBound[] = $size;
$paramsToBeBound[] = $name;
} else
throw new Exception("File Size Error"); //throw an exception is image is not of type
}
else
{
// if the file is not less than the maximum allowed, print an error
throw new Exception("Unsupported Image Format of image!");
}
}
}
if(count($paramsToBeBound) > 0) {
$dbh = new PDO('mdsm;dbname=kesm', 'kabm', 'Kar'); // I tested with MySQL database and worked fine.

$dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$stmt = $dbh->prepare('INSERT INTO testblob (' . $columnNames . ') VALUES (' . $columnValues . ')');

$i = 0;
foreach($paramsToBeBound as &$param) {
$i++;
if($i == 2 || $i - floor($i / 4) == 2) {
$stmt->bindParam($i, $param, PDO::PARAM_LOB);
} else {
$stmt->bindParam($i, $param);
}
}

$stmt->execute();
}
}


?>

关于PHP 多图像输入表单未将图像输入 MySQL 表列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21764143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com