【问题标题】:Having error in saving image link to the database using pdo [duplicate]使用 pdo 将图像链接保存到数据库时出错 [重复]
【发布时间】:2014-06-21 22:04:50
【问题描述】:

我想做的是做一个图片上传系统,将图片发送到upload文件夹,并保存到数据库的链接。

我的问题是我在images.php 中遇到了错误,谁能帮我解决这个问题。

html:

<form method="post" enctype="multipart/form-data">  
<img id="picture" data-src="#" /> <br />
<input type='file' name="image" id="imgInp" accept="image/*" /><br />
<input type="submit" name="submit" id="submit" value="submit" />
</form>

脚本:

<script type="text/javascript">
$(document).ready(function() {

   $('#submit').click(function (e) {
       e.preventDefault();

        var data = {};

        data.image = $('#imgInp').val();


        $.ajax({
            type: "POST",
            url: "images.php",
            data: data,
            cache: false,
            success: function (response) {


            }
        });
            return false;
    });

});
</script>

images.php

<?php
$host = "localhost";
$user = "root";
$pass = "";
$db = "test";

$dbc = new PDO("mysql:host=" . $host . ";dbname=" . $db, $user, $pass);
$dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

$image = addslashes(file_get_contents(@$_FILES['image']['tmp_name']));
$image_name = addslashes(@$_FILES['image']['name']);
$image_size = getimagesize(@$_FILES['image']['tmp_name']);

move_uploaded_file(@$_FILES["image"]["tmp_name"], "upload/" . @$_FILES["image"]["name"]);
$location = "upload/" . @$_FILES["image"]["name"];

$q = "INSERT INTO students( image ) VALUES( :image)";

$query = $dbc->prepare($q);
$query->bindParam(':image', $location);


$results = $query->execute();

?>

图片上传脚本:

<script type="text/javascript">
$(document).ready(function() {
    var currentSrc = $('#picture').attr('src');
    if(currentSrc==null || currentSrc==""){        
    $('#picture').attr('src','http://i38.photobucket.com/albums/e149/eloginko/profile_male_large_zpseedb2954.jpg');

   $("#picture").on('click', function() {
       $("#imgInp").trigger('click')}
   )}


    function readURL(input) {
        if (input.files && input.files[0]) {
            var reader = new FileReader();

            reader.onload = function (e) {
                $('#picture').attr('src', e.target.result);
            }

            reader.readAsDataURL(input.files[0]);
        }
    }

    $("#imgInp").change(function(){
        readURL(this);
    });

});
</script>

【问题讨论】:

标签: php html ajax file-upload pdo


【解决方案1】:

摆脱错误消息的最简单方法是实际放置一个条件来检查$_FILES 中是否有任何内容。但除此之外,$FILES 为空的根本原因尚不清楚。以我的经验,使用另一端的 PHP 接收器上传 Ajax 文件充其量不能始终如一地工作。无论如何,这是我的带有条件的代码版本:

if (!empty($_FILES)) {

    $image = addslashes(file_get_contents(@$_FILES['image']['tmp_name']));
    $image_name = addslashes(@$_FILES['image']['name']);
    $image_size = getimagesize(@$_FILES['image']['tmp_name']);

    move_uploaded_file(@$_FILES["image"]["tmp_name"], "upload/" . @$_FILES["image"]["name"]);
    $location = "upload/" . @$_FILES["image"]["name"];

    $q = "INSERT INTO students( image ) VALUES( :image)";

    $query = $dbc->prepare($q);
    $query->bindParam(':image', $location);


    $results = $query->execute();

}

【讨论】:

    【解决方案2】:

    试试这个方法,它可能看起来太多 if 语句,但你需要检查你是否想要可靠的代码:

    if(is_uploaded_file($_FILES['image']['tmp_name'])){ 
        $folder = "upload/"; 
        $file = basename( $_FILES['image']['name']); 
        $full_path = $folder.$file; 
        if(move_uploaded_file($_FILES['image']['tmp_name'], $full_path)) { 
            echo "succesful upload, we have an image!";
            //PDO
            $dbc = new PDO("mysql:host=" . $host . ";dbname=" . $db, $user, $pass);
            $dbc->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
            $query = "INSERT INTO students( image ) VALUES( :image)";
            $stmt = $dbc->prepare($query);
            $stmt->bindParam(':image', $full_path);
            $results = $stmt->execute();
            if($results){
                echo "Insert successful!";
            }else{
                 echo "Insert failed!";
            }
        } else { 
           echo "upload received! but process failed";
        } 
    }else{ 
        echo "upload failure ! Nothing was uploaded";
    } 
    

    我想指出几点:

    • @suppress 错误,您在进行故障排除时不希望出现这种情况,即使在 生产,您仍然需要注意错误。
    • 您应该启用错误报告
    • 你没有检查php脚本是否接收到图片上传。
    • 在这种情况下,file_get_contents 的使用不清楚
    • 您不使用$image* 变量吗? ....

    【讨论】:

    • 您的代码出错,上面写着:注意:未定义索引:C:\xampp\htdocs\myLibrary\pdo_login 中的图像 - 复制 - 第 7 行的 Copy\images.php 上传失败!没有上传任何内容
    • @user3763580 表示 PHP 文件没有获取文件,问题出在 HTML/AJAX 代码中
    猜你喜欢
    • 2021-07-12
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多