skrypt imieninowy mający problem z przełomem miesiąca

skrypt imieninowy mający problem z przełomem miesiąca
IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
1

witam,

używam skryptu imieninowego, ktory wygląda mnie więcej tak (fragment)

Kopiuj
<?php

$imieniny[1][5] = "Edwarda, Hanny, Szymona";
$imieniny[1][6] = "Kacpra, Melchiora, Baltazara";

$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

echo "".$imieniny[date("n",time())][date("j",time())];

?>

działa ok, chciałem go przerobić aby pobierał imieniny na dzień następny i przyciął się na przełomie miesiąca, wiem dlaczego, ale nie wiem jak to poprawić, aby się nie przycinał, jutro jak zacznie się luty pewnie będzie działał dobrze do przełomu miesiąca 🙁

Kopiuj
<?php

$imieniny[1][5] = "Edwarda, Hanny, Szymona";
$imieniny[1][6] = "Kacpra, Melchiora, Baltazara";

$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

echo "".$imieniny[date("n",time())][date("j",time())+1];

?>

jak to ogarnąć żeby się nie przycinał w ostatnim dniu miesiąca, co zmienić? - proszę o pomoc ;)

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
2

Problem polega na tym, że jeśli akurat jest 31 lipca (będący w tablicy $imieniny[7][31]), to po prostu zwiększenie dnia o 1 spróbuje odczytać pole $imieniny[7][32].

Widzę kilka sposobów:

  1. Przerób tablice tak żeby nie była rozróżniona na dni i miesiące, tylko zeby po prostu trzymała listę 365/366 dni, pierwszy stycznia w 0, drugi stycznia w 1, trzeci stycznia w 2, ..., trzydziesty styczna w 30, pierwszy lutego w 31, drugi lutego w 32. Wtedy nie ma problemu ze zwiększaniem dnia.
  2. Przerób kod zmiany dnia tak, żeby zmienił 7.31 nie na 7.32 tylko na 8.1. Można to zrobić na kilka sposobów.
Kopiuj
$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('m');
$tomorrowDay = $tomorrowDate->format('d');

echo $imieniny[$tomorrowMonth][$tomorrowDay];
IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0
Riddle napisał(a):

Problem polega na tym, że jeśli akurat jest 31 lipca (będący w tablicy $imieniny[7][31]), to po prostu zwiększenie dnia o 1 spróbuje odczytać pole $imieniny[7][32].

Widzę kilka sposobów:

  1. Przerób tablice tak żeby nie była rozróżniona na dni i miesiące, tylko zeby po prostu trzymała listę 365/366 dni, pierwszy stycznia w 0, drugi stycznia w 1, trzeci stycznia w 2, ..., trzydziesty styczna w 30, pierwszy lutego w 31, drugi lutego w 32. Wtedy nie ma problemu ze zwiększaniem dnia.
  2. Przerób kod zmiany dnia tak, żeby zmienił 7.31 nie na 7.32 tylko na 8.1. Można to zrobić na kilka sposobów.
Kopiuj
$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('m');
$tomorrowDay = $tomorrowDate->format('d');

echo $imieniny[$tomorrowMonth][$tomorrowDay];

w tej wersji zadziałało ;) - dziękuję za pomoc!!!!!

Kopiuj
$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

// sprawdza czy istnieją imieniny dla jutra
if (isset($imieniny[$tomorrowMonth][$tomorrowDay])) {
    echo $imieniny[$tomorrowMonth][$tomorrowDay];
} else {
    echo "Jutro nie ma imienin. ;)";
}
IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0
ikp-php3 napisał(a):
Riddle napisał(a):

Problem polega na tym, że jeśli akurat jest 31 lipca (będący w tablicy $imieniny[7][31]), to po prostu zwiększenie dnia o 1 spróbuje odczytać pole $imieniny[7][32].

Widzę kilka sposobów:

  1. Przerób tablice tak żeby nie była rozróżniona na dni i miesiące, tylko zeby po prostu trzymała listę 365/366 dni, pierwszy stycznia w 0, drugi stycznia w 1, trzeci stycznia w 2, ..., trzydziesty styczna w 30, pierwszy lutego w 31, drugi lutego w 32. Wtedy nie ma problemu ze zwiększaniem dnia.
  2. Przerób kod zmiany dnia tak, żeby zmienił 7.31 nie na 7.32 tylko na 8.1. Można to zrobić na kilka sposobów.
Kopiuj
$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('m');
$tomorrowDay = $tomorrowDate->format('d');

echo $imieniny[$tomorrowMonth][$tomorrowDay];

w tej wersji zadziałało ;) - dziękuję za pomoc!!!!!

Kopiuj
$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

// sprawdza czy istnieją imieniny dla jutra
if (isset($imieniny[$tomorrowMonth][$tomorrowDay])) {
    echo $imieniny[$tomorrowMonth][$tomorrowDay];
} else {
    echo "Jutro nie ma imienin. ;)";
}

ten fragment sprawdzający czy są imieniny, jednak musi wyglądać inaczej 😉

Kopiuj
if (array_key_exists($tomorrowMonth, $imieniny)) {
    $imieninyJutro = $imieniny[$tomorrowMonth];
    if (array_key_exists($tomorrowDay, $imieninyJutro)) {
        $imieninyJutroValue = $imieninyJutro[$tomorrowDay];
        if ($imieninyJutroValue !== "") {
            echo $imieninyJutroValue;
        } else {
            echo "Jutro nie ma imienin.";
        }
    } else {
        echo "Jutro nie ma imienin.";
    }
} else {
    echo "Jutro nie ma imienin.";
}
Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0

@ikp-php3 Rozważ wyniesienie tej części kodu do funkcji.

IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0
Riddle napisał(a):

@ikp-php3 Rozważ wyniesienie tej części kodu do funkcji.

za mało wiem o php - żeby za bardzo kombinować, ze zmianami zadziałało nawet jeżeli jest puste miejsce w tabeli to wyświetla komunikat o braku, - ostatn fragment oczywiście podmieniłem ;)

dziekuję jeszcze raz za pomoc, bez Ciebie nie ruszyłoby 😀

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
ikp-php3 napisał(a):
Riddle napisał(a):

@ikp-php3 Rozważ wyniesienie tej części kodu do funkcji.

Wklej cały kod tutaj, zobaczymy co da się zrobić 😉

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3580
0

A po co Ci tyle ifów i elsów? No i w nazewnictwie w kodzie najlepiej używać angielskiego, jak muszisz może być polski. Ale nie mieszaj języków.

Kopiuj
if (array_key_exists($tomorrowMonth, $imieniny)) {
    $imieninyJutro = $imieniny[$tomorrowMonth]; // Dlaczego przypisujesz do zmiennej całą tablicę miesiąca? Ma to sens?
    //Potem to możesz niechcący próbować printować i będziesz miał błąd 
    if (array_key_exists($tomorrowDay, $imieninyJutro)) {
        $imieninyJutroValue = $imieninyJutro[$tomorrowDay];
        if ($imieninyJutroValue !== "") { // dlaczego sprawdzasz, czy string pusty? Możesz mieć takie dane w tablicy z imieninami?
            echo $imieninyJutroValue;
        } else {
            echo "Jutro nie ma imienin."; // Powtarzasz ten else 3 razy z tym samym tekstem
        }
    } else {
        echo "Jutro nie ma imienin.";
    }
} else {
    echo "Jutro nie ma imienin.";
}

Czy rozwiązenie z isset($imieniny[$tomorrowMonth][$tomorrowDay]) nie wystarczyło?
Może opisz dokładniej problem i błędy? Jak chcesz wyświetlać imieniny tylko i masz poprawną bazę to nawet i isset nie powinno być potrzebne. Isset sprawdza czy zmienna istniej. W przypadku tablicy czy istnieje jej klucz

Kopiuj
<?php
$arr = []; // inicjalizacja pustej tablicy
$arr['klucz'] = 'wartosc';
var_dump(isset($arr['klucz'])); // sprawdzamy czy jest ustawiona
var_dump(isset($arr['kluczNieistniejacy'])); // sprawdzamy czy jest ustawiona
var_dump(isset($arr['kluczNieistniejacy']['podklucz']['podkluczPodklucza'])); // sprawdzamy czy jest ustawiona

//Output
//bool(true)
//bool(false)
//bool(false)
IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

skrypt wygląda teraz tak, wiem, że źle, ale działa (oczywiście bez całej tablicy) ;)

Kopiuj
<?php

$imieniny[1][30] = "Martyny, Macieja, Teofila";
$imieniny[1][31] = "Joanny, Ksawerego, Luizy";

$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";

$imieniny[12][30] = "Eugeniusza, Katarzyny, Sabiny";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

// sprawdza czy istnieją imieniny dla jutra
if (array_key_exists($tomorrowMonth, $imieniny)) {
    $imieninyJutro = $imieniny[$tomorrowMonth];
    if (array_key_exists($tomorrowDay, $imieninyJutro)) {
        $imieninyJutroValue = $imieninyJutro[$tomorrowDay];
        if ($imieninyJutroValue !== "") {
            echo $imieninyJutroValue;
        } else {
            echo "Jutro nie ma imienin.";
        }
    } else {
        echo "Jutro nie ma imienin.";
    }
} else {
    echo "Jutro nie ma imienin.";
}
?>&nbsp;

po mnie nie ma co się spodziewać cudów ;) :(
fakt else jest sporo ;)

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3580
0

Powinno wystarczyć:

Kopiuj
if(isset($imieniny[$tomorrowMonth][$tomorrowDay])) {
    echo $imieniny[$tomorrowMonth][$tomorrowDay];
}
else {
    echo "nie ma";
}

No I jak masz jakieś warunki które mają zadziałać oba na raz, bo ich efekt będzie taki sam, możesz je złączyć.
Np. Jak jeszcze chciałbyś sprawdzić czy jednak string nie jest pusty.

Kopiuj
if(isset($imieniny[$tomorrowMonth][$tomorrowDay]) AND $imieniny[$tomorrowMonth][$tomorrowDay] !== "") {
//wykonaj
}
else{
// wykonaj dla warunków nie spełnionych
}
obscurity
  • Rejestracja: dni
  • Ostatnio: dni
0

W ogóle nie musisz tego sprawdzać bo codziennie są imieniny. Jak raz napiszesz dobrze kod to nie musisz mieć żadnych checków, błąd może tylko oznaczać że kod jest do poprawy

IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

"obscurity" o to sprawdzenie chodzi mi, bo wykorzystuję to też do świąt, które uzupełniam co jakiś czas, więc to pomoże ;)

"jurek..." wymazałem 1 lutego z tablicy i nie wyświetlił komunikatu, że nie ma komunikatu "nie ma" :(

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3580
1

Pewnie gdzieś masz błąd w składni.

Kopiuj
<?php

$imieniny[1][30] = "Martyny, Macieja, Teofila";
$imieniny[1][31] = "Joanny, Ksawerego, Luizy";

//$imieniny[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$imieniny[2][2] = "Kornela, Marii, Mirosławy";

$imieniny[12][30] = "Eugeniusza, Katarzyny, Sabiny";
$imieniny[12][31] = "Mariusza, Melanii, Sylwestra";

$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

if(isset($imieniny[$tomorrowMonth][$tomorrowDay])) {
    echo $imieniny[$tomorrowMonth][$tomorrowDay];
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}

https://onlinephp.io/c/629a2

IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

Twój skrypt jest oczywiście ok, jak nie ma w ogóle 1 lutego

jednak u mnie jeżeli jest pusty dzień to wygląda tak:

Kopiuj
$imieniny[2][1] = "";

i dlatego pewnie nie wyświetla tego komunikatu

ale pomijają ten fakt komunikat jest OK 😉

to sprawdza ten nieszczęsny if

Kopiuj
if ($imieninyJutroValue !== "") {
            echo $imieninyJutroValue;

ale jak to wkleić do Ciebie nie mam pojęcia :(

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3580
0

Tutaj opisałęm Ci jak łączyć warunki:
skrypt imieninowy mający problem z przełomem miesiąca
W tym wypadku masz sprawdzić "czy klucz istnieje" ORAZ "czy nie jest pustym stringiem". Dodatkowo PHP ma taką funkcję empty(), której tu też możesz użyć zamiast porównywać czy napis jest pusty poprzez !==
Spróbuj to napisać sam i jeśli nie będzie działać wklej cały kod. Myślę jednak, że zadziała.

BTW, taki przypadek, że masz pusty napis w imenininach nie powinien chyba wystąpić?

IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

to działa jak wersja "barokowa" 😉

Kopiuj
if(isset($imieniny[$tomorrowMonth][$tomorrowDay]) AND $imieniny[$tomorrowMonth][$tomorrowDay] !== "") {
//wykonaj
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}

oczywiście BARDZO dziękuję :)

obscurity
  • Rejestracja: dni
  • Ostatnio: dni
0
ikp-php3 napisał(a):

to działa jak wersja "barokowa" 😉

Kopiuj
if(isset($imieniny[$tomorrowMonth][$tomorrowDay]) AND $imieniny[$tomorrowMonth][$tomorrowDay] !== "") {
//wykonaj
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}

oczywiście BARDZO dziękuję :)

jak wyżej wspomniano istnieje funkcja empty do tego celu https://www.php.net/manual/en/function.empty.php

empty() is essentially the concise equivalent to !isset($var) || $var == false

ten sam kod może być zapisany jako

Kopiuj
if(!empty($imieniny[$tomorrowMonth][$tomorrowDay])) {
//wykonaj
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}
IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

zgadza się (obie recepty działają) natomiast, tak zajęliśmy się piciem z innej okazji, że jak wstawiłem imieniny te co były to ich nie wyświetla 🙁

IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0
Kopiuj
$currentDate = new DateTime();
$tomorrowDate = $currentDate->modify('+1 day');
$tomorrowMonth = $tomorrowDate->format('n'); // 'n' zamiast 'm'
$tomorrowDay = $tomorrowDate->format('j'); // 'j' zamiast 'd'

// sprawdza czy istnieją imieniny dla jutra
if(!empty($imieniny[$tomorrowMonth][$tomorrowDay])) {
//wykonaj
}
else {
    echo "nie ma imienin, dzis pijemy z innej okazji";
}

jak nie ma dnia, albo jest pusty to komunikat jest wyświetlany, natomiast jak wstawi sie imieniny to komunikat znika, a imona nie pokazują się :(

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3580
0

//wykonaj - to komentarz. Pomaga czytać ze zrozumieniem ale nie wykonuje żadnej funkcji.
Tak łatwiej pisać przykłady i opisywać problem.
Tu musisz zrobić echo, jak było wcześniej.

IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

jak widać z tym zrozumieniem było cos nie tak ;) - skrypt działa jak trza ;) - dziękuję

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
ikp-php3 napisał(a):

po mnie nie ma co się spodziewać cudów ;) :(
fakt else jest sporo ;)

Co powiesz na coś takiego?

Kopiuj
<?php

$today = new DateTime();
$tomorrow = $today->modify('+1 day');

$todayNameDay = namesByNameDay($today);
$tomorrowNameDay = namesByNameDay($tomorrow);

if ($todayNameDay) {
    echo "Imieniny mają $todayNameDay";
} else {
    echo "Dzisiaj nie ma imienin.";
}

if ($tomorrowNameDay) {
    echo "Jutro imieniny mają $tomorrowNameDay";
} else {
    echo "Jutro nie ma imienin.";
}

function namesByNameDay(DateTime $date): ?string {
    $nameDays[1][30] = "Martyny, Macieja, Teofila";
    $nameDays[1][31] = "Joanny, Ksawerego, Luizy";
    $nameDays[2][1] = "Brygidy, Dobrogniewa, Ignacego";
    $nameDays[2][2] = "Kornela, Marii, Mirosławy";
    $nameDays[12][30] = "Eugeniusza, Katarzyny, Sabiny";
    $nameDays[12][31] = "Mariusza, Melanii, Sylwestra";
    $month = $date->format('n');
    $day = $date->format('j');
    if (array_key_exists($month, $nameDays) && array_key_exists($day, $nameDays[$month])) {
        if ($nameDays[$month][$day] !== '') {
            return $nameDays[$month][$day];
        }
    }
    return null;
}
IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

elegancki skrypt, ale

przekopiowałem, pozmieniałem w tablicy imieniny na nameDays

niestety nie zadziałał :( - nic tam nie kombinowałem tylko rozszerzyłem tablice z dniami i kicha 🙁

jak nie ma rekordu dnia, albo jest pusty to tez nic nie wyświetla :(

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
ikp-php3 napisał(a):

niestety nie zadziałał :( - nic tam nie kombinowałem tylko rozszerzyłem tablice z dniami i kicha 🙁

Pokażesz kod jaki Ci wyszedł?

ikp-php3 napisał(a):

jak nie ma rekordu dnia, albo jest pusty to tez nic nie wyświetla :(

Sprawdzałem opcje zarówno kiedy nie ma wartości w tablicy, jak i gdy jest pusta, i oba przypadki działają.

IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0
Kopiuj
<?php

$today = new DateTime();
$tomorrow = $today->modify('+1 day');

$todayNameDay = namesByNameDay($today);
$tomorrowNameDay = namesByNameDay($tomorrow);

if ($todayNameDay) {
    echo "Imieniny mają $todayNameDay";
} else {
    echo "Dzisiaj nie ma imienin.";
}

if ($tomorrowNameDay) {
    echo "Jutro imieniny mają $tomorrowNameDay";
} else {
    echo "Jutro nie ma imienin.";
}

function namesByNameDay(DateTime $date): ?string {

$nameDays[1][30] = "Martyny, Macieja, Teofila";
$nameDays[1][31] = "Joanny, Ksawerego, Luizy";

$nameDays[2][1] = "Brygidy, Dobrogniewa, Ignacego";
$nameDays[2][2] = "Kornela, Marii, Mirosławy";
$nameDays[2][3] = "Błażeja, Joanny, Telimeny";
$nameDays[2][4] = "Andrzeja, Mariusza, Weroniki";
$nameDays[2][5] = "Agaty, Filipa, Justyniana";

$nameDays[12][29] = "Dawida, Dionizy, Tomasza";
$nameDays[12][30] = "Eugeniusza, Katarzyny, Sabiny";
$nameDays[12][31] = "Mariusza, Melanii, Sylwestra";
    $month = $date->format('n');
    $day = $date->format('j');
    if (array_key_exists($month, $nameDays) && array_key_exists($day, $nameDays[$month])) {
        if ($nameDays[$month][$day] !== '') {
            return $nameDays[$month][$day];
        }
    }
    return null;
}
?>

oczywiście skróciłem tablicę

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
ikp-php3 napisał(a):

oczywiście skróciłem tablicę

Podany kod działa w porządku, sprawdziłem go kilka razy. Co masz na myśli mówiąc że "nie działa", jaki efekt widzisz?

PS: Zamykanie tagu na końcu ?> to raczej zła praktyka. Nic nie daje, a niechcący jakby tam była spacja, to zostanie to potraktowane jak echo.

IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

jest "nic" 😉 nic nie pokazuje, jak kasowałem rekord albo wycinałem imiona to nie wyświetlał tych komunikatów

a wracając do domknięcia skryptów, czytałem, że powinno sie domykać szczególnie w aspekcie php8 - to jak to z tym jest a taka konstrukcja ; ?>

ja się w ogóle na tym nie znam 🙁

jurek1980
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3580
0
ikp-php3 napisał(a):

jak nie ma rekordu dnia, albo jest pusty to tez nic nie wyświetla :(

Kwestia nomenklatury nazewniczej.
W programowaniu jest kilka terminów jakie warto poznać. Szczegóły interpretacji po trochu zależą od języka programowania. Tak np. zdefiniowanie w PHP zamiennej $x = ''; nie oznacza, że ta zmienia jest pusta. Wręcz przeciwnie. Jest określony jej typ jako string (napis), a sam napis jest pusty.
https://onlinephp.io/c/db721

Kopiuj

<?php
$x = '';
echo "To jest:" . gettype($x). "I ma określoną długość: ". strlen($x) . " - O czym mowi funcja var_dump()";
echo PHP_EOL;
var_dump($x);
$z = Null;
echo "A to jest: " . gettype($z);
echo PHP_EOL;
var_dump($z);

Jeśli więc ustawisz napis w swoim kodzie na pusty i zrobisz echo do przeglądarki to przeglądarka nie wyświetli nic widocznego dla oka bo jest to pusty napis.
Kiedy można stosować taki pusty napis? Np. do inicjacji zmiennej i określania jej typu.

IP
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 84
0

toś dosypał do pieca 😉

reasumując w kodzie jest "imienin dziś nie ma" to powinien wyświetlić właśnie to?, jak są jakieś imiona powinien je wyświetlić 😀
w obu przypadkach wg. skryptu coś się powinno zadziać bez "nic" ;)

a jak jest z tym zamknięciem skryptu ?>?

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
ikp-php3 napisał(a):

jest "nic" 😉 nic nie pokazuje, jak kasowałem rekord albo wycinałem imiona to nie wyświetlał tych komunikatów

Możesz pokazać screen? Trudno mi uwierzyć że nic się nie pokazuje, dlatego że jest if/else, i w obu gałęziach jest echo.

ikp-php3 napisał(a):

a wracając do domknięcia skryptów, czytałem, że powinno sie domykać szczególnie w aspekcie php8 - to jak to z tym jest a taka konstrukcja ; ?>

Podeślij gdzie to doczytałeś. Raczej nie powinno się, ?> służy w zasadzie do tego żeby łączyć PHP i HTML, a to jest raczej średnia praktyka. Nie polecam.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.