php veritabanı resim gösterisi sorun

9 Cevap php

burada kodu

<?php
 session_start();

 if(!isset($_SESSION['user_name']))
 {
  header('Location: login.php');
 }

 $conn = mysql_connect("localhost", "root", "") or die("Can no connect to Database Server");
?>

<html>
<head>

</head>
<body>
<center>
<div id="ser">
<form action="" method="post">


<label for="file">Card No:</label>
<input type="text" name="card_no" id="card_no" class="fil" onKeyUp="CardNoLength()" onKeyDown="CardNoLength()" onKeyPress="CardNoLength()"/>
<input type="submit" name="search" value="Search" class="btn" onClick="return CardNoLengthMIN()"/>
</form>
</div>
</center>
<br/><hr style="border: 1px solid #606060 ;" />
<center><a href="index.php">Home</a></center>
<br/>

<center>
<?php

 if(isset($_POST['card_no']))
 {
  if($conn)
  {
   if(mysql_select_db("img_mgmt", $conn))
   {
    $sql = "select * from temp_images where card_no='".trim($_POST['card_no'])."'";
    $result = mysql_query($sql);
    $image = mysql_fetch_array($result);

    if(isset($image['card_no']))
    {

      //echo "<img src=\"".$image['file_path']."\" alt=\"".$image['card_no']."\" width=\"250\" height=\"280\"/>";
      header("Content-type: image/jpeg");
      echo $image['img_content'];

    }
    else
    {
      echo "<p style=\"color:red;\">Sorry, Your search came with no results ! <br/> Try with different card number";
    }
   }
   else
   {
    echo "Database selection error: ".mysql_error();
   }
  }
  else
  {
   echo "Could not connect: ".mysql_error();
  }
 }
?>
</center>

</body>
</html>

Ama bu senaryoyu yürüttükten sonra gösterir:

Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\img\search.php:61) in C:\xampp\htdocs\img\search.php on line 77

9 Cevap

Eğer veritabanında görüntünün içeriğini kaydetmek varsa kullanabileceğiniz bir data: uri <img /> etiketi bu içeriği gösteriyor. Bu gördüğünüz data URI scheme, başka bir içeriği farklı mime tip içeriği gömmek için izin verir.

Ama gerçekten veritabanında (ne olursa olsun görüntü veya değil) herhangi bir dosya kaydetmek gerekir. Adı zaten önerdiği gibi dosyalar, dosya sistemine aittir. Siz veritabanı dosyaları tasarrufu büyük bir yük olsun. Özel görüntüler için görüntüyü yükler (belki) bir php komut dosyası, örneğin gerekir. Eğer gibi bir şey kullanın <img src="showimage.php?id=5" alt="..." />. Her resim için ek bir php komut dosyası aramak gerekir, ve hiçbir şey kazanmak. Everyone dosya sistemindeki dosyaları kaydetmek ve normal olarak dosya sistemi üzerinden yüklemek için, onun daha iyi anlatacağım. Peki yerine <img src="images/foobar/xyz.png" alt="..." /> gibi etiketleri kullanabilirsiniz. Sadece yolun içindeki kimliği kullanmak ve bir image link geçerli olup olmadığını file_exists() kontrol etmek için kullanmak bile "I don't want any 'broken links' to images in my database" argüman sayılmaz.

$path = 'images/useravatars/'.$row['ID'].'.png'; // as an example
if (file_exist($path)) {
     echo '<img src="'.$path.'" alt="username" />';
} else {
     echo '<img src="images/noimage.png" alt="No Image found" />';
}

Eğer dosya bir görüntü olduğunu belirten başlık göndermek için çalışıyoruz, ancak (bu durumda, PHP etiketlerinin dışında HTML kusurlu çıktılarının Eğer çıkış şey sonra başlık göndermek olamaz çünkü bu hatayı alıyorsanız nedeni .)

Ancak, bu ana sorun değildir. Eğer yaşıyorsanız asıl sorun böyle bir HTML dosyası içine bir görüntü sadece çıkış (Gerçekten, görüntü etiketleri içine onları kodlamak, ama tavsiye değil) göstermek için değil, olabilir. Şu anda yapmaya çalışıyorsun Ne, sayfa aslında bir görüntü tarayıcı söylemek ve sonra görüntü içeriğini göndermeye çalışın, bazı HTML göndermek olmasıdır. Bu sadece çalışmıyor. Sadece normal HTML dosyaları ile gibi yapmak zorunda. Görüntüler o <img> etiketi bağlantılar için ayrı dosyalar olması gerekir.

Diğer bir deyişle, size veritabanından tek bir resmi getirir ve ve diplays <img> etiketleri için bağlantı sayfası çıktılar script ve başka bir komut dosyası, gerekir. Yani, yerine o sayfadaki çıkışına görüntüyü çalışmakla, çıktı veritabanından uygun kimliği ile resmi çıktılar komut linkler show_image.php?id=123 gibi url ile bir etiketi olmalıdır.

mix-match olamaz html ve görüntü verilerini, iki komut dosyaları oluşturmak gerekiyor. bir <img /> etiketi ve gerçek görüntü yaratacak biriyle html üretir biri.

script çıktılarının, bu geçici bir çözüm için ob_start kullanabilirsiniz bir şey vardır sonra başlıklarını ayarlanamaz çünkü alıyorsanız hata

Henüz HTML bilmiyor musun? Bu nasıl kod çalışmak gerekiyordu?

Hatta veritabanından nasıl göstereceğimi bilmiyorum neden, sisteminde görüntüleri depolamak için değil mi?

Sayfanın üstünde () ob_start kullanın. Bu tampon temizler

örn.

< ? Php

ob_start ();

session_start ();

Sen başlık erorr alıyorsanız, sizin dosyasının üstüne aşağıdaki koyarak deneyin:

ob_start();

Hala aynı sorun varsa, javascript kullanarak yeni bir sayfaya yönlendirebilirsiniz ama en iyi yöntem değildir:

 if(!isset($_SESSION['user_name']))
 {
  ?>
      <script>
        document.location.href = 'login.php';
      </script>
  <?php
 }
  1. Script C:\xampp\htdocs\img\search.php hat 61 üzerinde çıktısı oluşturuyor. HTTP başlıklarını ilk gitmek gerekir, onlar bir belgenin ortasında gönderilemez.

  2. Bir HTTP başlığının ayarlanması geçerli komut dosyasını durmuyor. Açıkça) (exit çağırmanız gerekir.

Bütün ob_start cevaplar yanlış. Sizin kod böyle hiç çalışmaz. Bir HTML sayfası görüntüleri bağlantılar koyabilirsiniz, ama doğrudan içine görüntüyü data koyamazsınız. Bir HTML sayfası yapmak zorunda, ve görüntüyü gösterir ve bir <image src="imagescript.php"> etiketi ile ilk sayfadan arayacak başka bir komut dosyası.

Başka bir komut dosyası kodunuzu taşıyın ve sonra gibi bir şey kullanabilirsiniz:

<img src="myimg_genarator_script.php" />

Ve bu sizin için faydalı olacak ve (codeigniter) deneyin çok yükü neden olmaz çerçeveler bol küçük bir proje bile olsa, bir çerçeve kullanarak düşünüyorum lütfen