veritabanına resim yüklemek için doğru yolu

1 Cevap php

sana biraz bu doğru bir yol olmadığını söylüyorlar ama bir uygulamayı bitirmek için sıkı bir süre im için gidiyoruz biliyorum ve şimdi olarak geri dönün ve bir dizinde görüntüleri depolamak için kodu değiştirebilirsiniz olamaz.

şimdi temizlendi şu

i vardı soru ben bu yazarak veritabanına bir görüntü sokulur.

(Veri geçerli ise sınıf güvenlik çağrıyı sakıncası, bütün bu iş bir kaç kontrol eder)

$filename = $security->secure($_FILES['imgschool']['name']);
$tmpname = $security->secure($_FILES['imgschool']['tmp_name']);
$imgsize = $security->secure($_FILES['imgschool']['size']);
$imgtype = $security->secure($_FILES['imgschool']['type']);
$school = $security->secure($_POST['school']);


//begin upload
if($imgsize > 0) {
$handle = fopen($tmpname, "r");
$content = fread($handle, filesize($tmpname));
$content = addslashes($content);

//code to add all this to database
}

değişken $ içerik görüntü ve tüm almak addslashes olduğunu. ben bir kez base64 denilen şey ile bunu yapmak için söz birini hatırlıyorum ama ben zar zor yazılmış nasıl çağırabilirsiniz.

Bu i veritabanından görüntüyü arıyorum nasıl

aside from all the queries and whatnot this is the main part that is calling the image

header("Content-length: ".$imgsize);
header("Content-type: ".$imgtype);
header("Content-Disposition: attachment; filename=".$imgname);
print $row['img'];

i yaşıyorum sorun olduğunu yerine görüntü gösteren. url sadece gösteriyor, yani bu durumda ben sadece bu bakın

http://localhost/admin/school-catalog.php?page=gallery&id=4

url ayarlanan doğru params ile resmi görebilmek için sayfayı açarken.


for those that wanted to see the query that is being done to save the image and so forth i copied the whole section

//save image to db
if(isset($_POST['btnupload'])) {

$filename = $security->secure($_FILES['imgschool']['name']);
$tmpname = $security->secure($_FILES['imgschool']['tmp_name']);
$imgsize = $security->secure($_FILES['imgschool']['size']);
$imgtype = $security->secure($_FILES['imgschool']['type']);
$school = $security->secure($_POST['school']);


//begin upload
if($imgsize > 0) {
$handle = fopen($tmpname, "r");
$content = fread($handle, filesize($tmpname));
$content = base64_encode($content);
}

$save = mysql_query("insert into tbl_schoolgallery(id,hash,img,imgtype,imgsize) values(null,'$school','$content','$imgtype','$imgsize')") or die(mysql_error());
header("Location: school-catalog.php?page=school_gallery");

}


//call image from db
$query = mysql_query("select * from $tbl where id = '$id'") or die(mysql_error());
while($row = mysql_fetch_assoc($query)) {

$imgtypeget = explode("/", $row['imgtype']);

$imgname = "img.".$imgtypeget[1];
$imgtype = $row['imgtype'];
$imgsize = $row['imgsize'];

header("Content-length: ".$imgsize);
header("Content-type: ".$imgtype);
print base64_decode($row['img']);

print $row['img'];
}

1 Cevap

Kullanımı addslashes son derece yanlıştır. Sütun, bir metin alanı veya bir BLOB alan olup olmadığına bağlı olarak, Base64 veya mysql_real_escape_string kullanmalısınız.

Base64 kullanarak bu zor değildir; siz de bu şekilde kullanabilirsiniz. Sadece base64_encode ile addslashes olarak değiştirin ve base64_decode ile görüntüyü yankı.

Bu konuda, her şeyi yazmak için biraz daha kolay bir yolu var:

// begin upload
if ($imgsize > 0)
{
  $content = file_get_content($tmpname);
  $content = base64_encode($content);
}

Ve sonra çıktı gerçekten sadece yapmanız gereken

header("Content-type: ".$imgtype);
echo base64_decode($img);

Sütun bir BLOB ise, ancak, doğrudan kullanabilirsiniz mysql_real_escape_string:

// begin upload
if ($imgsize > 0)
{
  $content = file_get_content($tmpname);
  $content = mysql_real_escape_string($content);
}

Ve sonra:

header("Content-type: ".$imgtype);
echo $img;

Geçerli belirtiler bakılırsa rağmen, ben de görüntü saklanır ve veritabanından geri çağrıldı ediliyor nasıl yapılacağına ilişkin bir hata var tahmin ediyorum, ve sorguları eklemek yapmak ve nerede kod kısmını görmem gerekiyor Bunu bir bölümünü düzeltmek yardımcı olabilir önce veritabanından okuma.


Geçerli kod çoğunlukla gayet iyi görünüyor. Bazı konular:

print base64_decode($row['img']);

print $row['img'];

Muhtemelen ikinci sıranın kurtulmak anlamına geliyordu. Ayrıca, echo yerine print kullanmak; herkes kullanır, bu slighty hızlı bazen olabilir, ve print gerçekten bir değer döndüren dışında herhangi bir yararı yoktur:

echo base64_decode($row['img']);

$security->secure() sanitization fonksiyonu çeşit gibi görünüyor. Bu kullanmak zannediyorsunuz biri - Just mysql_real_escape_string() kullanın. Dışında $imgsize; Eğer bir tamsayı olması gerekiyordu biliyorum çünkü o biri intval() kullanmak isteyebilirsiniz.

Ayrıca burada:

$query = mysql_query("select * from $tbl where id = '$id'") or die(mysql_error());

Bunu tablo yukarıda tbl_schoolgallery birkaç satır isim. I $tbl == 'tbl_schoolgallery' varsayalım, ama tutarlılık için, size $tbl iki yerde veya tbl_schoolgallery hem yerlerde kullanmak gerekir ya.

Ayrıca, bir if ile while Yenisini - Hiç zaten, bir kez daha döngüler eğer kod sorun neden olur.