Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Menggunakan PHP untuk mengunggah gambar ke folder sambil menyimpan deskripsi ke database

1) Mengunggah file

Saat menggunakan sintaks array untuk input file, indeks file adalah kunci terakhir. $_FILES["file"]["name"] , misalnya, adalah array nama file. Untuk mendapatkan informasi file ke-i, Anda perlu mengakses $_FILES["file"]["name"][$i] , $_FILES["file"]["size"][$i] &c.

2) Menyimpan Gambar ke Folder

Beberapa data di $_FILES (seperti nama) berasal dari klien, dan karenanya tidak dapat dipercaya (yaitu, verifikasi terlebih dahulu). Dalam kasus nama file , Anda dapat memulai dengan menggunakan realpath untuk memverifikasi pathname file target aman, atau gunakan basename atau pathinfo untuk mengekstrak komponen terakhir dari nama yang diberikan sebelum merakit nama jalur target.

3) Menyimpan info gambar ke DB

Skema database (tidak lengkap) yang Anda berikan terlihat seperti Anda memberikan setiap gambar dua kolom dalam tabel yang sama. Di bawah model relasional, hubungan ke banyak dimodelkan dengan tabel terpisah:

CREATE TABLE images (
    id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
    `path` VARCHAR(256) NOT NULL,
    `description` TEXT,
    `member` INT UNSIGNED NOT NULL,
    FOREIGN KEY `member` REFERENCES members (`id`) ON DELETE CASCADE ON UPDATE CASCADE -- the image's owner
) Engine=InnoDB;

-- Note: this is a many-to-many relationship
CREATE TABLE ad_images (
    `ad` INT UNSIGNED NOT NULL,
    `image` INT UNSIGNED NOT NULL,
    FOREIGN KEY `ad` REFERENCES ads (`ad_id`) ON DELETE CASCADE ON UPDATE CASCADE,
    FOREIGN KEY `image` REFERENCES images (id) ON DELETE CASCADE ON UPDATE CASCADE,
    UNIQUE KEY (`ad`, `image`)
) Engine=InnoDB;

Jika tidak, Anda melanggar zero-one-infinity aturan dan membuang-buang ruang saat jumlah gambar kurang dari jumlah maksimum.

Lainnya

Perhatikan bahwa Anda dapat menggunakan sintaks larik untuk bidang deskripsi file agar penanganannya lebih mudah. Beri nama mereka "filedesc[]".

Daripada urutan perbandingan yang panjang, gunakan pencarian array atau pencocokan pola.

function isImage($type) {
    static $imageTypes = array(
            'image/gif'=>1, 'image/jpeg'=>1, 'image/pjpeg'=>1, 'image/png'=>1,
        );
    return isset($imageTypes[$type]);
    /* OR */
    return preg_match('%^image/(?:p?jpeg|gif|png)%', $type);
    /* OR allow all images */
    return preg_match('%^image/%', $type);
}

if (isImage($_FILES["file"]["type"][$idx]) && ($_FILES["file"]["size"][$idx] < 1048600)) {

Jenis file adalah salah satu nilai yang disediakan klien. Lebih aman menggunakan fileinfo untuk mendapatkan jenis gambar.

$finfo = finfo_open(FILEINFO_MIME_TYPE);

if (isImage(finfo_file($finfo, $path)) && ($_FILES["file"]["size"][$idx] < 1048600)) {

Itu pun bisa dibodohi jika file tersebut memiliki header gambar yang valid tetapi sisanya tidak valid. Anda dapat menggunakan pustaka gambar (seperti GD atau ImageMagick) untuk memvalidasi file dengan memeriksa apakah Anda berhasil membuka file sebagai gambar.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MySQL Butuh bantuan mendefinisikan SQL untuk menghapus baris yang tidak diinginkan

  2. kesalahan saat menginstal mysqlclient menggunakan pip ke MacOS Bigsur

  3. Bagaimana cara menambahkan kondisi dalam model anak sub-sub dalam sekuel yang akan memengaruhi Model induk saya di findAndCountAll?

  4. 5 pertanyaan berguna MySql selama pengembangan proyek

  5. Pemesanan Dinamis liga sepak bola yang rumit di MySQL?