【问题标题】:Image name not inserted to Mysql Database after image resize and upload图片调整大小和上传后,图片名称未插入 Mysql 数据库
【发布时间】:2016-03-03 17:22:40
【问题描述】:

我编写了一些代码来收集图像、重新调整大小、上传到两个不同的文件夹并将新名称存储在 mysql 数据库中。代码的所有其他方面都在工作。我遇到的唯一问题是,图像的新名称没有存储在数据库中。我得到的只是一个数字。例如,不是将上传的文件名作为 1234_12345.jpg 存储在数据库中,而是存储的文件名只是说 1 或 3 等。

下面是我的表格:

<form method="POST" id="adimageadd" action="<?php echo $editFormAction; ?>" name="adimageadd" enctype="multipart/form-data">
                    <div class="h1">Select Album:</div>
                    <select class="input-field-login2" id="albumselect" name="albumselect" required type="text" tabindex="1">
                        <option value="">Please Select</option>
                        <?php foreach ($result_album as $rs) { ?>
                            <option value="<?php echo $rs["alID"]; ?>"><?php echo $rs["alTitle"]; ?></option>
                        <?php } ?>
                    </select>
                    <input type="hidden" name="MAX_FILE_SIZE" value="" />
                    <input name="photo[]" type="file" required id="photo" size="26" multiple='multiple'/>
                    <button name="login" type="submit" id="login_submit" tabindex="3">Add Images</button>
                    <input type="hidden" name="form_insert" value="adimageadd">
                </form> 

而php代码是:

function getExtension($str) {

         $i = strrpos($str,".");
         if (!$i) { return ""; } 

         $l = strlen($str) - $i;
         $ext = substr($str,$i+1,$l);
         return $ext;
 }

 define ("MAX_SIZE","2048");
    $errors=0;

    $query_album = "SELECT alID, alTitle, alImage, alDesc FROM galbum ORDER BY alID DESC";
    $result_album = mysqli_query($connKcla, $query_album);
    $row_album = mysqli_fetch_assoc($result_album);
    $totalRows_album = mysqli_num_rows($result_album); 

$editFormAction = $_SERVER['PHP_SELF'];
if (isset($_SERVER['QUERY_STRING'])) {
  $editFormAction .= "?" . htmlentities($_SERVER['QUERY_STRING']);
}

    if ((isset($_POST["form_insert"])) && ($_POST["form_insert"] == "adimageadd")) {

    //get form details and check for sql injections and disable them
    $albumRef = mysqli_real_escape_string($connKcla, $_POST['albumselect']);
    $image = $_FILES["photo"]["name"];
    $uploadedfile = $_FILES['photo']['tmp_name']; 

    $img = count($image);
    for ($i = 0; $i < $img; $i++) { 

    if ($image){

    $filename = mysqli_real_escape_string($connKcla, $image[$i]);
    $extension = getExtension($filename);
    $extension = strtolower($extension);

    if (($extension != "jpg") && ($extension != "jpeg") && ($extension != "png") && ($extension != "gif")) 
    {
        echo ' Unknown Image extension ';
        $errors=1;
    }
    else
    {
        $size=filesize($_FILES['photo']['tmp_name'][$i]);

    if ($size > MAX_SIZE*1024)
    {
        echo "Your image has exceeded the size limit of 2Mb. Click the back button on your browser to re-enter the right size of image";
        $errors=1;
    }

    if($extension=="jpg" || $extension=="jpeg" )
    {
    $uploadedfile = $_FILES['photo']['tmp_name'][$i];
    $src = imagecreatefromjpeg($uploadedfile);
    }
    else if($extension=="png")
    {
    $uploadedfile = $_FILES['photo']['tmp_name'][$i];
    $src = imagecreatefrompng($uploadedfile);
    }
    else 
    {
    $src = imagecreatefromgif($uploadedfile);
    }

    list($width,$height)=getimagesize($uploadedfile);

    $newwidth=760;
    $newheight=($height/$width)*$newwidth;
    $tmp=imagecreatetruecolor($newwidth,$newheight);

    imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);

    $thumbnewwidth=250;
    $thumbnewheight=($height/$width)*$thumbnewwidth;
    $thumbtmp=imagecreatetruecolor($thumbnewwidth,$thumbnewheight);

    imagecopyresampled($thumbtmp,$src,0,0,0,0,$thumbnewwidth,$thumbnewheight,$width,$height);

    $set['photo'] = $image[$i];
    $kaboom = explode(".", $image[$i]);
    $pixExt = end($kaboom);
    $photo = rand()."_".time().".".$pixExt;

    $target = "../gallery/images/". $photo;
    $thumbtarget = "../gallery/images/thumbs/". $photo;

    imagejpeg($tmp,$target,100);
    imagejpeg($thumbtmp,$thumbtarget,75);

    imagedestroy($src);
    imagedestroy($tmp);
    imagedestroy($thumbtmp);
    }
    }


        $stmt = $connKcla->prepare("INSERT INTO gimage (imImage, albumRef) VALUES ($photo[$i], $albumRef)");
        $results = $stmt->execute();
        $stmt->close();


        if($results){
        $updateGoTo = "confirm.php"; 
        if (isset($_SERVER['QUERY_STRING'])) {
        $updateGoTo .= (strpos($updateGoTo, '?')) ? "&" : "?";
        $updateGoTo .= $_SERVER['QUERY_STRING'];
        }
        header("Location: ". $updateGoTo);
        }else{
        header("Location: error.php");
        }
    }
    }

任何帮助将不胜感激。

【问题讨论】:

    标签: php database mysqli


    【解决方案1】:

    这会创建一个字符串:

    $photo = rand()."_".time().".".$pixExt;
    

    这会从该字符串中获取一个字符:

    $photo[$i]
    

    您存储在数据库中的内容:

    $stmt = $connKcla->prepare("INSERT INTO gimage (imImage, albumRef) VALUES ($photo[$i], $albumRef)");
    

    如果要存储整个字符串,只需使用字符串本身而不是特定字符的索引:

    $stmt = $connKcla->prepare("INSERT INTO gimage (imImage, albumRef) VALUES ($photo, $albumRef)");
                                                                                //^-- here
    

    此外,您可能应该开始研究使用查询参数和准备好的语句。虽然如果没有来自用户的输入,则此代码可能巧合当前不会对 SQL 注入开放,但仍然难以保证这一点。不接受 SQL 注入一般来说是一个好习惯。

    【讨论】:

    • 感谢您的回复。我最初是这样做的,但我一直收到错误消息:“致命错误:在......中的非对象上调用成员函数 execute()”
    • @AgbogidiMichael:这意味着您的 SQL 查询失败了。粗略搜索该确切的错误消息会发现许多关于它的问题和答案。
    • 感谢。但它是一个简单的插入数据库语句。 $albumRef 字段被插入到数据库中。问题只是 $photo 字段。
    • @AgbogidiMichael:这正是这个答案所纠正的。在您之前的评论中,您提到了一个单独的问题,您需要确定查询失败的实际原因。准备好查询后检查错误。
    • 感谢@David 提供的宝贵帮助。我已经能够解决这个问题。现在一切正常。
    【解决方案2】:

    问题解决了。我刚刚更改了查询的值部分:

    $stmt = $connKcla->prepare("INSERT INTO gimage (imImage, albumRef) VALUES ($photo[$i], $albumRef)");
    

    $stmt = $connKcla->prepare("INSERT INTO gimage (imImage, albumRef) VALUES ('$photo', '$albumRef')");
    

    【讨论】:

      猜你喜欢
      • 2011-08-25
      • 2011-05-28
      • 1970-01-01
      • 1970-01-01
      • 2012-12-05
      • 1970-01-01
      • 1970-01-01
      • 2014-08-26
      相关资源
      最近更新 更多