Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]dodawanie obrazu
Forum PHP.pl > Forum > Przedszkole
melex
Witam

Chce dodać obraz do bazy danych.
Stworzyłem funkcje dodajobraz

  1. <?php
  2. function dodajobraz()
  3. {
  4.  
  5. echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">
  6.  
  7. <table>
  8.  
  9. <tr>
  10. <td>Podaj link do obrazka</td>
  11.  <td><INPUT type="file" name="obraz">
  12. </tr>
  13. <tr>
  14.  <td><input type="submit" name="dodaj" value="DODAJ OBRAZ"></td>
  15. </tr>  
  16.  
  17. </table>';
  18. ?>


oraz plik obrazek.php

  1. <?php
  2. if($_POST['dodaj'])
  3. {
  4. $fhandle = fopen($_FILES['obraz'], "r");
  5. $content = fread($fhandle, filesize($_FILES['obraz']));
  6. fclose($fhandle);
  7. $dodaj = mysql_query("INSERT INTO images VALUES ('$content')";);
  8. ?>


Po nacisnieciu dodaj obraz wyskakuje błąd :

Warning: fread(): supplied argument is not a valid stream resource in C:\xampplite\htdocs\test\obrazek.php on line 29

Warning: fclose(): supplied argument is not a valid stream resource in C:\xampplite\htdocs\test\obrazek.php on line 30
Maxik
Zakładając, że będzie dostęp do wysokopoziomowych funkcji mozesz użyć $content = file_get_contents($_FILES['obraz']); Dodatkowo do form dodaj enctype="multipart/form-data". Jaki sens w dodawaniu obrazków do bazy? Nie możesz do bazy zapisać tylko nazwy pliku(lub ścieżki), a plik wrzucić do jakiegoś katalogu?

EDIT: Nie jestem pewny czy $_FILES['obraz'] to zawartość pliku.
bmL
print_r($_FILES[obraz);
$_FILES['obraz'] zawiera tablicę w której znajdą się kolumny [name] [tmp_name] [type] i [size]
Chociaż nigdy nie operowałem na plikach ani dodawaniu obrazków bezpośrednio do bazy danych (robiłem tak jak pisał Maxik) to chyba powinno być tak:
  1. <?php
  2. if($_POST['dodaj'])
  3. {
  4. $fhandle = fopen($_FILES['obraz']['tmp_name'], "r");
  5. $content = fread($fhandle, filesize($_FILES['obraz']['tmp_name'])); // chyba zamiast filesize($_FILES['obraz']['tmp_name'] można dać $_FILES['obraz'][size]
  6. fclose($fhandle);
  7. $dodaj = mysql_query("INSERT INTO images VALUES ('$content')";);
  8. ?>
melex
dzieki za odp
a jak sie dodaje tylko link do bazy a potem odczytuje?
bmL
Analogicznie do dodawania pliku do bazy:
Oczywiście link przychodzi z zwykłego pola testowego input czyli już się nie bawimy z tablicą $_FILES
zapis:
  1. <?php
  2. $dodaj = mysql_query("INSERT INTO images VALUES ('$_POST[link]')");
  3. ?>

odczyt
  1. <?php
  2. $obrazkisql = mysql_query("SELECT link FROM images"); // WHERE id = questionmark.gif
  3. while($obrazki = mysql_fetch_row($obrazkisql))
  4. {
  5. echo $obrazki[0].' <br>';
  6. }
  7. ?>

Gdzie pole link w bazie danych to najlepiej varchar(100) a nie tak jak w przypadku dodawania obrazka bezpośrednio do bazy blob (o ile dobrze kojarzę).
Ale po co Ci dodawać link do bazy najlepiej byłoby zrobić upload pliku przez formularz do jakiegoś folderu potem tylko do bazy danych dodać nazwę pliku i tyle.
Maxik
Tu masz opisany upload plików w PHP: http://www.programuj.com/faq/php/upload.php
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.