簡體   English   中英

使用PHP表單將圖像上傳到mysql

[英]Uploading images to mysql using php form

我有這種形式將圖片上傳到我的mysql數據庫:

<h4>Add Photo</h4>

<form enctype="multipart/form-data" method="post">
    <?php
    require_once 'config.php';
    $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);

    if (isset($_POST['upload'])){
        $caption   = $_POST['caption'];
        $albumID   = $_POST['album'];
        $file      = $_FILES ['file']['name'];
        $file_type = $_FILES ['file']['type'];
        $file_size = $_FILES ['file']['size'];
        $file_tmp  = $_FILES ['file']['tmp_name'];
        $random_name = rand();

        if (empty($file)){
            echo "Please enter a file <br>";
        } else {
            move_uploaded_file($file_tmp, 'uploads/'.$random_name.'.jpg');
            mysqli_query(
                $mysqli,
                "INSERT INTO photos (caption, image_url, date_taken, imageID) "
                . "VALUES('"
                . addslashes($caption) . "', '"
                . $random_name . ".jpeg', NOW(), ?)"
            );
            echo "Photo successfully uploaded!<br>";
        }
    }
    ?>

    Caption: <br>
    <input type="text" name="caption">
    <br><br>

    Select Album: <br>
    <select name="album">
    <?php
    $mysqli = new mysqli(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
    $result = $mysqli->query("SELECT * FROM albums");
    while ($row = $result->fetch_assoc()) {
        $albumID = $row['albumID'];
        $title   = $row['title'];
        echo "<option value='$albumID'>$title</option>";
    }
    ?>
    </select>
    <br><br>

    Select Photo: <br>
    <input type="file" name="file">
    <br><br>

    <input type="submit" name="upload" value="Upload">
</form>

我可以將圖片成功上傳到服務器上的“ uploads”文件夾中,但是不會對數據庫的“ photos”表添加任何內容。 我的照片文件夾的架構是:標題,image_url,date_taken,imageID

我的結構有問題嗎? mysqli代碼? 任何幫助將不勝感激! 先感謝您!

正如Fred -ii-所述,問題在於您使用的是“?” 作為imageID列的值,但您沒有使用准備好的語句。 您不是要檢查錯誤,但如果這樣做,則會得到類似以下內容的信息:

您的SQL語法有誤; 檢查與您的MySQL服務器版本相對應的手冊,以在第XX行的'?)'附近使用正確的語法

另外,您還使用Addslashes將用戶數據獲取到查詢中,這是不安全的(您應該使用mysqli_real_escape_string代替 )。

解決這兩個問題的好方法是使用准備好的語句。 您將改為執行以下操作:

    move_uploaded_file($file_tmp, 'uploads/'.$random_name.'.jpg');
    $ret = mysqli_prepare($mysqli, "INSERT INTO photos (caption, image_url, date_taken)
    VALUES(?, ?, NOW())");
    $filename = $random_name + ".jpeg";
    mysqli_stmt_bind_param($ret, "ss", $caption, $filename);
    mysqli_stmt_execute($ret);
    echo "Photo successfully uploaded!<br>";

更新 :由於id是自動生成的,因此我從查詢中完全刪除了該列。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM