Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyświetlanie obrazków z bazy SQL
Forum PHP.pl > Forum > Przedszkole
maciek_nh
Witam

Napisałem kod do wyświetlania obrazków z sql z pola typu BLOB. Obrazki się zapisują, ale gdy chce odczytać wszystkie zapisane obrazki to wyświetla mi się tylko obrazek z id = 1 i tyle razy ile mam wyników z zapytania. Nie wiem dlaczego nie wyświetla mi pozostałych oobrazków.

To co napisałem:

Plik index.php w folderze zapisz

Kod
<html>
<head><title>Store binary data into SQL Database</title></head>
<body>
    <form method="post" action="zapisz.php" enctype="multipart/form-data">
    File Description:<br>
    <input type="text" name="form_description"  size="40">
    <input type="hidden" name="MAX_FILE_SIZE" value="1000000">
    <br>File to upload/store in database:<br>
    <input type="file" name="form_data"  size="40">
    <p><input type="submit" name="submit" value="submit">
    </form>
</body>
</html>


Plik zapisz php w folderze zapisz

Kod
    <?php    
        echo "Zapisywanie do sql";
        $plik_tmp = $_FILES['form_data']['tmp_name'];
        //$plik_nazwa = $_FILES['form_description']['name'];
        //$plik_rozmiar = $_FILES['MAX_FILE_SIZE']['size'];
    

If($plik_tmp != "none") {
$PSize = filesize($plik_tmp);
$mysqlPicture = addslashes(fread(fopen($plik_tmp, "r"), $PSize));
$db = mysql_connect( 'localhost', 'root', 'lilly' );
mysql_select_db( 'image' );
$var = 1;
mysql_query("INSERT INTO obrazki (Image) VALUES ( '$mysqlPicture')") or die("Can't Perform Query");
}
else {
echo"You did not upload any picture";
}
?>


Plik index.php w folderze odczyt
Kod
<HTML>
<BODY>
<?php
$db = mysql_connect( 'localhost', 'root', 'lilly' );
mysql_select_db( 'image' );

$result=mysql_query("SELECT * FROM obrazki where PicNum > '0'") or die("Can't Perform Query");
echo mysql_num_rows($result);

while($row=mysql_fetch_assoc($result))
{
    $num = $row['PicNum'];
    echo $num;
    echo "<IMG SRC=\"SecondType.php?num='$num'\">";
    flush();
}
?>
</BODY>
</HTML>


plik SecondType.php w folderze odczyt
Kod
<?php
$db = mysql_connect( 'localhost', 'root', 'lilly' );
mysql_select_db( 'image' ) or die("Unable to select database");
$num = $_GET['num'];
$result=mysql_query("SELECT * FROM obrazki WHERE PicNum = '$num'") or die("Can't perform Query");
$row=mysql_fetch_assoc($result);
Header( "Content-type: image/jpeg");
echo $row['Image'];
?>
Riklaunim
Dalego temu do jakiejś poprawności, tym bardziej linkowi do localhosta winksmiley.jpg

WHERE PicNum = '$num'" -- umieszczając wartość w ' oznaczasz ją jako string, a pola auto_increment stosują liczby. Także przyczepiłbym się addslashes na binarnych danych. Poza tym serwowanie grafik z bazy nie jest wydajne.
maciek_nh
Zmieniłem $num na bez cudzysłowów i chyba to pomogło. Dzięki :]

Jeśli chodzi o addslashes to czym to zastąpić ?
Poza tym co jeszcze jest do zmiany, bo mówisz że daleko temu do poprawności ?
Riklaunim
PDO ma coś takiego jak "bind value", co zajmuje się wstawianiem danych do SQLki i powinno samo poprawnie obsłużyć takiego dane (a stare API mysql ma też mysql_real_escape_string).

I też zamiast
Kod
echo "<IMG SRC=\"SecondType.php?num='$num'\">";

można np. ładniej:
Kod
echo '<img src="SecondType.php?num='.$num.'" alt="" />';

To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.