Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.


Użytkownik



Witam! mam taki skrypt wyciągajacy dane o podanej lini!
są dwa pola - Czyli podaje date od i date do. Tylko na ekran mi wyrzuca tylko te dwie linie a chodzi o to żeby wyswietlał mi dane od podanej daty do podanej daty.
czyli przypuszczalnie podam mu w jednym polu 2005.11.28 a w drugim 2006.01.28 i wyswietli mi dane od daty do daty
plik wyglada tak:
2005.11.28 534.00
2005.12.28 334.00
2006.01.28 234.00
2006.02.28 211.00
czyli na ekran w tym przypadku wyrzuci mi:
2005.11.28 534.00
2005.12.28 334.00
2006.01.28 234.00
skrypt wygląda tak:
<form action='index.php' method='post'>
<input type="text" name="f0" style="width: 9cm">
<br>
<input type="text" name="f1" style="width: 9cm">
<input type="submit" value="PODAJ DATĘ OD">
<br>
<br>
<?
if(!$_POST["f0"]) exit(0);
if(!$_POST["f1"]) exit(0);
$litera1 = $_POST["f0"];
$litera2 = $_POST["f1"];
$fd = fopen("/var/www/apache2-default/pliki/plik.txt", "r");
while (!feof ($fd)) {
$linia = fgets($fd, 95);
if(strpos($linia, $litera1) !== false)
echo $linia."<br>";
}
fclose($fd);
$fd = fopen("/var/www/apache2-default/pliki/plik.txt", "r");
while (!feof ($fd)) {
$linia1 = fgets($fd, 95);
if(strpos($linia1, $litera2) !== false)
echo $linia1."<br>";
}
fclose($fd);
?>
Offline

Użytkownik


Nie testowane:
list( $od['data'], $od['cos'] ) = explode( ' ', $_POST['f0'] );
list( $od['rok'], $od['miesiac'], $od['dzien'] ) = explode( '.', $od['data'] );
$od['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $od['miesiac'], $od['dzien'], $od['rok'] );
list( $do['data'], $do['cos'] ) = explode( ' ', $_POST['f1'] );
list( $do['rok'], $do['miesiac'], $do['dzien'] ) = explode( '.', $do['data'] );
$do['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $do['miesiac'], $do['dzien'], $do['rok'] );
$fd = fopen("/var/www/apache2-default/pliki/plik.txt", "r");
while (!feof ($fd)) {
$linia = fgets($fd, 95);
list( $data, $cos ) = explode( ' ', $linia );
list( $rok, $miesiac, $dzien ) = explode( '.', $data );
$czas = date( 'Y.m.d', mktime( 0, 0, 0, $miesiac, $dzien, $rok );
if ( ( $od['czas'] <= $czas ) && ( $czas <= $do['czas'] ) )
echo $linia."<br>";
}Offline


Użytkownik



Dziwna sprawa bo otrzymuje z góry na dół cos takiego :
Warning: mktime() expects parameter 6 to be long, string given in /var/www/apache2-default/lista/harm.php on line 30
aha a przed skryptem dodałem kod do wpisywania daty czyli:
<form action='harm.php' method='post'>
<input type="text" name="f0" style="width: 9cm">
<br>
<input type="text" name="f1" style="width: 9cm">
<input type="submit" value="PODAJ DATĘ OD">
był bys w stanie mi pomóc??
Offline


Użytkownik



Aha a plik dokładnie wygląda tak:
| 1 | 2005.11.28 Po | 534.00 | 78.71 | 612.71 | 12 466.00 |
| 2 | 2005.12.28 r | 542.00 | 87.20 | 629.20 | 11 924.00 |
| 3 | 2006.01.28 So | 542.00 | 85.95 | 627.95 | 11 382.00 |
| 4 | 2006.02.28 Wt | 542.00 | 82.17 | 624.17 | 10 840.00 |
| 5 | 2006.03.28 Wt | 542.00 | 17.67 | 559.67 | 10 298.00 |
| 6 | 2006.04.28 Pi | 542.00 | 19.56 | 561.56 | 9 756.00 |
| 7 | 2006.05.28 Ni | 542.00 | 18.93 | 560.93 | 9 214.00 |
Offline


Użytkownik



hmm sprawdziłem to i jeśli plik wygląda tak jak napisałem wcześniej to wszystko jest ok! wyswietla się idealnie. A gdy plik wygląda tak jak wyżej to da sie coś z tym zrobić??
Offline

Użytkownik


Nic dziwnego, że nie działało. Dla innej struktury coś takiego:
list( $od['data'], $od['cos'] ) = explode( ' ', $_POST['f0'] );
list( $od['rok'], $od['miesiac'], $od['dzien'] ) = explode( '.', $od['data'] );
$od['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $od['miesiac'], $od['dzien'], $od['rok'] );
list( $do['data'], $do['cos'] ) = explode( ' ', $_POST['f1'] );
list( $do['rok'], $do['miesiac'], $do['dzien'] ) = explode( '.', $do['data'] );
$do['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $do['miesiac'], $do['dzien'], $do['rok'] );
$fd = fopen("/var/www/apache2-default/pliki/plik.txt", "r");
while (!feof ($fd)) {
$linia = fgets($fd, 95);
list( , $data, , , , ) = explode( '|', $linia );
list( $rok, $miesiac, $dzien ) = explode( '.', $data );
list( $dzien, ) = explode( ' ', $dzien );
$czas = date( 'Y.m.d', mktime( 0, 0, 0, $miesiac, $dzien, $rok );
if ( ( $od['czas'] <= $czas ) && ( $czas <= $do['czas'] ) )
echo $linia."<br>";
}Offline


Użytkownik



No tak jest ok!! tylko na wstepie wyskakuje mi cos takiego:
Warning: mktime() expects parameter 6 to be long, string given in /var/www/apache2-default/pliki/harm.php on line 17
Warning: mktime() expects parameter 6 to be long, string given in /var/www/apache2-default/pliki/harm.php on line 21
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/pliki/harm.php on line 29
|2005.11.28 Po | 534.00 | 78.71 | 612.71 | 12 466.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/pliki/harm.php on line 29
|2005.12.28 śr | 542.00 | 87.20 | 629.20 | 11 924.00 |
itd w dół.
ale jak wpisze sobie daty to jest wporządku wyswietla mi od daty do daty czyli ok tylko czemu te komunikaty wyskakuja dodatkowo??
Offline



Administrator




Moim zdaniem to przez brak spacji w niektórych liniach, np:
|2005.11.28 Po | 534.00 | 78.71 | 612.71 | 12 466.00 |
^
explode działa po spacjach, nie ma spacji jako rok leci |2005.
Offline


Użytkownik



no plik wygląda tak jak mówiłem:
| 1 | 2005.11.28 Po | 534.00 | 78.71 | 612.71 | 12 466.00 |
| 2 | 2005.12.28 ˜r | 542.00 | 87.20 | 629.20 | 11 924.00 |
| 3 | 2006.01.28 So | 542.00 | 85.95 | 627.95 | 11 382.00 |
| 4 | 2006.02.28 Wt | 542.00 | 82.17 | 624.17 | 10 840.00 |
| 5 | 2006.03.28 Wt | 542.00 | 17.67 | 559.67 | 10 298.00 |
| 6 | 2006.04.28 Pi | 542.00 | 19.56 | 561.56 | 9 756.00 |
| 7 | 2006.05.28 Ni | 542.00 | 18.93 | 560.93 | 9 214.00 |
i wprawdzie z taka zawartością pliku dostaje po odpaleniu strony:
Warning: mktime() expects parameter 6 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 17
Warning: mktime() expects parameter 6 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 21
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 1 | 2005.11.28 Po | 534.00 | 78.71 | 612.71 | 12 466.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 2 | 2005.12.28 ?r | 542.00 | 87.20 | 629.20 | 11 924.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 3 | 2006.01.28 So | 542.00 | 85.95 | 627.95 | 11 382.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 4 | 2006.02.28 Wt | 542.00 | 82.17 | 624.17 | 10 840.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 5 | 2006.03.28 Wt | 542.00 | 17.67 | 559.67 | 10 298.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 6 | 2006.04.28 Pi | 542.00 | 19.56 | 561.56 | 9 756.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 7 | 2006.05.28 Ni | 542.00 | 18.93 | 560.93 | 9 214.00 |
a po wpisaniu dat:
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 1 | 2005.11.28 Po | 534.00 | 78.71 | 612.71 | 12 466.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 2 | 2005.12.28 ?r | 542.00 | 87.20 | 629.20 | 11 924.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 3 | 2006.01.28 So | 542.00 | 85.95 | 627.95 | 11 382.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 4 | 2006.02.28 Wt | 542.00 | 82.17 | 624.17 | 10 840.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 5 | 2006.03.28 Wt | 542.00 | 17.67 | 559.67 | 10 298.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 6 | 2006.04.28 Pi | 542.00 | 19.56 | 561.56 | 9 756.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 29
| 7 | 2006.05.28 Ni | 542.00 | 18.93 | 560.93 | 9 214.00 |
także już niewiem co może byc nie tak! wczesniej próbowałem wyrzucic ten początek ale jednak plik się tak generuje także niemoge go zmienić
Offline

Użytkownik


list( $od['data'], $od['cos'] ) = explode( ' ', $_POST['f0'] );
list( $od['rok'], $od['miesiac'], $od['dzien'] ) = explode( '.', $od['data'] );
$od['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $od['miesiac'], $od['dzien'], $od['rok'] );
list( $do['data'], $do['cos'] ) = explode( ' ', $_POST['f1'] );
list( $do['rok'], $do['miesiac'], $do['dzien'] ) = explode( '.', $do['data'] );
$do['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $do['miesiac'], $do['dzien'], $do['rok'] );
$fd = fopen("/var/www/apache2-default/pliki/plik.txt", "r");
while (!feof ($fd)) {
$linia = fgets($fd, 95);
list( , , $data, , , , , ) = explode( '|', $linia );
list( $rok, $miesiac, $dzien ) = explode( '.', $data );
list( $dzien, , ) = explode( ' ', $dzien );
$czas = date( 'Y.m.d', mktime( 0, 0, 0, $miesiac, $dzien, $rok );
if ( ( $od['czas'] <= $czas ) && ( $czas <= $do['czas'] ) )
echo $linia."<br>";
}PS. Numer wiersza z błędem nic nie mówi, jeśli nie wie się jaka to linia. Następnym razem wskaż, gdzie PHP się buntuje.
Offline


Użytkownik



No teraz smiga elegancko!:)
tylko prócz wyświetlonych danych pokazuje dalej ten błąd:
Warning: mktime() expects parameter 6 to be long, string given in /var/www/apache2-default/harmonogram/harm.php on line 17
w lini 17 i 29 a w tych liniach mam wpisy:
$do['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $do['miesiac'], $do['dzien'], $do['rok'] ));
i
$czas = date( 'Y.m.d', mktime( 0, 0, 0, $miesiac, $dzien, $rok ));
trzeba było nawias domknąć jeden to go domknęłem! ale dalej się pokazuje.
Offline
Użytkownik

Propozycja:
na moje okno jest cos nie tak ze zmienna $do['rok'] , sprawdz jaką ona przymuje wartosc...
Offline


Użytkownik



No niebardzo potrafie znaleść błąd jeśli chodzi o zmienną $do['rok']
Offline

Użytkownik


Tutaj jest cały, działający skrypt dla ciebie. Co było nie tak? Oprócz brakujących nawiasów (czego nie zauważyłem), był problem z funkcjami feof() oraz fgets(). Otóż funkcja feof() dla plików tekstowych zwraca TRUE, jeśli poprzedni odczyt fgets() zakończył się niepowodzeniem. Nie rozwlekając tematu, pętla wykonywała jeden nadmiarowy przebieg, stąd ten błąd na końcu.
<form action='index.php' method='post'>
<input type="text" name="f0" style="width: 9cm">
<br>
<input type="text" name="f1" style="width: 9cm">
<input type="submit" value="PODAJ DAT? OD">
<br>
<br>
<?
if(!$_POST["f0"]) exit(0);
if(!$_POST["f1"]) exit(0);
$litera1 = $_POST["f0"];
$litera2 = $_POST["f1"];
list( $od['data'], $od['cos'] ) = explode( ' ', $_POST['f0'] );
list( $od['rok'], $od['miesiac'], $od['dzien'] ) = explode( '.', $od['data'] );
$od['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $od['miesiac'], $od['dzien'], $od['rok'] ));
list( $do['data'], $do['cos'] ) = explode( ' ', $_POST['f1'] );
list( $do['rok'], $do['miesiac'], $do['dzien'] ) = explode( '.', $do['data'] );
$do['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $do['miesiac'], $do['dzien'], $do['rok'] ));
$fd = fopen("plik.txt", "r");
while (!feof ($fd)) {
$linia = fgets($fd, 95);
if ( feof( $fd ) ) break;
list( , , $data, , , , , ) = explode( '|', $linia );
list( $rok, $miesiac, $dzien ) = explode( '.', $data );
list( $dzien, , ) = explode( ' ', $dzien );
$czas = date( 'Y.m.d', mktime( 0, 0, 0, $miesiac, $dzien, $rok ));
echo $miesiac.' '.$dzien.' '.gettype($dzien).' '.$rok.'<br />';
if ( ( $od['czas'] <= $czas ) && ( $czas <= $do['czas'] ) )
echo $linia."<br>";
}Offline


Użytkownik



Rozumie:) tylko niewiem czy u mnie jest cos nie tak ale sprawa znów wygląda tak:
po odpaleniu strony jest wszystko ok! wpisuje daty i otrzymuje coś takiego:
11 28 string 2005
| 1 | 2005.11.28 Po | 534.00 | 78.71 | 612.71 | 12 466.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
12 28 string 2005
| 2 | 2005.12.28 �r | 542.00 | 87.20 | 629.20 | 11 924.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
01 28 string 2006
| 3 | 2006.01.28 So | 542.00 | 85.95 | 627.95 | 11 382.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
02 28 string 2006
| 4 | 2006.02.28 Wt | 542.00 | 82.17 | 624.17 | 10 840.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
03 28 string 2006
| 5 | 2006.03.28 Wt | 542.00 | 17.67 | 559.67 | 10 298.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
04 28 string 2006
| 6 | 2006.04.28 Pi | 542.00 | 19.56 | 561.56 | 9 756.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
05 28 string 2006
| 7 | 2006.05.28 Ni | 542.00 | 18.93 | 560.93 | 9 214.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
06 28 string 2006
| 8 | 2006.06.28 �r | 542.00 | 16.03 | 558.03 | 8 672.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
07 28 string 2006
| 9 | 2006.07.28 Pi | 542.00 | 15.15 | 557.15 | 8 130.00 |
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
08 28 string 2006
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
09 28 string 2006
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
string
10 28 string 2006
i tak dalej w dół z tego co widać wyświetla te linie dobrze bo od daty do daty którą podałem ale nierozumie tego błędu z mktime
Offline


Użytkownik



aha jeśli chodzi o linie 33 to jest znów ta sama sprawa:
$czas = date( 'Y.m.d', mktime( 0, 0, 0, $miesiac, $dzien, $rok ));
Offline

Użytkownik


Linię:
echo $miesiac.' '.$dzien.' '.gettype($dzien).' '.$rok.'<br />';
możesz wyrzucić, to była tylko kontrola. Widać dzięki temu, że w $dzien jest "28", czyli nie powinno byc problemu. Sprawdzałem skrypt, działa dobrze, nie wiem skąd u Ciebie te błędy.
Offline


Użytkownik



No problem dalej się pojawia! dziwna sprawa bo wszystko gra a niepotrzebnie wyswietla się ten komunikat!. Moze jest jakis skrypt dzieki któremu niewyswietli sie ten błąd czyli mimo to ze będzie niebędzie sie wyswietlała informacja o ni w oknie przeglądarki
Offline



Administrator




Dodaj na początku linie
error_reporting( E_ALL ^E_WARNING );
Offline


Dzięcioł



a jak Ci sie nie chce bawic z usuwaniem bledow to je zamaskoj za pomoca @ ;p
Offline


Użytkownik



powiedz mi tylko jak to zamaskować za pomocą @???
chyba że ma ktoś pomysł jak to rowiązać
Warning: mktime() expects parameter 5 to be long, string given in /var/www/apache2-default/harmonogram/index.php on line 33
wydaje mi się że kod jest dobry problem będzie w czymś innym niewiem może musze zoribć jakiegoś update??
Offline


Dzięcioł



poprostu dajes @ tam gdzie masz blad, czyli jak masz w linii 36 to jedziesz do linii 36 i wstawiasz @ na poczatku linii i tyle :)
Offline


Użytkownik



Nooooooo niemogee jest spoko!! @ pomogła i wszystko jest ok!!! dziekówka wielka:)
Offline


Dzięcioł



ja zawsze powtarzam: najleprze sa najprosztrze rozwiazania ;)
Offline


Użytkownik



Jeszcze tylko taka sprawa! te linie które mi wyświetla od podanej daty do podanej daty chciałbym prócz wyswietlenia zapisać do pliku. Zrobiłem coś takiego:
if(!$_POST["f0"]) exit(0);
if(!$_POST["f1"]) exit(0);
$litera1 = $_POST["f0"];
$litera2 = $_POST["f1"];
list( $od['data'], $od['cos'] ) = explode( ' ', $_POST['f0'] );
list( $od['rok'], $od['miesiac'], $od['dzien'] ) = explode( '.', $od['data'] );
$od['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $od['miesiac'], $od['dzien'], $od['rok'] ));
list( $do['data'], $do['cos'] ) = explode( ' ', $_POST['f1'] );
list( $do['rok'], $do['miesiac'], $do['dzien'] ) = explode( '.', $do['data'] );
$do['czas'] = date( 'Y.m.d', mktime( 0, 0, 0, $do['miesiac'], $do['dzien'], $do['rok'] ));
$fd = fopen("/var/www/apache2-default/pliki/plik.txt", "r");
while (!feof ($fd)) {
$linia = fgets($fd, 95);
if ( feof( $fd ) ) break;
list( , , $data, , , , , ) = explode( '|', $linia );
list( $rok, $miesiac, $dzien ) = explode( '.', $data );
list( $dzien, , ) = explode( ' ', $dzien );
@ $czas = date( 'Y.m.d', mktime( 0, 0, 0, $miesiac, $dzien, $rok ));
if ( ( $od['czas'] <= $czas ) && ( $czas <= $do['czas'] ) )
$file = "dane.txt";
$fp = fopen($file, "a");
fwrite($fp, "$linia");
fclose($fp);
}
i ok zapisuje mi do pliku ale wszystkie linie a nie tylko te które podaje. Jest mi ktoś w stanie wytłumaczyc dlaczego tak sie dzieje??/ przecież zmienna $linia wyswietla dokładnie te linie które podaje za pomocą dat a do pliku zapisuje mi wszystkie.
Offline