3

我有一个MySQL数据库,有 2 个表格、相册和照片:

相册有 id 和名称,照片有 id、album_id、photo_name。

我有以下脚本:

<?php

$albumsQuery = $mysqli->query( "SELECT `album_id`, `album_name` FROM `albums` ORDER BY `album_name` ASC" );

if( isset( $_FILES["albumPhoto"] )  )
{
    move_uploaded_file( $_FILES["albumPhoto"]["tmp_name"], "photos/" .$_FILES["albumPhoto"]["name"] );
}

if( isset( $_POST["album_name"] ) )
{
    $uploadQuery = $mysqli->query( "INSERT INTO `photos` ( `photo_id`, `photos`.`photo_id_album`, `photos`.`photo_name` )
    VALUES ( NULL,'" . $mysqli->real_escape_string( $_POST["album_name"] ) . "','" . $mysqli->real_escape_string( $_FILES["albumPhoto"]["name"] ) . "' )" )
    or die( $mysqli->error );

    $upload = $uploadQuery->fetch_array( MYSQLI_ASSOC );
}
?>

图像已上传到磁盘上,但我无法在数据库中获取图像名称。

4

1 回答 1

0

当你回答你自己的问题时,我写了一些代码,所以无论如何我都会发布它:

$albumsQuery = $mysqli->query('SELECT album_id, album_name FROM albums ORDER BY album_name');

// assume image not uploaded
$imagePath = null;

// if a photo is being uploaded
if (isset($_FILES["albumPhoto"])) {
    $source = $_FILES["albumPhoto"]["tmp_name"];
    $target = sprintf('photos/', $_FILES["albumPhoto"]["name"]);

    // try to move the file
    $move = move_uploaded_file($source, $target);
    if ($move !== true) {
        throw new Exception('Could not move the uploaded file: ' . $_FILES["albumPhoto"]["name"]);
    }
}

// attach the image to the specified album
if (isset($_POST["album_name"])) {
    $stmt = 'INSERT INTO photos (photo_id_album, photo_name)
             VALUES (?, ?)';
    $stmt->bind_param('ss', $albumName, $photoName);

    // values of bound variables
    $albumName = $_POST["album_name"];
    $photoName = $_FILES["albumPhoto"]["name"];

    // insert the record
    $stmt->execute();
    $stmt->close();
}

此外,使用原始文件名也不是一个好主意,因为用户可能希望随着时间的推移将多个同名文件上传到同一个相册中。考虑使用散列或在文件名前添加专辑 ID。

并添加更多错误检查!

于 2012-12-19T17:31:05.493 回答