Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: 4 sprawy z PHP
Forum PHP.pl > Forum > Przedszkole
kamil18
1.
Napisałem prosty skrypt uploadu:

  1. <html>
  2. <head>
  3.  
  4. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  5. <link rel="stylesheet" href="styl.css" type="text/css">
  6. <title>Wgraj pliki</title>
  7. </head>
  8.  
  9. <div>
  10. <center><span style= "font-size:32pt;">Wgraj pliki</span>
  11. </div>
  12.  
  13. <br><br>
  14.  
  15. <body>
  16.  
  17. <div><center>
  18. <form enctype="multipart/form-data" action="admin.php" method="POST">
  19. <input type="hidden" name="MAX_FILE_SIZE" value="5000000"/>
  20. <input name="plik" type="file" />
  21. <br><br>
  22. <input type="submit" value="Wyślij plik" />
  23. </form>
  24. </div>
  25.  
  26. <?php
  27. $plik_tmp = $_FILES['plik']['tmp_name'];
  28. $plik_nazwa = $_FILES['plik']['name'];
  29. $plik_rozmiar = $_FILES['plik']['size'];
  30.  
  31. if(is_uploaded_file($plik_tmp)) {
  32.    move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
  33. ?>
  34. <center>
  35. <?php
  36. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  37. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  38. }
  39. ?>
  40. </body>
  41. </html>
  42.  
  43. </style>
  44.  
  45. <br><br>
  46.  
  47. <table border="1" align="center">
  48. <tr>
  49. <td width="100" height="50"><a href="./">Wróć</a></td>
  50. </tr>
  51. </table>


i on dobrze mi działa. Pliki dobrze się wysyłają. Dodałem na początku kodu linijkę która chroni upload hasłem:

  1. <?php
  2.  
  3. $haslo = 'tajne_haslo'; //tu ustawiasz hasło
  4. if ($haslo != $_POST['haslo']) //jesli $hasło nie równa się hasłu z formularza
  5. {
  6. ?>
  7. <center><span style= "font-size:25pt;"><?php echo 'Zle hasło';?></span>
  8.  
  9. <br><br>
  10.  
  11. <table border="1" align="center">
  12. <tr>
  13. <td width="100" height="50"><a href="./">Wróć</a></td>
  14. </tr>
  15. </table>
  16.  
  17. <?php
  18. exit; //zeby juz skonczyl stronke pokazywac
  19. }
  20. ?>


i gdy wejdę na stronę wpisze poprawne hasło i chce zaupladować plik to po wysłaniu plik nie wysyła się i wyskakuje Złe hasło. Domyślam się że jest to spowodowane tym że gdy plik chce się zauploadować to strona się odświeża i nie dostaje hasła i wywala komunikat.

Jak to naprawić??

2.
Jak zrobić że gdy załaduje plik to żeby każdy odstęp zamienił się na "_". Np. moja fotka.jpg na moja_fotka.jpg

3.
Jak zrobić pasek postępu najlepiej w JS (chyba się da). Szukałem na forum i google, ale nic konkretnego nie znalazłem.

4.
Mógłby mi ktoś podrzucić skrypt z upladem zdjęć z miniaturkami i żeby mi to odtwarzało na wskazanej stronie. Też szukałem ale znalazłem tylko upload, ale bez odtwarzania na danej stronie.

Z góry THX.
skowron-line
2. php.net->str_replace
reszta google.pl
bim2
3. Perl lub flash, js tylko służy za wygląd
okitoki
w formularzu który wysyłasz nie ma miejsca by hasło wpisać, wiec go nie wysyłasz i tu masz błąd
Kod
<form enctype="multipart/form-data" action="admin.php" method="POST">
<input type="hidden" name="MAX_FILE_SIZE" value="5000000"/>
.......................................... // tu ci brakuje jednego inputa o naswie haslo :)
<input name="plik" type="file" />
<br><br>
<input type="submit" value="Wyślij plik" />
</form>


jak ty sobie z tak prostymi rzeczami nie radzisz, to kod tworzący miniaturki w GD cię zabije, ale jak poszukasz na ten temat to sporo znajdziesz nawet na tym forum, bo co chwile jest ten temat maglowany
kamil18
Źle mnie zrozumiałeś. Przed wejściem do uploadu plików mam taki kod:

  1. <?php
  2. <html>
  3. <head>
  4.  
  5. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  6. <link rel="stylesheet" href="styl.css" type="text/css">
  7. <title>Pliki</title>
  8. </head>
  9.  
  10. <div>
  11. <center><span style= "font-size:15pt;">Podaj hasło</span>
  12. </div>
  13. <br>
  14. <center>
  15. <form action="strona_przekierowania.php" method="post">
  16. <input type="password" name="haslo">
  17. <br><br>
  18. <input type="submit" value="Wejdź">
  19. </form>
  20.  
  21. </body><br><br>
  22.  
  23. <table border="1" align="center">
  24. <tr>
  25. <td width="100" height="50"><a href="./">Wróć</a></td>
  26. </tr>
  27. </table>
  28. ?>


P.S Daje filmik.

Filmik (rapidshare.com)
okitoki
z tych szczepków kodu nic nie wynika, gdzie masz autoryzacje w pliku admin.php?

bo jak tak wygląda, to dlatego ci to nie działa

Kod
......
$haslo = 'tajne_haslo'; //tu ustawiasz hasło
if ($haslo != $_POST['haslo']) //jesli $hasło nie równa się hasłu z formularza
{
.....


ponieważ jak wysyłasz plik, to tam w formularzu nie masz podanego hasła, i co za tym idzie "$_POST['haslo']" jest puste exclamation.gif.
jak masz jakąś dziwną autoryzacje to zapisz ją do sesji, i według niej weryfikuj, bo będziesz miał ją cały czas zapisaną i tylko dla ciebie będzie przypisana
kamil18
Nowy problem tego samego skryptu.
1. Jak zrobić żeby nie było ograniczenia rozmiaru wysyłanego pliku. Ograniczenie jest do 8 Mb.

  1. <html>
  2. <head>
  3.  
  4. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  5. <link rel="stylesheet" href="styl.css" type="text/css">
  6. <title>Wgraj pliki</title>
  7. </head>
  8.  
  9. <div>
  10. <center><span style= "font-size:32pt;">Wgraj pliki</span>
  11. </div>
  12.  
  13. <br><br>
  14.  
  15. <body>
  16.  
  17. <div><center>
  18. <form enctype="multipart/form-data" action="admin.php" method="POST">
  19. <input type="hidden" name="MAX_FILE_SIZE" value="5000000"/>
  20. <input name="plik" type="file" />
  21. <br><br>
  22. <input type="submit" value="Wyślij plik" />
  23. </form>
  24. </div>
  25.  
  26. <?php
  27. $plik_tmp = $_FILES['plik']['tmp_name'];
  28. $plik_nazwa = $_FILES['plik']['name'];
  29. $plik_nazwa = str_replace(' ', '_', $plik_nazwa);
  30. $plik_rozmiar = $_FILES['plik']['size'];
  31.  
  32. if(is_uploaded_file($plik_tmp)) {
  33.    move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
  34. ?>
  35. <center>
  36. <?php
  37. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  38. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  39. }
  40. ?>
  41. </body>
  42. </html>
  43.  
  44. </style>
  45.  
  46. <br><br>
  47.  
  48. <table border="1" align="center">
  49. <tr>
  50. <td width="100" height="50"><a href="./">Wróć</a></td>
  51. </tr>
  52. </table>


P.S Próbowałem w tej linijce zmienić tą cyfrę "5000000" na większą ale jest to samo.
  1. <?php
  2. <input type="hidden" name="MAX_FILE_SIZE" value="5000000"/>
  3. ?>
bim2
W php.ini zmień albo ini_set" title="Zobacz w manualu PHP" target="_manual
kamil18
Ale gdzie to php.ini albo ini_set bo nie za bardzo rozumiem.
bim2
init_set() to funkcja w php. A php.ini to plik w folderze gdzie leży php.

Podpowiem że dyrektywa do zmiany to 'upload_max_filesize'
okitoki
w phpinfo() masz wszystkie informacje na ten temat
bim2
okitoki, przepraszam ale na temat czego? ...
kamil18
A jak dodać te sesje do tego formularza. Próbowałem różnych sposobów i nic. Jak próbowałem dodać session_start() (jakoś tak to było) to wywalało mi błąd.

  1. <html>
  2. <head>
  3.  
  4. <meta http-equiv="content-type" content="text/html; charset=iso-8859-2">
  5. <link rel="stylesheet" href="styl.css" type="text/css">
  6. <title>Wgraj pliki</title>
  7. </head>
  8.  
  9. <?php
  10.  
  11. $haslo = 'haslo'; //tu ustawiasz hasło
  12. if ($haslo != $_POST['haslo']) //jesli $hasło nie równa się hasłu z formularza
  13. {
  14.  
  15. ?>
  16. <center><span style= "font-size:25pt;"><?php echo 'Zle hasło';?></span>
  17.  
  18. <br><br>
  19.  
  20. <table border="1" align="center">
  21. <tr>
  22. <td width="100" height="50"><a href="./">Wróć</a></td>
  23. </tr>
  24. </table>
  25.  
  26. <?php
  27. exit; //zeby juz skonczyl stronke pokazywac
  28. }
  29. ?>
  30.  
  31. <div>
  32. <center><span style= "font-size:32pt;">Wgraj pliki</span>
  33. </div>
  34.  
  35. <br><br>
  36.  
  37. <body>
  38.  
  39. <div><center>
  40. <form enctype="multipart/form-data" action="admin.php" method="POST">
  41. <input type="hidden" name="MAX_FILE_SIZE" value="5000000"/>
  42. <input name="plik" type="file" />
  43. <br><br>
  44. <input type="submit" value="Wyślij plik" />
  45. </form>
  46. </div>
  47.  
  48. <?php
  49. $plik_tmp = $_FILES['plik']['tmp_name'];
  50. $plik_nazwa = $_FILES['plik']['name'];
  51. $plik_nazwa = str_replace(' ', '_', $plik_nazwa);
  52. $plik_rozmiar = $_FILES['plik']['size'];
  53.  
  54. if(is_uploaded_file($plik_tmp)) {
  55.    move_uploaded_file($plik_tmp, "upload/$plik_nazwa");
  56. ?>
  57. <center>
  58. <?php
  59. echo "Plik: <strong>$plik_nazwa</strong> o rozmiarze
  60. <strong>$plik_rozmiar bajtów</strong> został przesłany na serwer!";
  61. }
  62. ?>
  63. </body>
  64. </html>
  65.  
  66. </style>
  67.  
  68. <br><br>
  69.  
  70. <table border="1" align="center">
  71. <tr>
  72. <td width="100" height="50"><a href="./">Wróć</a></td>
  73. </tr>
  74. </table>
Brick
Musisz poczytać więcej na temat sesji (php.net)
Jaki błąd wywala? headers already sent...?
session_start() musi być wywołane zanim cokolwiek będzie printowane. Sesje odczytujesz z tablicy $_SESSION.
Czyli ogólny schemat:
Cytat
1. Formularz do logowania
2. Sprawdzenie poprawności hasła
3. Niepoprawne hasło: komunikat i powrót do formularza logującego
4. Poprawne hasło: zapisanie sesji i pokazanie formularza do wgrywania plików
5. Przed każdym wykonaniem skryptu odpowiedzialnego za upload sprawdzasz czy jest zapisana poprawna sesja. Jeżeli nie to -> formularz do logowania

Plik php.ini to plik konfiguracyjny dla PHP. Jeżeli masz zainstalowane php pod Windows to ten plik jest w katalogu PHP. W tym pliku modyfikujesz wszystkie ustawienia dla php.
W Twoim przypadku: upload_max_filesize = 64M
oznacza że maksymalny rozmiar to 64 MB

Ale jeżeli chcesz ten skrypt uruchomić na jakimś zewnętrznym serwerze to niestety najczęściej nie możesz tej wartości zmodyfikować. Także upload plików przez php jest na ogół ograniczony "odgórnie" przez administratora serwera.
kamil18
Dzięki Brick znalazłem to php.ini (mam KrasnalServ) i miałem ustawiony limit na 2MB. Jest jeszcze taka sprawa gdy chce przesłać plik co jest większy niż 8MB to wyskakuje:

Warning: POST Content-Length of 8444196 bytes exceeds the limit of 8388608 bytes in Unknown on line 0


a jak chce przesłać większy niż 2MB to nie wgrywa się bo jest tak w php.ini ustawione. Jak to wyczytałeś że 64MB??

Jak zmienić w skrypcie ten limit z 8MB na więcej?? Bo jak w php.ini ustawie 10M to i tak będę mógł tylko 8MB wysłać.

P.S

Udało mi się zrobić z tymi sesjami tylko że na stronie wywala mi błąd z session_start():





Jak zrobić żeby nie wywalało błędu w lini 10??
bim2
Co do php.ini pisałem Ci już wcześniej wystarczy czytać dokładnie...

Co do sesji, gdziesz przed <? masz spację, cokolwiek. Jakiś kod. session_start() musi być na samym POCZĄTKU.
scanner
PHP -> Przedszkole.

Drogi Autorze wątku, weźże poczytaj nieco o tym co chcesz zrobić, przejrzyj starsze watki na forum, zalicz kilka tutoriali, bo jak na razie widzę, ze wszyscy Cię tu ciagną na siłę w stronę rozwiązania, a Ty stawiasz wprost proporcjonalny do ciągnięcia opór.
Brick
Scanner dobrze napisał - nie da się programować poruszając się po omacku. Nawet gdy ktoś Ci wskaże drogę zaraz napotkasz kolejny problem i znowu będziesz pytał. Nie chodzi tu o jakąś niechęć czy "nadęcie mądrali" tylko każdy z doświadczenia wie, że jeżeli nie masz podstawowej wiedzy (zawartej chociażby na php.net) to nigdy nie ruszysz z miejsca.

W php.ini trzeba ustawić dwa parametry
post_max_size = 64M
upload_max_filesize = 64M

64M wpisałem ja, oryginalnie było 8M

Zanim zrobisz session_start() nie możesz wysłać nawet spacji. A najpopularniejszy błąd to taki kod:
  1. <HTML>
  2. <HEAD>tutaj wszystkie nagłówki</HEAD>
  3. <BODY>
  4. Witaj na mojej stronie
  5. <?php
  6. dalej leci kod...
  7. ?>

No i zdziwienie że przecież nie robię żadnego print przed session_start. Ten cały HTML na początku też się liczy.

Prawidłowo:
  1. <?php
  2. ?>
  3. <HTML>
  4. <HEAD>tutaj wszystkie nagłówki</HEAD>
  5. <BODY>
  6. Witaj na mojej stronie
  7. <?php
  8. tutaj jakiś dalszy kod php
  9. ?>
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.