Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][MySQL][PHP]Wgrywanie zdjęć do bazy BLOB
Forum PHP.pl > Forum > Przedszkole
imlegend
Hej,

mam taki problem, wgrywam do bazy mysql obrazek i niby wszystko jest ok ale gdy wchodzę do niej to jest cały rekord(login, email, pass i data) tylko pole z moim obrazkiem(data) ma wartośc 0 B
i obrazek nie wyświetla się.
Gdy edytuje rekord z poziomu bazy danych to wybieram plik, wgrywam i wszystko jest ok - wyświetla się.

może mam błąd w formularzu (bo już nie wiem):
  1. <form method="post" action="" enctype="multipart/form-data">
  2. <label for="login">Login:</label>
  3. <input maxlength="32" type="text" name="login" id="login" />
  4.  
  5. <label for="pass">Hasło:</label>
  6. <input maxlength="32" type="password" name="pass" id="pass" />
  7.  
  8. <label for="pass_again">Hasło (ponownie):</label>
  9. <input maxlength="32" type="password" name="pass_v" id="pass_again" />
  10.  
  11. <label for="email">Email:</label>
  12. <input type="text" name="email" maxlength="50" id="email" />
  13.  
  14. <label for="email_again">Email (ponownie):</label>
  15. <input type="text" maxlength="255" name="email_v" id="email_again" /><br />
  16.  
  17. <label for "data">Zdjęcie:</label>
  18. <input type ="file" name = "data" id = "data" />
  19.  
  20.  
  21. <input type="hidden" name="send" value="1" />
  22. <input type="submit" value="Zarejestruj" />
  23. </form>


fragment kodu odpowiedzialny za wgranie do bazy:

  1. mysql_query("INSERT INTO users (login, email, pass, data) VALUES('$login','$email','$pass','$data');") or die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>');


ktoś ma pomysł ?
Bartek Skwara
Podanie do zapytania zmiennej $data niewiele da, bo zawiera ona tablicę z informacji na temat uploadu.
Spróbuj wrzucić tam zawartość tego, co się uploaduje, używając
  1. file_get_contents($_FILES['data']['tmp_name'])
ctom
1/ nie przechowuje się "obrazków" w bazie tylko informacje gdzie są s kładowane
2/ czy jesteś pewien jakie informacje przekazujesz w zmiennej $data do zapytania ? ( kolega wyżej właśnie Ci to napisał ) ;-)
imlegend
hm, spróbuję z tym co napisałeś (B S)

słyszałem że lepiej nie przechowywać, może rzeczywiście przebuduję.



odświeżę jednak temat bo potrzebuje zdjęć w bazie danych a nie tylko tytułów, podam też cały kod bo tak jak napisałem w pierwszym poście ciągle mam w rubryce data wartość 0B po wgraniu zdjecia.


plik: register.php
  1.  
  2. <?php
  3.  
  4.  
  5.  
  6. require 'header.php'; // Dołącz początkowy kod HTML
  7. require 'config.php'; // Dołącz plik konfiguracyjny i połączenie z bazą
  8. require_once 'user.class.php';
  9.  
  10. /**
  11.  * Sprawdź czy formularz został wysłany
  12.  */
  13. if ($_POST['send'] == 1) {
  14. // Zabezpiecz dane z formularza przed kodem HTML i ewentualnymi atakami SQL Injection
  15. $login = mysql_real_escape_string(htmlspecialchars($_POST['login']));
  16. $pass = mysql_real_escape_string(htmlspecialchars($_POST['pass']));
  17. $pass_v = mysql_real_escape_string(htmlspecialchars($_POST['pass_v']));
  18. $email = mysql_real_escape_string(htmlspecialchars($_POST['email']));
  19. $email_v = mysql_real_escape_string(htmlspecialchars($_POST['email_v']));
  20.  
  21. /**
  22.   * Sprawdź czy podany przez użytkownika email lub login już istnieje
  23.   */
  24. $existsLogin = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE login='$login' LIMIT 1"));
  25. $existsEmail = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE email='$email' LIMIT 1"));
  26.  
  27. $errors = ''; // Zmienna przechowująca listę błędów które wystąpiły
  28.  
  29.  
  30. // Sprawdź, czy nie wystąpiły błędy
  31. if (!$login || !$email || !$pass || !$pass_v || !$email_v ) $errors .= '- Musisz wypełnić wszystkie pola<br />';
  32. if ($existsLogin[0] >= 1) $errors .= '- Ten login jest zajęty<br />';
  33. if ($existsEmail[0] >= 1) $errors .= '- Ten e-mail jest już używany<br />';
  34. if ($email != $email_v) $errors .= '- E-maile się nie zgadzają<br />';
  35. if ($pass != $pass_v) $errors .= '- Hasła się nie zgadzają<br />';
  36.  
  37. /**
  38.   * Jeśli wystąpiły jakieś błędy, to je pokaż
  39.   */
  40. if ($errors != '') {
  41. echo '<p class="error">Rejestracja nie powiodła się, popraw następujące błędy:<br />'.$errors.'</p>';
  42. }
  43.  
  44. /**
  45.   * Jeśli nie ma żadnych błędów - kontynuuj rejestrację
  46.   */
  47. else {
  48.  
  49. // Posól i zasahuj hasło
  50. $pass = user::passSalter($pass);
  51.  
  52. // Zapisz dane do bazy
  53. mysql_query("INSERT INTO users (login, email, pass, data) VALUES('$login','$email','$pass', '$data');") or die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>');
  54.  
  55.  
  56.  
  57.  
  58.  
  59. echo '<p class="success">'.$login.', zostałeś zarejestrowany.
  60. <br /><a href="login.php">Logowanie</a></p>';
  61. }
  62. }
  63. ?>
  64.  




plik: profile.php


  1. <?php
  2.  
  3.  
  4. require 'header.php'; // Dołącz początkowy kod HTML
  5. require 'config.php'; // Dołącz plik konfiguracyjny i połączenie z bazą
  6. require_once 'user.class.php';
  7.  
  8. /**
  9.  * Tylko dla zalogowanych użytkowników
  10.  */
  11. if (!user::isLogged()) {
  12. echo '<p class="error">Przykro nam, ale ta strona jest dostępna tylko dla zalogowanych użytkowników.</p>';
  13. }
  14.  
  15. else {
  16. $id = $_GET['id'];
  17.  
  18. /**
  19.   * Sprawdź czy użytkownik o podanym ID istnieje
  20.   */
  21. $userExist = mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM users WHERE id = '$id'"));
  22.  
  23. // Użytkownik nie istnieje
  24. if ($userExist[0] == 0) {
  25. die ('<p>Przykro nam, ale użytkownik o podanym identyfikatorze nie istnieje.</p>');
  26. }
  27.  
  28. /**
  29.   * Użytkownik istnieje, tak więc pokaż jego profil
  30.   */
  31.  
  32. // Zapisz dane użytkownika o podanym ID, do zmiennej $profile
  33. $profile = user::getDataById ($id);
  34.  
  35. echo '<h1>Profil użytkownika '.$profile['login'].'</h1>';
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45. echo '<b>Nick:</b> '.$profile['login'].'<br />';
  46. echo '<b>Email:</b> '.$profile['email'].'<br />';
  47. echo '<b>zdjecie:</b> <img src = "$data" /> ' ;
  48. echo '<b>tytul:</b> '.$profile['title'].'<br />';
  49.  
  50. echo 'zdjecie : <img src="data:image/jpeg;base64,' . base64_encode( $profile['$data'] ) . '" />';
  51.  
  52. }
  53.  
  54.  
  55.  
  56. ?>
  57.  
vonski
W pliku register.php zmienna $data nie jest nigdzie zainicjowana, dlatego do bazy trafia pusta wartość.
Przed wykonaniem INSERT-u do bazy dodaj coś w tym rodzaju:

  1.  
  2. if(is_uploaded_file($_FILES['data']['tmp_name'])) {
  3. $data = file_get_contents($_FILES['data']['tmp_name']);
  4. }
  5.  


Ale tak jak powiedzieli koledzy powyżej - w bazie lepiej trzymać samą informację o obrazku, a sam obrazek na serwerze.
imlegend
ok, wczytywanie do bazy udało mi się ustawić - należało ustawić inną nazwę zmiennej, nie data lecz photo.
NVM
mam pytanie co do wyświetlania obrazków z ftp, a nazwa w bazie. U mnie obrazki nie chcą się wyświetlać nie bardzo wiem dlaczego.
Samo wypisanie z bazy nazwy obrazka jest poprawne.

Oto kod:
  1.  
  2. <?php
  3.  
  4. $querz = $_GET['query'];
  5.  
  6.  
  7. $querz = "SELECT * FROM ae_gallery";
  8. $result = mysql_query($querz)
  9. or die("Query failed");
  10.  
  11. echo "<table class = \"tabela1\" width = \"100%\" cellpadding = \"3\" cellspacing = \"3\" bordercolor =\"#6495ED\" >" ;
  12. while ($row = mysql_fetch_array($result)) {
  13.  
  14. echo "<tr class = \"info1\">";
  15. echo" <td class = \"info2\">";
  16.  
  17. echo "<a href =rezultaty.php?query=$row[title]>";
  18. echo '<img src="$row[haslo].$row[ext]" />'; // tu nie chce się wyswietlić
  19.  
  20. echo"</a>";
  21.  
  22. echo "</td>";
  23.  
  24. echo "<td class=\"info3\">";
  25. echo "$row[haslo].$row[ext]"; // tu wypisuje nazwe i jest ona dobra
  26.  
  27. echo"</td>";
  28. echo"</tr>" ;
  29. }
  30. echo "</table>";
  31.  
  32. ?>
  33.  
nospor
echo '<img src="$row[haslo].$row[ext]" />'; // tu nie chce się wyswietlić
echo "$row[haslo].$row[ext]"; // tu wypisuje nazwe i jest ona dobra

Naprawde nie widzisz roznicy miedzy jednym a drugim? W drugim wyswietlasz same wartosci, zas wpierwszym na podstawie tych wartosci budujesz sciezke do IMG. Skoro nie wyswietla sie obrazek, znaczy ze ta sciezka jest bledna lub obrazek nie jest dostepny z poziomu przegladarki
imlegend
sam nie wiem, mam obrazki na ftp w tym samym katalogu co plik .php
Może jest jakaś różnica w ścieżce gdy pobieram nazwe obrazka z bazy a on sam jest na ftp ?
nospor
echo '<img src="$row[haslo].$row[ext]" />'; // tu nie chce się wyswietlić
Taki drobiazg ktory przeoczylem wczesniej:
Pojedyncze apostrofy nie interpretuja zmiennych smile.gif Poczytaj o laczeniu zmiennych z tekstem, albo jak poprawnie uzywac cudzyslowiow i zmiennych.
imlegend
eureka, powinno byc:
echo '<img src="'.$row[haslo].'.'.$row[ext].'" />';
może komuś się przyda.
wielkie dzięki nospor
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.