doudong2149 2014-02-18 21:23
浏览 67
已采纳

PHP表单未将图像提交到MySQL表

I have a PHP form that has five inputs for the user to upload five images. The user must at least select one image, and it must be in the first input, in order for the form to submit. The form will properly submit all information into the MySQL Table, except for the images themselves. For example, I submitted an image, and the image column shows [BLOB - 14 B], when I believe it should be at least 300 KB. My theory is that the images are being compressed into some other format when they are submitted into the MySQL table.

Here is my full PHP page:

<!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=dsa.com;dbname=s_gbm", 'kss', 'Kisr'); 

        $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();
    }
}


?>

Here is the code I used in PHP MyAdmin SQL to create the MySQL Table:

CREATE TABLE testblob ( image_id tinyint(3) NOT NULL AUTO_INCREMENT, image_type varchar(25) NOT NULL, image longblob NOT NULL, image_size varchar(25) NOT NULL, image_name varchar(50) NOT NULL, image_type1 varchar(25) NOT NULL, image1 longblob NOT NULL, 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, KEY image_id (image_id) ) ENGINE=MyISAM DEFAULT CHARSET=latin1;

Thank you for any help. I appreciate all help given.

  • 写回答

2条回答 默认 最新

  • douran9707 2014-02-18 21:38
    关注

    First, I suggest not storing images in MySQL unless you absolutely have to.

    Do you absolutely have to? Yes? That's unfortunate. This should help though…

    $imgfp = fopen($_FILES['userfile']['tmp_name'][$i], 'rb');
    $imageData = fread($imgfp, filesize($_FILES['userfile']['tmp_name'][$i]));
    $imageData = addslashes($imageData);
    fclose($imgfp);
    …
    …
    $paramsToBeBound[] = $imageData;
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP