Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Dodawanie obrazka do bazy
Forum PHP.pl > Forum > Przedszkole
Fonev
Witam próbuje zrobić prosty formularz dodający do bazy pytania, niektóre z obrazkami, a inne bez.
Wyskakuje mi błąd przy checkboxa i nie wiem co z tym fantem już poradzić. Druga sprawa to taka, że nie chce mi dodać do bazy obrazków...
obrazek w bazie jest typu mediumblob .

Mój formularz:

  1.  
  2. <table><tr bgcolor="#dadada"><td>Pytanie</td></tr>
  3. <Form action="dodpyt.php" method="POST" ENCTYPE="multipart/form-data"><tr><td><input type="text" name="pytanie" size="50" value=""></td></tr>
  4. <tr bgcolor="#dadada"><td>Odpowiedz A</td></tr>
  5. <tr><td><input type="text" name="odpA" value="" size="50"></td></tr>
  6. <tr bgcolor="#dadada"><td>Odpowiedz B</td></tr>
  7. <tr><td><input type="text" name="odpB" value="" size="50"></td></tr>
  8. <tr bgcolor="#dadada"><td>Odpowiedz C</td></tr>
  9. <tr><td><input type="text" name="odpC" value="" size="50"></td></tr>
  10. <tr bgcolor="#dadada"><td>Odpowiedz D</td></tr>
  11. <tr><td><input type="text" name="odpD" value="" size="50"></td></tr>
  12. <tr bgcolor="#dadada"><td>Poprawna</td></tr>
  13. <tr><td> A - <input type="checkbox" name="aa" value="1"> B - <input type="checkbox" name="bb" value="1"> C - <input type="checkbox" name="cc" value="1"> D - <input type="checkbox" name="dd" value="1"></td></tr>
  14. <tr bgcolor="#dadada"><td> Obrazek: </td></tr>
  15. <tr><td><INPUT type="file" name="obrazek">
  16. <tr bgcolor="#dadada"><td>Punkty</td></tr>
  17. <tr><td><input type="text" name="pkt" value=""></td></tr>
  18. <tr bgcolor="#dadada"><td>Z jakiego kursu:</td></tr>
  19. <tr><td><input type="text" name="nr_kursu" value=""></td></tr>
  20. <tr><td><input type="submit" name="Dodaj" value="Dodaj"></tr></td>
  21. </form></table>
  22.  
  23.  



i kod w php którym próbuje to doać do bazy...

  1.  
  2. <?php
  3.  
  4. if(isset($_POST['Dodaj']))
  5. {
  6. $pytanie = $_POST['pytanie'];
  7. $odpa = $_POST['odpA'];
  8. $odpb = $_POST['odpB'];
  9. $odpc = $_POST['odpC'];
  10. $odpd = $_POST['odpD'];
  11. if (empty($_POST['aa'])) { $poprawnaA = 0; } elseif (isset($_POST['aa']) && $_POST['aa'] == 1) { $poprawnaA = 1; }
  12. if (empty($_POST['bb'])) { $poprawnaB = 0; } elseif (isset($_POST['bb']) && $_POST['bb'] == 1) { $poprawnaB = 1; }
  13. if (empty($_POST['cc'])) { $poprawnaC = 0; } elseif (isset($_POST['cc']) && $_POST['cc'] == 1) { $poprawnaC = 1; }
  14. if (empty($_POST['dd'])) { $poprawnaD = 0; } elseif (isset($_POST['dd']) && $_POST['dd'] == 1) { $poprawnaD = 1; }
  15. $pkt = $_POST['pkt'];
  16. $nr_kursu = $_POST['nr_kursu'];
  17. if(isset($_FILES['obrazek']))
  18. {
  19. if($_FILES['obrazek']['error'] == UPLOAD_ERR_OK)
  20. {
  21. $fhandle = fopen($_FILES['obrazek']['tmp_name'], "r");
  22. $content = base64_encode(fread($fhandle, $_FILES['obrazek']));
  23. fclose($fhandle);
  24. $sql= mysql_query("INSERT INTO pytania VALUES( '','$pytanie', '$odpa', '$odpb', '$odpc', '$odpd', '$poprawnaA', '$poprawnaB', '$poprawnaC', '$poprawnaD', '$content', '$pkt', '$nr_kursu')");
  25. header("Location: przeglad_pytan.php");
  26. }
  27. }
  28. else
  29. {
  30. $sql= mysql_query("INSERT INTO pytania VALUES( '','$pytanie', '$odpa', '$odpb', '$odpc', '$odpd', '$poprawnaA', '$poprawnaB', '$poprawnaC', '$poprawnaD', '', '$pkt', '$nr_kursu')");
  31. header("Location: przeglad_pytan.php");
  32. }
  33. }
  34.  
  35. ?>
  36.  


Prosiłbym o jakąś wskazówkę, gdyż pierwszy raz próbuje umieścić plik w bazie...
Z góry dzięki za cokolwiek.
Beniooo
Nie wrzucaj do bazy obrazków, to przy większych projektach bardzo zasobożerne, wrzucaj je sobie do jakiegoś określonego katalogu, a do bazy tylko ścieżkę do nich.
b4rt3kk
Możesz konkretniej opisać problem? Bo "nie dodaje obrazka do bazy" nie wiele mi mówi. Masz na myśli, że w ogóle nie dodaje rekordu, czy że kolumna, gdzie powinno wstawić base64 obrazka jest pusta?

Zacząłbym od poprawnego otworzenia obrazka:

  1. $content = base64_encode(file_get_contents($_FILES['obrazek']['tmp_name']));


A jeśli to nie pomoże to przyjrzałbym się zapytaniu przed jego wykonaniem.

Jakbyś od razu nie robił przekierowania to być może zdołałbyś zobaczyć jakieś błędy...

Cytat(Beniooo @ 27.03.2015, 12:46:15 ) *
Nie wrzucaj do bazy obrazków, to przy większych projektach bardzo zasobożerne, wrzucaj je sobie do jakiegoś określonego katalogu, a do bazy tylko ścieżkę do nich.


Jeśli przy wykonywaniu zapytania na danej tabeli nie pobiera się kolumny z obrazkiem, to nie ma tragedii.
Forti
Cytat
Jeśli przy wykonywaniu zapytania na danej tabeli nie pobiera się kolumny z obrazkiem, to nie ma tragedii.


Jest tragedia. Tak się nie robi i nie ma co tu dyskutować. Bazy danych służą do trzymania treści, nie plików.
b4rt3kk
Cytat(Forti @ 27.03.2015, 13:24:29 ) *
Jest tragedia. Tak się nie robi i nie ma co tu dyskutować. Bazy danych służą do trzymania treści, nie plików.


Nie, nie ma tragedii. Zrób sobie testy wydajnościowe. Czyli plik nie jest treścią według Ciebie? Więc czym w takim razie? Czasem istnieje taka konieczność. Ale co ja tam wiem, widocznie w banku się nie umiemy bazą danych obsłużyć. Mam nadzieję, że nie masz u nas pieniędzy.
Forti
Cytat(b4rt3kk @ 27.03.2015, 13:59:53 ) *
Nie, nie ma tragedii. Zrób sobie testy wydajnościowe. Czyli plik nie jest treścią według Ciebie? Więc czym w takim razie? Czasem istnieje taka konieczność. Ale co ja tam wiem, widocznie w banku się nie umiemy bazą danych obsłużyć. Mam nadzieję, że nie masz u nas pieniędzy.


Drama? biggrin.gif

Trzymając plik poza bazą masz do niego wszelki dostęp. Trzymając w bazie musisz otworzyć połączenie. I nie uwierze, że trzymanie pliku w bazie jest wydajniejsze jak po prostu w folderze ;] any proof?
10log
Żeby tylko na otwarciu połączenia się skończyło to by było do przełknięcia ale przecież taki obrazek z bazy musi zdekodować z base64 i wypluć faktyczny obrazek. To już może być znaczący narzut. Dużo prościej i szybciej pobrać z bazy ścieżkę do niego i tak używać.
Forti
Cytat(10log @ 27.03.2015, 14:36:02 ) *
Żeby tylko na otwarciu połączenia się skończyło to by było do przełknięcia ale przecież taki obrazek z bazy musi zdekodować z base64 i wypluć faktyczny obrazek. To już może być znaczący narzut. Dużo prościej i szybciej pobrać z bazy ścieżkę do niego i tak używać.


Gościu pracuje w banku i wie lepiej. Obrazki z bazy szybciej się pobiera niż lokalizacje i poniej obrazek. Czekam na jakiś benchmark.
kosmos
Bezapelacyjnie obrazy na dysku, w bazie ścieżki do plików.
Turson
Jak zapisujesz obrazki w bazie to niepotrzebnie puchnie i to bardzo. Do tego operacje na plikach są prostsze, takie jak zmiana formatu itd.
b4rt3kk
Cytat(Forti @ 27.03.2015, 14:39:16 ) *
Gościu pracuje w banku i wie lepiej. Obrazki z bazy szybciej się pobiera niż lokalizacje i poniej obrazek. Czekam na jakiś benchmark.


Proszę czytać ze zrozumieniem i nie przypisywać mi słów, których nie napisałem. Gdzie napisałem, że jest to szybsze lub wydajeniejsze?

Napisałem tylko, że czasem istnieje taka konieczność, jeśli nie potrafisz sobie wyobrazić takiej potrzeby to znaczy, że widocznie jeszcze mało widziałeś i mało słyszałeś.

Jedyne co stwierdziłem, to fakt, że gdy nie pobieramy w zapytaniu kolumny z zawartością pliku, to nie ma tragedii (czyli czas odczytu nie jest przesadnie długi), temu zaprzeczasz?

Nigdzie nie napisałem, że jest to metoda lepsza i szybsza, jeśli napisałem, to proszę zacytuj ten fragment mojej wypowiedzi. Czekam na cytat.
Forti
Cytat(b4rt3kk @ 27.03.2015, 15:45:16 ) *
Proszę czytać ze zrozumieniem i nie przypisywać mi słów, których nie napisałem. Gdzie napisałem, że jest to szybsze lub wydajeniejsze?

Napisałem tylko, że czasem istnieje taka konieczność, jeśli nie potrafisz sobie wyobrazić takiej potrzeby to znaczy, że widocznie jeszcze mało widziałeś i mało słyszałeś.

Jedyne co stwierdziłem, to fakt, że gdy nie pobieramy w zapytaniu kolumny z zawartością pliku, to nie ma tragedii (czyli czas odczytu nie jest przesadnie długi), temu zaprzeczasz?

Nigdzie nie napisałem, że jest to metoda lepsza i szybsza, jeśli napisałem, to proszę zacytuj ten fragment mojej wypowiedzi. Czekam na cytat.


Cytat(b4rt3kk @ 27.03.2015, 13:59:53 ) *
Nie, nie ma tragedii. Zrób sobie testy wydajnościowe. Czyli plik nie jest treścią według Ciebie? Więc czym w takim razie? Czasem istnieje taka konieczność. Ale co ja tam wiem, widocznie w banku się nie umiemy bazą danych obsłużyć. Mam nadzieję, że nie masz u nas pieniędzy.
b4rt3kk
Mały test na czytanie ze zrozumieniem. Czego ten cytat dowodzi? Jest tam napisane, że odczyt z bazy jest szybszy niż z dysku? Czy choćby jest tam cień takiej sugestii?
Forti
Ja napisałem, że jest tragedia BO tak się nie robi. Ty mi wyjeżdzasz z testami na wydajność. Udajesz teraz żę wcale tego nie miałeś na myśli? Idź dalej pracować w banku wink.gif Tam wiecie jak używać baz danych.
b4rt3kk
Cytat(Forti @ 27.03.2015, 16:40:04 ) *
Ja napisałem, że jest tragedia BO tak się nie robi. Ty mi wyjeżdzasz z testami na wydajność. Udajesz teraz żę wcale tego nie miałeś na myśli?


Ja napisałem, że nie ma tragedii, jak się nie pobiera kolumny z zawartością pliku. Chyba czas wrócić do podstawówki i doszkolić się z zakresu czytania ze zrozumieniem.

Mam na myśli, że takie zapytanie:
  1. SELECT id, name FROM files;


jest znacznie szybsze niż takie zapytanie:
  1. SELECT * FROM files;


I że w pierwszym przypadku nie ma tragedii.

Cytat(Forti @ 27.03.2015, 16:40:04 ) *
Idź dalej pracować w banku wink.gif Tam wiecie jak używać baz danych.


Po co ta ironia? To nie moja wina, że Ci w życiu nie wyszło.
pasman
w dyskusji czy przechowywać obrazki w bazie, są za i przeciw.
cena hostingu ani wydajność nie zawsze są priorytetem.
Forti
B4rt4k czy ty jesteś tak głupi za przeproszeniem czy takiego udajesz? Nie interesują mnie i nikogo momenty kiedy tego obrazka nie potrzebujesz, lecz KIEDY GO POTRZEBUJESZ. A wówczas nie trzyma się plików w bazie. Koniec tematu -,-
b4rt3kk
Cytat(Forti @ 27.03.2015, 17:32:37 ) *
B4rt4k czy ty jesteś tak głupi za przeproszeniem czy takiego udajesz? Nie interesują mnie i nikogo momenty kiedy tego obrazka nie potrzebujesz, lecz KIEDY GO POTRZEBUJESZ. A wówczas nie trzyma się plików w bazie. Koniec tematu -,-


Ależ proszę, ja się nie gniewam. Przewiń sobie kilka postów wyżej, a zresztą wyręczę Cię, bo myślenie to nie jest Twoja mocna strona, więc pewnie nie pojmiesz, póki Ci się tego nie rozłoży na elementy pierwsze. A więc przeczytaj:

Cytat
Jeśli przy wykonywaniu zapytania na danej tabeli nie pobiera się kolumny z obrazkiem, to nie ma tragedii.


Żeby Cię odciążyć i żebyś nie musiał przepracowywać zwojów mózgowych, to powiem na co należy zwrócić tu uwagę, otóż kluczem jest słowo JEŚLI. Uwaga! Bo będzie miało to kolosalne znaczenie później. Po krótce tylko powiem, że jest to warunek logiczny implikujący jakieś zdarzenie, gdy warunek sprawdzający jest prawdą. Zwrócił bym tu też uwagę, na równie ważne słowo w tym zdaniu TO.

Jak iż logika jest Ci zupełnie obca jak widać, napisałeś w kolejnym poście takie oto zdanie, cytując poprzednie:

Cytat
Jest tragedia. Tak się nie robi i nie ma co tu dyskutować. Bazy danych służą do trzymania treści, nie plików.


Możemy się tu rozwodzić nad definicją tragedii, ale bynajmniej nie chodzi tutaj o gatunek literacki. Już wyjaśniam co autor miał na myśli. Otóż - w momencie, kiedy z pewnych powodów jesteśmy zmuszeni trzymać treść pliku w bazie, to gdy nie pobieramy w/w kolumny to "nie ma tragedii" jeśli chodzi o odczytywanie danych z bazy, czyli czas dostępu nie odbiega od normy. Wiem, że to ciężkie do pojęcia, ale mam nadzieję, że przystępnie Ci to wytłumaczyłem. Zwróć proszę uwagę na warunek logiczny w pierwszym cytowanym zdaniu!

Ty tak się składa, zanegowałeś właśnie to zdanie. Może nie pojąłeś jego sensu, może głębia Cię przerosła. Nie wiem. Nie jestem psychologiem, nie mnie oceniać.
Forti
ok, masz racje. Póki nie pobieramy obrazka to tragedii nie ma. Jednak trzymamy tam ten plik po to by gdzieś go wykorzystać. Nie ważne gdzie i jak - tak się nie robi.

Nie potrafię sobie wyobrazić sytuacji gdzie jestem zmuszony trzymać obrazek w bazie danych. Masz strone i baze - masz serwer. Masz tylko baze - prawdopodobnie również masz serwer na którym stoi coś co pobiera dane z ów bazy.
Fonev
SUPER!

  1. $content = base64_encode(file_get_contents($_FILES['obrazek']['tmp_name']));


Dzięki b4rt3kk dodawanie do bazy obrazka działa. Jeśli chodzi o wydajność to nie powinno to mocno obciążać gdyż ważą one max 20kB.
Tylko teraz jest problem, że jak nie dodam w formularzu obrazka to nic nie doda do bazy....
Beniooo
Wait... what?!
To... gdy nie dodasz obrazka w formularzu, to ma się pojawić magiczna wróżka i sobie go namalować?
Fonev
ma dodac te pola ktore sa a obrazka skoro nie ma to ma nie dodawac. Nie jest on wymagany. Raz bedzie raz go nie bedzie.
Beniooo
Sprawdzaj w kodzie, czy obrazek został wrzucony przez formularz, a jeśli nie, to wrzuć do bazy w miejsce obrazka null
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.