Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]2 problemy, instrukcja warunkowa i download plików
Forum PHP.pl > Forum > Przedszkole
pikko
Witam.
Więc jak w temacie mam 2 problemy jeden mały drugi taki większy:)

Tak więc mam taki kawalek kodu:
  1. $file_name= stripslashes($plik_nazwa);
  2. $name = $file_name;
  3. $rozszerzenie = explode(".",$name);
  4. $cnt = count($rozszerzenie);
  5. if ($rozszerzenie[$cnt-1] != 'txt' || 'doc' || 'rar' || 'zip') {
  6. echo "Niedozwolony format pliku";
  7. }
  8. else{
  9. (....................)

i zawsze wyskakuje mi "Niedozwolony format pliku"
więc problem jest z tym ifem, gdyż gdy dam tak:
  1. if ($rozszerzenie[$cnt-1] != 'txt')

to działa poprawnie.


A drugim problemem jest download plików, tak aby po kliknięciu w przycisk "Pobierz" wyskakiwało to okienko z pobieraniem.
Przeszukałem google i znalazłem jakieś skrypty ale niestety nie za bardzo je rozumiem, więc mija się to z celem.
wiem, że coś z nagłówkami i funkcja readfile(); ale wolałbym jakby mi to ktoś po polsku wytłumaczyłbiggrin.gif
z góry dziękuje.

evolucja
aby ten if zadziałał musisz go sformułować w ten sposób:
  1. if ($rozszerzenie[$cnt-1] != 'txt' || $rozszerzenie[$cnt-1] != 'doc' || $rozszerzenie[$cnt-1] != 'rar' || $rozszerzenie[$cnt-1] != 'zip') {


drobna uwaga co do tego:
  1. $file_name= stripslashes($plik_nazwa);
  2. $name = $file_name;

nie można tak?
  1. $name= stripslashes($plik_nazwa);


Co do pobierania, spróbuj tak:
  1. $name = "nazwa pliku";
  2. header("Content-type: application/octet-stream");
  3. header("Content-Disposition: attachment; filename=$name");
  4. header('Location: [http://www.adres_strony.pl/pliki/]' . $name);

pikko
Cytat(evolucja @ 24.04.2010, 11:54:49 ) *
aby ten if zadziałał musisz go sformułować w ten sposób:
  1. if ($rozszerzenie[$cnt-1] != 'txt' || $rozszerzenie[$cnt-1] != 'doc' || $rozszerzenie[$cnt-1] != 'rar' || $rozszerzenie[$cnt-1] != 'zip') {



dalej nie działa;/ już chyba próbowałem na wszystkie sposoby i dalej nic, nie mam pojęcia co z tym jest nie tak..
cros
Cytat(pikko @ 24.04.2010, 12:26:10 ) *
dalej nie działa;/ już chyba próbowałem na wszystkie sposoby i dalej nic, nie mam pojęcia co z tym jest nie tak..


a tak?
Kod
if (($rozszerzenie[$cnt-1] != 'txt') || ($rozszerzenie[$cnt-1] != 'doc') || ($rozszerzenie[$cnt-1] != 'rar') || ($rozszerzenie[$cnt-1] != 'zip'))


Teraz dopiero zauwazylem, wiesz ze "||" to jest OR ?
A nie trzeba czasami tu uzyc "&&" czyli AND ?
Bo tak to ten if zawsze jest spelniony...
pikko
tak wiem,
chodzi mi o to, żeby skrypt sprawdzał jakie jest rozszerzenie pliku, i jeśli jest txt,doc,rar,zip to zapisywał go na serwerze, a jeśli nie to zwracał błąd a AND to to musiałby spełniać wszystkie te warunki co jest raczej nie możliwe ;|
cros
Cytat(pikko @ 24.04.2010, 12:58:28 ) *
tak wiem,
chodzi mi o to, żeby skrypt sprawdzał jakie jest rozszerzenie pliku, i jeśli jest txt,doc,rar,zip to zapisywał go na serwerze, a jeśli nie to zwracał błąd a AND to to musiałby spełniać wszystkie te warunki co jest raczej nie możliwe ;|

To chyba sie nie rozumiemy.
Skoro dajesz "!=" czyli nierownosci, to AND w if spelni warunki, wtedy kiedy plik nie bedzie mial zadnego z tych rozszerzen, czyli wyswietli ze plik jest zly.
Przetlumacze ci to na polski winksmiley.jpg
"Jesli $plik nie bedzie rowny "txt" i nie bedzie rowny "exe" i nie bedzie rowny "doc", wtedy komunikat "zle rozszerzenie pliku - else - zapisz plik" biggrin.gif
Czyli chyba o to ci chodzi.
thek
Coś w stylu:
  1. if( !in_array( $rozszerzenie[$cnt-1], array('txt', 'doc', 'rar' ) ) )
?
Ja bym na Twoim miejscu sprawdził co właściwie $rozszerzenie[$cnt-1] zawiera smile.gif Może coś innego niż myślisz i wtedy działa nieoczekiwanie.
cros
del
pikko
$rozszerzenie[$cnt-1] wyswietla txt, sprawdzalem smile.gif

ale jeśli jest lepsze rozwiązanie mojego problemu chętnie przyjmę propozycje:D

Cytat(thek @ 24.04.2010, 13:07:47 ) *
Coś w stylu:
  1. if( !in_array( $rozszerzenie[$cnt-1], array('txt', 'doc', 'rar' ) ) )
?
Ja bym na Twoim miejscu sprawdził co właściwie $rozszerzenie[$cnt-1] zawiera smile.gif Może coś innego niż myślisz i wtedy działa nieoczekiwanie.



ok, działa dzięki wielkie:D

to jeszcze musze ten download zrobić,

to co podałeś sciąga mi sie txt ale na końcu dodaje treść strony ;/
cros
Cytat(pikko @ 24.04.2010, 13:13:08 ) *
$rozszerzenie[$cnt-1] wyswietla txt, sprawdzalem smile.gif

ale jeśli jest lepsze rozwiązanie mojego problemu chętnie przyjmę propozycje:D


mowie ci zmien "||" na "&&" i bedzie dobrze, ale skoro nie chcesz sluchac to trudno, twoja sprawa.
Popatrz na tego swojego if'a i skumaj wkoncu ze on zawsze bedzie spelniony, stad masz komunikat bledu, nawet jak rozszerzenie jest txt.
Uparty jestes widze.
pikko
a i faktycznie z andami dziala tez, nie wiem czemu ja tam or widzialem;/
sorry wielkie, moj blad.


nie uparty, tylko wolno kontaktuje czasami smile.gif
cros
Cytat(pikko @ 24.04.2010, 13:21:10 ) *
a i faktycznie z andami dziala tez, nie wiem czemu ja tam or widzialem;/
sorry wielkie, moj blad.

Z OR ten if mialby sens dopiero wtedy gdybys zamiast znaku nierownosci (!=), uzyl rownosci (==) , a komunikat bledy dal bys po else winksmiley.jpg
Kod
if ($plik=="txt" || $plik=="doc" || $plik=="exe") { ...zapisz... } else { ..blad... }

Najwazniejsze ze juz sobie poradziles.
thek
Cros... Jeśli nie wiesz jak działa in_array i upierasz się na && lub || to zobacz może w manualu jak działa podana przeze nie funkcja. Jeśli nie to w skrócie opiszę:
in_array( szukana_rzecz, tablica_wartości )
Zwraca true jeśli szukana_rzecz znajduje się wewnątrz tablica_wartości.

To po jaką cholerę stosować zapis
  1. if( szukana_rzecz == 'a' || szukana_rzecz == 'b' || szukana_rzecz == 'c' )
skoro można użyć =>
  1. if( in_array(szukana_rzecz, array('a', 'b', 'c') ) )
?
A jeśli nie ma sę znajdować to można użyć negacji i wtedy zamiast:
  1. if( szukana_rzecz != 'a' && szukana_rzecz != 'b' && szukana_rzecz != 'c' )
skoro można użyć =>
  1. if( !in_array(szukana_rzecz, array('a', 'b', 'c') ) )

A gdy tych rozszerzeń zrobi się 30 to wyobrażasz sobie takiego if ogromnego? Ja wtedy zrobię zapis jako:
  1. $allowed = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u');
  2. if( !in_array( $szukany, $allowed ) )
Prostsze, wygodniejsze i o niebo prostsze do poprawek smile.gif
cros
Cytat(thek @ 24.04.2010, 13:31:08 ) *
Cros... Jeśli nie wiesz jak działa in_array i upierasz się na && lub || to zobacz może w manualu jak działa podana przeze nie funkcja. Jeśli nie to w skrócie opiszę:
in_array( szukana_rzecz, tablica_wartości )
Zwraca true jeśli szukana_rzecz znajduje się wewnątrz tablica_wartości.

To po jaką cholerę stosować zapis
  1. if( szukana_rzecz == 'a' || szukana_rzecz == 'b' || szukana_rzecz == 'c' )
skoro można użyć =>
  1. if( in_array(szukana_rzecz, array('a', 'b', 'c') ) )
?
A jeśli nie ma sę znajdować to można użyć negacji i wtedy zamiast:
  1. if( szukana_rzecz != 'a' && szukana_rzecz != 'b' && szukana_rzecz != 'c' )
skoro można użyć =>
  1. if( !in_array(szukana_rzecz, array('a', 'b', 'c') ) )

A gdy tych rozszerzeń zrobi się 30 to wyobrażasz sobie takiego if ogromnego? Ja wtedy zrobię zapis jako:
  1. $allowed = array('a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u');
  2. if( !in_array( $szukany, $allowed ) )
Prostsze, wygodniejsze i o niebo prostsze do poprawek smile.gif

Nie upieram sie, poprostu probowalem mu wytlumaczyc dlaczego mu to nie dzialalo, przynajmniej teraz bedzie wiedzial w czym tkwil blad.
Pewnie ze rozwiazanie z arrayem jest lepsze, bardziej przejrzyste i latwiej dodawac kolejne rozszerzenia.
Nie twierdzilem ze moj sposob jest lepszy, tylko probowalem wytlumaczyc, czemu mu to nie dzialalo - ok powtarzam sie biggrin.gif
pikko
dzięki wielkie raz jeszcze:)
bo ja go rozumiałem tak:
jeśli $rozszerzenie[$cnt-1] nie równa się 'txt' lub nie równa się 'doc' lub(...)
to wtedy wywal błąd, i wydawało mi się to poprawne..

a co do tego downloadu, pliki rar,doc ściąga poprawnie, tylko te txt nie trybi

-----------------------------
spokojnie spokojnie nie ma powodów do kłótni:D

użyłem inarray, bo wydaje mi się także, że to tak bardziej przejrzyście wygląda smile.gif
no i to także nowo poznana funkcja do kolekcji, że tak powiem:)
thek
Cros... Ja przecież nie wyskoczyłem na Ciebie ani nie chciałem kłócić. Zwyczajnie poinformowałem, że w manualu jest fajna funkcja pozwalająca uprościć powtarzanie mnóstwa warunków. Wytłumaczyłem jak działa i podałem przykłady związane z wątkiem. Na nikogo nie wyskakiwałem smile.gif
cros
Cytat(thek @ 24.04.2010, 15:37:47 ) *
Cros... Ja przecież nie wyskoczyłem na Ciebie ani nie chciałem kłócić. Zwyczajnie poinformowałem, że w manualu jest fajna funkcja pozwalająca uprościć powtarzanie mnóstwa warunków. Wytłumaczyłem jak działa i podałem przykłady związane z wątkiem. Na nikogo nie wyskakiwałem smile.gif

Wcale nie poczulem sie obrazony i bardzo dobrze ze napisales o tej funkcji, bo jest lepszym rozwiazaniem smile.gif
Moze cos zle napisalem, ze wygladalo na focha,ale nie mialem takiego zamiaru winksmiley.jpg
Pozdrawiam

pikko
ok z downloadem już Sobie poradziłem:)

pozdrawiam.
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.