Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Skrypt z datą.
Forum PHP.pl > Forum > Przedszkole
MagnuM
Witam!

Właściwie przygodę z php zacząłem niedawno i chciałem sprawdzić wkońcu swoje umiejętności.
Chciałem zbudować pierwszy złożony(az z dwóch plików biggrin.gif) skrypt generujący datę.

O to i mój przeznakomity skrypt któy generuje ale...błędy sad.gif


index.php
[php:1:21c2069939]<?

include("funkcje.php");

print("$data");

?>[/php:1:21c2069939]

funkcje.php
[php:1:21c2069939]<?

function data ($dzien $miesiac $rok)

{

$dzien = date("d");
$miesiac = date("m");
$rok ("Y");
$niezidentyfikowana = niezidentyfikowana;

switch($miesiac) {

case '1' : $miesiac = 'stycznia'; break;
case '2' : $miesiac = 'lutego'; break;
case '3' : $miesiac = 'marca'; break;
case '4' : $miesiac = 'kwietnia'; break;
case '5' : $miesiac = 'maja'; break;
case '6' : $miesiac = 'czerwca'; break;
case '7' : $miesiac = 'lipca'; break;
case '8' : $miesiac = 'sierpnia'; break;
case '9' : $miesiac = 'września'; break;
case '10' : $miesiac = 'października'; break;
case '11' : $miesiac = 'listopada'; break;
case '12' : $miesiac = 'grudnia'; break;
default: $miesiac = 'niezidentyfikowana'; break;

} }

if ($miesiac == niezidentyfikowana) {
print ("skrypt wygenerował niepoprawną datę");
} else {
print data("$dzien $miesiac $rok"); }
?>
[/php:1:21c2069939]

Mógłby mi ktoś przedstawić gdzie tkwi mój błąd smile.gif? Proszę tylko głośno się nie śmiać i nie krzyczeć smile.gif

Dziękuję za pomoc winksmiley.jpg

Pozdrawiam smile.gif
TomASS
najlepiej to napisz jakie błędy generuje
MagnuM
No pierwszy jaki generuje to:

Kod
Parse error: parse error, unexpected T_VARIABLE, expecting ')' in c:usrkrasnalwwwphpskrypty_mojedatafunkcje.php on line 3


Do następnych się dostać nie mogłem tongue.gif Bo jak tongue.gif

Pozdrawiam
Dawid Pytel
[php:1:5d75308bbe]<?php
function data ($dzien $miesiac $rok)
?>[/php:1:5d75308bbe]

Argumenty oddziel przecinkiem:

[php:1:5d75308bbe]<?php
function data ($dzien, $miesiac, $rok)
?>[/php:1:5d75308bbe]

przy wywolaniu funkcji także podaj argumenty po przecinku:

[php:1:5d75308bbe]<?php
data($dzien, $miesiac, $rok)
?>[/php:1:5d75308bbe]
Jojo
Nie:
[php:1:d427ceddc6]<?php
function data ($dzien $miesiac $rok)
?>[/php:1:d427ceddc6]
lecz:
[php:1:d427ceddc6]<?php
function data ($dzien, $miesiac, $rok)
?>[/php:1:d427ceddc6]
parametry funkcji mają być oddzielone przecinkami.

Zauważylem bląd w 9 linii. Jest tam:
[php:1:d427ceddc6]<?php
$rok ("Y");
?>[/php:1:d427ceddc6]
Ta linia też prawdopodobnie wygeneruje Parse Error, ale nie wiem jak ją poprawić, bo nie wiem co zamierzałeś w ten sposób osiągnąć.


Ponadto zupelnie nie rozumiem idei dzialania tej funkcji... ale to juz inna bajka winksmiley.jpg
MagnuM
Oki zrobiłem wszystko według Waszych zaleceń. Teraz nie wyświetla błędów, ale co najgorsze, nie wyświetla też daty sad.gif

index.php
[php:1:c48f5f782f]<?php
include("funkcje.php");

data($dzien, $miesiac, $rok)
?>[/php:1:c48f5f782f]


funkcje.php
[php:1:c48f5f782f]<?php
function data ($dzien, $miesiac, $rok)

{

$dzien = date("d");
$miesiac = date("m");
$rok = date("Y");
$niezidentyfikowana = niezidentyfikowana;

switch($miesiac) {

case '1' : $miesiac = 'stycznia'; break;
case '2' : $miesiac = 'lutego'; break;
case '3' : $miesiac = 'marca'; break;
case '4' : $miesiac = 'kwietnia'; break;
case '5' : $miesiac = 'maja'; break;
case '6' : $miesiac = 'czerwca'; break;
case '7' : $miesiac = 'lipca'; break;
case '8' : $miesiac = 'sierpnia'; break;
case '9' : $miesiac = 'września'; break;
case '10' : $miesiac = 'października'; break;
case '11' : $miesiac = 'listopada'; break;
case '12' : $miesiac = 'grudnia'; break;
default: $miesiac = 'niezidentyfikowana'; break;

} }

if ($miesiac == niezidentyfikowana) {
print ("skrypt wygenerował niepoprawną datę");
} else {
data($dzien, $miesiac, $rok); }
?>[/php:1:c48f5f782f]

Co do idei tejże funkcji to jest ona taka, że ten skrypcik się czasami przydaje. Będę mógł pisać wszystkie moje funkcje w jednym pliku. To chyba nie jest źle?
shpyo
NIE
[php:1:ba582c8a33]<?php
data($dzien, $miesiac, $rok)
?>[/php:1:ba582c8a33]
W pliku niezauwazylem abys deklarował zmiennych $dzien, $miesiac, $rok.
Mozesz zrobic tak:
[php:1:ba582c8a33]<?php
data(29, 2, 1995); //wprowadzic zwykle liczby biggrin.gif
/*lub gdzies na poczatku ZADEKLAROWAC ZMIENNE $dzien, $miesiac, $rok chociazby w formularzu i wtedy wywalac funkcje od tych zmiennych */
?>[/php:1:ba582c8a33]
Wtedy z fukcji wywalasz to:
[php:1:ba582c8a33]<?php
$dzien = date("d");
$miesiac = date("m");
$rok ("Y");
?>[/php:1:ba582c8a33]

BTW... po funkcji date() nie powinno byc srednika? ; <---
Jojo
shpyo: To, że funkcję wywołasz tak jak podałeś niczego nie zmieni. Zauważ, że w samej funkcji nie ma żadnego return, print, echo ani nic co mogłoby cokolwiek zwrócić (ew. wyświetlić).

MagnuM: Zmodyfikowałem lekko Twoją funkcję i wyszło mi coś takiego:
[php:1:e82611f064]<?php
function data( $time )
{

$miesiac = date( 'n', $time );

switch($miesiac)
{
case '1' :
return date( 'j', $time ).' stycznia '.date( 'Y', $time );
break;
case '2' :
return date( 'j', $time ).' lutego '.date( 'Y', $time );
break;
case '3' :
return date( 'j', $time ).' marca '.date( 'Y', $time );
break;
case '4' :
return date( 'j', $time ).' kwietnia '.date( 'Y', $time );
break;
case '5' :
return date( 'j', $time ).' maja '.date( 'Y', $time );
break;
case '6' :
return date( 'j', $time ).' czerwca '.date( 'Y', $time );
break;
case '7' :
return date( 'j', $time ).' lipca '.date( 'Y', $time );
break;
case '8' :
return date( 'j', $time ).' sierpnia '.date( 'Y', $time );
break;
case '9' :
return date( 'j', $time ).' września '.date( 'Y', $time );
break;
case '10' :
return date( 'j', $time ).' października '.date( 'Y', $time );
break;
case '11' :
return date( 'j', $time ).' listopada '.date( 'Y', $time );
break;
case '12' :
return date( 'j', $time ).' grudnia '.date( 'Y', $time );
break;
}
}
?>[/php:1:e82611f064]
Do powyższej fuinkcji podajesz znacznik czasu, a ona zwraca ciąg znaków postaci '10 czerwca 2004'. Używa się tego mniej-więcej tak:
[php:1:e82611f064]<?php
echo data( time() );
echo '<br>';
echo data( mktime( 0, 0, 0, 2, 8, 1983 ) );
?>[/php:1:e82611f064]
O funkcji [manual:e82611f064]time[/manual:e82611f064] i [manual:e82611f064]mktime[/manual:e82611f064] możesz poczytać w manualu. Jeśli używasz funkcji, a narazie widzę, że jeszcze nie do końca sobie radzisz, powinieneś poczytać o zasięgu zmiennych pod adresem: http://pl2.php.net/manual/pl/language.vari...ables.scope.php.
Anonymous
O raaany... od początku...

1. Każdy parametr funkcji musi być oddzielony przecinkiem
2. Nie wolno deklarować funkcji samej w sobie... czyli powinno być np. tak:

index.php
[php:1:56b2be58b9]<?php
include("functions.php");

// Wyświetlamy datę
date();
?>[/php:1:56b2be58b9]

functions.php
[php:1:56b2be58b9]<?php
function date()
{
// Deklarujemy zmienne $Dzien, $Miech i $Rok
$Dzien = gmdate("d");
$Miech = gmdate("m");
$Rok = gmdate("Y");


// Tworzymy tablicę z nazwami poszczególnych miesięcy (poczytaj o array)
$Miechy = array(1 => "stycznia",
2 => "lutego",
3 => "marca",
4 => "kwietnia",
5 => "maja",
6 => "czerwca",
7 => "lipca",
8 => "sierpnia",
9 => "wrzesnia",
10 => "pazdziernika",
11 => "listopada",
12 => "grudnia");

// Wyświetlamy datę z miesiącami pobranymi z $Miechy (poczytaj o tablicach)
echo 'Dzisiaj jest <b>'.$Dzien.' '.$Miechy[$Miech].' '.$Rok.'r.<br/>';
}
?>[/php:1:56b2be58b9]

i wtedy wyświetli np:

Dzisiaj jest 10 czerwca 2004r.


pozdrawiam...

Poczytaj manual php [ http://php.net ]
MagnuM
Oki, wielkie dzięki Jojo:)

Tylko jest jeszcze jedna zadziwiająca kwestia.

index.php
[php:1:fdbeea2605]<?php
include("funkcje.php");

echo data( time() );
echo '<br>';
data( mktime( 0, 0, 0, 2, 8, 1983 ) );
?>[/php:1:fdbeea2605]

Teraz gdy uruchamiam ten plik, data pokazuje się dwa razy, jedna pod drugą. Powoduje to include, a drugą date wyświetla echo.

Zaś gdy plik wygląda tak:

index.php
[php:1:fdbeea2605]<?php
include("funkcje.php");
?>[/php:1:fdbeea2605]

To data wyświetla sie tylko raz, czyli tak jak ma być.

Ale ja tu przewiduje taką rzecz, że gdy napisze w pliku funkcje więcej funkcji i w pliku index.php dam "include("funkcje.php");" to wyświetli mi tam wszystkie funkcje z pliku funkcje.php.

HELP

Pozdrawiam!
mike
Cytat
Ale ja tu przewiduje taką rzecz, że gdy napisze w pliku funkcje więcej funkcji i w pliku index.php dam "include("funkcje.php");" to wyświetli mi tam wszystkie funkcje z pliku funkcje.php.

Samo zaincludowanie pliku z funkcjami nie spowoduje ich wyświetlenia. Zresztą nie można wyświetlić funkcji. Można wyświetlić wynik działania funkcji.
Np. to nic nie pokaże:
[php:1:ea4d764090]
<?php
include( "funkcje.php" );
?>
[/php:1:ea4d764090]
Ale to już tak:
[php:1:ea4d764090]
<?php
include( "funkcje.php" );
echo data( mktime( 0, 0, 0, 2, 8, 1983 ) ); //użycie wersji autorstwa Jojo
?>
[/php:1:ea4d764090]
MagnuM
Oki ;-) Rozwikłałem mój problem dzięki Wam smile.gif Wielkie dzięki.
Jeszcze jedno wyjaśnienie.

@mike_mech

Sprawa wygląda tak, że jeżeli w pliku funkcje.php

na końcu dasz to:

funkcje.php
[php:1:ee867c2fb5]<?php
echo data(time() );
echo '<br>';
echo data( mktime( 0, 0, 0, 2, 8, 1983 ) );
?>[/php:1:ee867c2fb5]

i w pliku index.php dasz tak:

[php:1:ee867c2fb5]<?php
include( "funkcje.php" );
?>[/php:1:ee867c2fb5]

To wyświetli Ci dwa razy datę, jedna po drugiej. Wygląda na to że bierze ją z pliku funkcje i wyświetla na ekranie.

Ja mój problem rozwiązałem tak, że w pliku funkcje nie wyświetliłem daty.
Zrobiłem tak:

funkcje.php
[php:1:ee867c2fb5]<?php
data(time() );
data( mktime( 0, 0, 0, 2, 8, 1983 ) );
/* oczywiście jest to tylko końcówka pliku */
?>[/php:1:ee867c2fb5]

A sam plik index.php wyświetla datę dzięki funkcji data utworzonej w pliku funkcje.php...

index.php
[php:1:ee867c2fb5]<?php
include( "funkcje.php" );

print data( time() );
?>[/php:1:ee867c2fb5]

I teraz data jest elegancko wyświetlana tylko raz, czyli otrzymałem pożądny efekt.

Wielkie dzięki smile.gif

P.S. teraz ide poczytać to co mi oferował Jojo smile.gif

Pozdrawiam smile.gif
MagnuM
Oki, nastał czas na rozbudowę mojego wspaniałego skryptu.
Tym razem mialem zamiar dodać do niego funkcję która przedstawiałaby dzień słownie. Wszystko razem miało dawać efekt daty:
Piątek, 11. czerwca 2004
Oczywiście znowu mam jakieś problemy ze zrobieniem skryptu sad.gif

[php:1:6f18cb182e]index.php
<?php

include( "funkcje.php" );

print data(time() );
print "<br>";
print data2(time() );

?>[/php:1:6f18cb182e]

[php:1:6f18cb182e]funkcje.php
<?php

# funkcja wyświetlająca miesiąc - słownie

function data($time)
{

$miesiac = date('n', $time );

switch($miesiac)
{
case '1' :
return date( 'j.', $time ).' stycznia '.date( 'Y', $time );
break;
case '2' :
return date( 'j.', $time ).' lutego '.date( 'Y', $time );
break;
case '3' :
return date( 'j.', $time ).' marca '.date( 'Y', $time );
break;
case '4' :
return date( 'j.', $time ).' kwietnia '.date( 'Y', $time );
break;
case '5' :
return date( 'j.', $time ).' maja '.date( 'Y', $time );
break;
case '6' :
return date( 'j.', $time ).' czerwca '.date( 'Y', $time );
break;
case '7' :
return date( 'j.', $time ).' lipca '.date( 'Y', $time );
break;
case '8' :
return date( 'j.', $time ).' sierpnia '.date( 'Y', $time );
break;
case '9' :
return date( 'j.', $time ).' września '.date( 'Y', $time );
break;
case '10' :
return date( 'j.', $time ).' października '.date( 'Y', $time );
break;
case '11' :
return date( 'j.', $time ).' listopada '.date( 'Y', $time );
break;
case '12' :
return date( 'j.', $time ).' grudnia '.date( 'Y', $time );
break;
}
}

data(time() );
data( mktime( 0, 0, 0, 2, 8, 1983 ) );


/********************************************
********************************************/


# funkcja wyświetlajaca dzień - słownie

function data2($time)
{

$dzien = date('w', $time );

switch($dzien)
{
case'1' :
return 'Poniedziałek, '.date( 'j. ', $time).date( 'Y', $time);
break;
case'2' :
return 'Wtorek, '.date( 'j. ', $time).date( 'Y', $time);
break;
case'3' :
return 'Środa, '.date( 'j. ', $time).date( 'Y', $time);
break;
case'4' :
return 'Czwartek, '.date( 'j. ', $time).date( 'Y', $time);
break;
case'5' :
return 'Piątek, '.date( 'j. ', $time).date( 'Y', $time);
break;
case'6' :
return 'Sobota, '.date( 'j. ', $time).date( 'Y', $time);
break;
case'7' :
return 'Niedziela, '.date( 'j. ', $time).date( 'Y', $time);
break;
}
}

data2(time() );

?>[/php:1:6f18cb182e]

I teraz gdy włączam index.php to data prezentuje się tak:
11. czerwca 2004
Piątek, 11. 2004

Mógłby mi ktoś zmodyfikować skrypt aby był pożądany przezemnie efekt?
Przypominamm że chciałbym aby data wyglądała następująco:
Piątek, 11 czerwca 2004

Ta dolna oczywiście, to żeby nie było tej górnej to umiem zrobić smile.gif

Pozdrawiam!
Jojo
Teraz to kapkę namieszałeś winksmiley.jpg Moim zdaniem najłatwiej by było napisać jedną funkcję zwracającą całą datę w odpowiednim formacie.
[php:1:f1bc3ce311]<?php
function data( $time )
{

$miesiac = date( 'n', $time );
$dzien = date( 'w', $time );

switch( $miesiac ) // ustawiamy odpowiednią nazwę miesiąca
{
case '1' :
$nazwa_miesiaca = 'stycznia';
break;
case '2' :
$nazwa_miesiaca = 'lutego';
break;
case '3' :
$nazwa_miesiaca = 'marca';
break;
case '4' :
$nazwa_miesiaca = 'kwietnia';
break;
case '5' :
$nazwa_miesiaca = 'maja';
break;
case '6' :
$nazwa_miesiaca = 'czerwca';
break;
case '7' :
$nazwa_miesiaca = 'lipca';
break;
case '8' :
$nazwa_miesiaca = 'sierpnia';
break;
case '9' :
$nazwa_miesiaca = 'września';
break;
case '10' :
$nazwa_miesiaca = 'października';
break;
case '11' :
$nazwa_miesiaca = 'listopada';
break;
case '12' :
$nazwa_miesiaca = 'grudnia';
break;
}

switch( $dzien ) // ustawiamy odpowiednią nazwę dnia
{
case '1' :
$nazwa_dnia = 'Poniedziałek';
break;
case '2' :
$nazwa_dnia = 'Wtorek';
break;
case '3' :
$nazwa_dnia = 'Środa';
break;
case '4' :
$nazwa_dnia = 'Czwartek';
break;
case '5' :
$nazwa_dnia = 'Piątek';
break;
case '6' :
$nazwa_dnia = 'Sobota';
break;
case '7' :
$nazwa_dnia = 'Niedziela';
break;
}

return $nazwa_dnia.', '.date( 'j', $time ).'. '.$nazwa_miesiaca.' '.date( 'Y', $time );

}
?>[/php:1:f1bc3ce311]
Teraz w pliku, w którym chcesz wyświetlić datę wystarczy dać coś takiego:
[php:1:f1bc3ce311]<?php
include( "funkcje.php" );
echo data( time() );
?>[/php:1:f1bc3ce311]
A na koniec niespodzianka tongue.gif Męczyłeś się wystarczająco długo z tą funkcją, więc mogę pokazać Ci o wiele prostszy i łatwiejszy sposób na uzyskanie daty po polsku smile.gif Oto on:
[php:1:f1bc3ce311]<?php
$arrLocale = array( "pl_PL", "polish_pol", "pl_PL.ISO8859-2" );
setlocale( LC_ALL, $arrLocale );
echo strftime("%A, %d. %B %Y");
?>[/php:1:f1bc3ce311]
Jeśli chcesz więcej szczegółów na temat powyższego sposobu, to polecam artykuł: http://php.pl/index.php/phppl/artyku_y/pom...a_sprawa_polska oraz Manual php (funkcje [manual:f1bc3ce311]setlocale[/manual:f1bc3ce311] oraz [manual:f1bc3ce311]strftime[/manual:f1bc3ce311]).
MagnuM
Oki, bardzo fajnie, wszytsko działa.
Pierwszy jak i drugi sposób jest spoko winksmiley.jpg Teraz już wybiorę ten drugi bo jest 10 x krótszy smile.gif
Dzieki Jojo smile.gif

Pozdrawiam tongue.gif
party
Człowieku, po co się produkujesz? cool.gif

http://www.php.pl/index.php/phppl/artyku_y...a_sprawa_polska
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.