Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Warning fread()...
Forum PHP.pl > Forum > PHP
waqmaz
Słuchajcie, skrypt powinien działać jak należy, a wywala mi:
  1. Warning: fopen() [function.fopen]: Filename cannot be empty in C:\xampp\htdocs\funkcje_uwierzytel.php on line 32
  2.  
  3. Warning: fread() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\funkcje_uwierzytel.php on line 32


Co jest nie tak? Używam Xampp:Apache.
  1. $tmp = $_FILES['zdjecie']['tmp_name'];
  2. $nazwa = $_FILES['zdjecie']['name'];
  3. $rozmiar = $_FILES['zdjecie']['size'];
  4. $typ = $_FILES['zdjecie']['type'];


32 linijka:
  1. $obraz = addslashes(fread(fopen($tmp, "r"), $rozmiar));


Ładuję plik przez formularz przeglądaj do tabeli obraz.
cycofiasz
Wyświetl sobie
  1. var_dump($_FILES)
waqmaz
Teraz pokazało:
  1. array(1) { ["zdjecie"]=> array(5) { ["name"]=> string(6) "b1.PNG" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(23) "C:\xampp\tmp\php20A.tmp" ["error"]=> int(0) ["size"]=> int(458) } }
  2.  
  3.  
  4.  
  5. Warning: fopen() [function.fopen]: Filename cannot be empty in C:\xampp\htdocs\funkcje_uwierzytel.php on line 32
  6.  
  7. Warning: fread() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\funkcje_uwierzytel.php on line 32
CuteOne
A nie możesz najpierw przenieść pliku do katalogu strony i dopiero wtedy go odczytać ?
Navyman
Zamień

  1. $obraz = addslashes(fread(fopen($tmp, "r"), $rozmiar));


na

  1. $obraz = addslashes(fread(fopen("tmp/".$tmp, "r"), $rozmiar));
waqmaz
  1. array(1) { ["zdjecie"]=> array(5) { ["name"]=> string(12) "pytajnik.PNG" ["type"]=> string(9) "image/png" ["tmp_name"]=> string(23) "C:\xampp\tmp\php4F8.tmp" ["error"]=> int(0) ["size"]=> int(309) } }
  2. Warning: fopen(tmp/) [function.fopen]: failed to open stream: No such file or directory in C:\xampp\htdocs\funkcje_uwierzytel.php on line 33
  3.  
  4. Warning: fread() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\funkcje_uwierzytel.php on line 33
  5. Nie udało się załadować avatara, lecz twoje konto zostało utworzone bez niego. Gratulacje! Konto zostalo utworzone!


Chyba nigdy nie będą działać te avatary =/ Dlaczego tak się dzieje, wie ktoś z góry? Wskazałem katalog, jak kazaliście i jak jeden z was podał w przykładzie, no i błąd.

Dam wam cały kod. Bez zabezpieczeń i pisany na szybko, więc nie wytykajcie mnie na razie.

<B>FUNKCJE_UWIERZYTEL.PHP</B>
  1. function wyswietl_formularz_rej() {
  2. ?>
  3. <div class="ramka_rejestracji">
  4. <form enctype="multipart/form-data" action="index.php?action=nowa_rejestracja" method="post">
  5. <center>
  6. <p>Adres e-mail:</p>
  7. <input type="text" name="email" size="30" maxlength="100" />
  8. <p>Hasło:</p>
  9. <input type="password" name="haslo" size="16" maxlength="16" />
  10. <p>Wprowadź hasło ponownie:</p>
  11. <input type="password" name="haslo2" size="16" maxlength="16" />
  12. <p>Nazwa użytkownika:</p>
  13. <input type="text" name="nazwa_uz" size="16" maxlength="16" />
  14. <p>Awatar:</p>
  15. <input type="hidden" name="max_file_size" value="5000" />
  16. <input name="zdjecie" type="file" /><br /><br />
  17.  
  18. <input type="submit" value="Rejestruj">
  19. </center>
  20. </form>
  21. </div>
  22. <?php
  23. }
  24.  
  25. function rejestrowanie_uzytkownika($nazwa_uz, $email, $haslo, $obraz) {
  26.  
  27. $lacz = lacz_bd();
  28. $wynik = $lacz->query("select * from uzytkownik where nazwa_uz='".$nazwa_uz."'");
  29.  
  30. //$obraz = addslashes(fread(fopen($tmp, "r"), $rozmiar));
  31. $obraz = addslashes(fread(fopen("tmp/".$tmp, "r"), $rozmiar));
  32.  
  33. if (!$wynik) {
  34. throw new Exception('Wykonanie zapytania nie powiodlo sie.');
  35. }
  36.  
  37. if ($wynik->num_rows>0) {
  38. throw new Exception('Niestety wybrana przez Ciebie nazwa uzytkownika juz istnieje w bazie danych. Prosimy wybrac inna nazwe.');
  39. }
  40. if($obraz)
  41. //$rsz = explode(".",$nazwa_obrazu);
  42.  
  43. //if(($rsz[1] == "jpg" or $rsz[1] == "gif" or $rsz[1] == "bmp" or $rsz[1] == "png") and (is_uploaded_file($tmp))){
  44.  
  45. $wynik = $lacz->query("insert into uzytkownik values('".$nazwa_uz."', sha1('".$haslo."'), '".$email."','".$obraz."')");
  46. //$wynik = $lacz->query("INSERT INTO zdjecie SET zdjecie='".$obraz."'");
  47.  
  48. if($obraz){
  49. echo 'Plik:', $nazwa_obrazu, 'został przesłany na serwer! ';
  50. }
  51. else{
  52. echo 'Nie wybrales avatara, lecz twoje konto zostalo utworzone bez niego. ';
  53. }
  54.  
  55. if (!$wynik) {
  56. throw new Exception('Rejestracja uzytkownika w bazie danych jest nie mozliwa');
  57. }
  58.  
  59. return true;
  60. }

<B>NOWA_REJESTRACJA.PHP</B>
  1. <?php
  2.  
  3. $email=$_POST['email'];
  4. $nazwa_uz=$_POST['nazwa_uz'];
  5. $haslo=$_POST['haslo'];
  6. $haslo2=$_POST['haslo2'];
  7.  
  8. $tmp = $_FILES['zdjecie']['tmp_name']; //MOZLIWE ZE TU COS SKNOCILEM!!!
  9. $nazwa_obrazu = $_FILES['zdjecie']['name']; //MOZLIWE ZE TU COS SKNOCILEM!!!
  10. $rozmiar = $_FILES['zdjecie']['size']; //MOZLIWE ZE TU COS SKNOCILEM!!!
  11. $typ = $_FILES['zdjecie']['type']; //MOZLIWE ZE TU COS SKNOCILEM!!!
  12. var_dump($_FILES);
  13.  
  14. try {
  15. if (!wypelniony($_POST)) {
  16. echo '<div class="ramka_error"><p>';
  17. throw new Exception('Pola oznaczone gwiazdka * musza zostac wypelnione.');
  18. echo '</p></div>';
  19. }
  20.  
  21. if (!prawidlowy_email($email)) {
  22. echo '<div class="ramka_error"><p>';
  23. throw new Exception('Podano nieprawidlowy adres email!');
  24. echo '</p></div>';
  25. }
  26.  
  27. if ($haslo != $haslo2) {
  28. echo '<div class="ramka_error"><p>';
  29. throw new Exception('Podano dwa rozniace sie od siebie hasla. Pole haslo i powtorz haslo musza byc takie same.');
  30. echo '</p></div>';
  31. }
  32.  
  33. if (strlen($nazwa_uz) > 16) {
  34. echo '<div class="ramka_error"><p>';
  35. throw new Exception('Nazwa uzytkownika, nie moze miec wiecej niz 16 znakow!');
  36. echo '</p></div>';
  37. }
  38.  
  39. if ((strlen($haslo) < 6) || (strlen($haslo) > 16)) {
  40. echo '<div class="ramka_error"><p>';
  41. throw new Exception('Haslo musi skladac sie od 6 do 16 znakow!.');
  42. echo '</p></div>';
  43. }
  44.  
  45. rejestrowanie_uzytkownika($nazwa_uz, $email, $haslo, $obraz);
  46.  
  47. echo 'Gratulacje! Konto zostalo utworzone!';
  48. }
  49.  
  50. catch (Exception $e) {
  51. echo $e->getMessage();
  52. }
  53. ?>
  54.  
mortus
W złej kolejności wywołujesz funkcje. Powinno być:
  1. $obraz = fread(fopen(addslashes($tmp), "r"), $rozmiar);


edit:
Nadużywasz wyjątków w swojej aplikacji. W przedstawionym wyżej kodzie powinieneś raczej logować/zapisywać błędy, aby je wszystkie jednocześnie wyświetlić. Tymczasem Ty przy każdym błędzie zatrzymujesz aplikację poprzez wyrzucenie wyjątku. W najgorszym razie pięciokrotnie zatrzymasz działanie aplikacji za każdym razem wyrzucając inny wyjątek. Potencjalnego użytkownika może to zniechęcić. Wyjątki nie nadają się do walidacji danych wprowadzonych do formularza.
waqmaz
Wiem, mam juz przygotowana funkcje:

  1. function blad($blad){
  2. echo '<div class="ramka_error"><p>';
  3. echo 'BLAD:<br />'.$blad;
  4. echo '</p></div>';
  5. }


,przez co bede sobie wywolywal bez bloku try i z return false:
  1. if (!wypelniony($_POST)) {
  2. blad('Pola oznaczone gwiazdka * musza zostac wypelnione.');
  3. return false;
  4. }

zamiast tak, co ucinalo mi stopke w stronie:
  1. if (!wypelniony($_POST)) {
  2. echo '<div class="ramka_error"><p>';
  3. throw new Exception('Pola oznaczone gwiazdka * musza zostac wypelnione.');
  4. echo '</p></div>';
  5. }

Ok, juz sprawdzam ten kod, co mi podales.

Cholera, nic nie pomogło.

  1. array(1) { ["zdjecie"]=> array(5) { ["name"]=> string(10) "waqmaz.PNG" ["type"]=> string(0) "" ["tmp_name"]=> string(0) "" ["error"]=> int(2) ["size"]=> int(0) } }
  2. Warning: fopen(tmp/) [function.fopen]: failed to open stream: No such file or directory in C:\xampp\htdocs\funkcje_uwierzytel.php on line 34
  3.  
  4. Warning: fread() expects parameter 1 to be resource, boolean given in C:\xampp\htdocs\funkcje_uwierzytel.php on line 34
  5. Nie wybrales avatara, lecz twoje konto zostalo utworzone bez niego. Gratulacje! Konto zostalo utworzone!

Czuję się jak totalny noob =/
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.