• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prostszy sposób na połączenie formularza z php

Object Storage Arubacloud
0 głosów
442 wizyt
pytanie zadane 22 maja 2020 w PHP przez Martita Bywalec (2,500 p.)

Proszę o pomoc. Szukałam.

Chciałabym poznać drugi sposób połączenia formularza z php

<form action="tydzien.php" method="post">
       <label for="dzień">Dzień:</label>
     <select name="dzien">
        <?php 
    	      for ($i=1;$i<=31;++$i)
 
            echo '<option value="'.$i.'">'.$i.'</option>';
        ?>
    </select> </br></br>
<label for="miesiac">Miesiąc:</label>
    <select name="miesiac">
        <?php 
    			 for($l=1;$l<=12;++$l)
    	     echo '<option value="'.$l.'">'.$l.'</option>';
        ?>
    </select></br></br>
<label for="rok">Rok:</label>
    <select name="rok">
        <?php 
    			 for($t=1900;$t<=2020;++$t)
    	     echo '<option value="'.$t.'">'.$t.'</option>';
        ?>
    </select> </br>
	     </br></br><input type="submit" name="sprawdz"  value="Sprawdź dzień tygodnia" />
	     </br></br><input type="reset" name="reset"  value="Wyczyść" />
    </form>

Nie chcę tworzyć z if isset bo taki mam teraz . Chce mieć kod gdzie jest mało pisania. Dlatego utworzyłam poniższy kod, ale nie wiem gdzie jest błąd .

<?php
  $dzien = date('N', strtotime($_POST['dzien']. $_POST['miesiac']. $_POST['rok']));
    $dni_tygodnia = array('Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota','Niedziela');
    echo "Urodziłaś się w ";
    echo $dni_tygodnia[$dzien];

?>

 

 

 

komentarz 22 maja 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
A co się dzieje? Coś źle się pokazuje? Nie działa wcale? Wyskakuje jakiś komunikat błędu? Bo nikt się nie będzie raczej domyślał.
komentarz 22 maja 2020 przez Martita Bywalec (2,500 p.)
Przepraszam

Wybieram datę 19.06.1983

Klikam Sprawdż

Pokazuje Piątek a powinien pokazać NIEDZIELA
komentarz 22 maja 2020 przez SzkolnyAdmin Szeryf (86,360 p.)
Funkcja date zwraca 7 dla podanych wartości. A co jest w tablicy $dni_tygodnia? Może tam tkwi błąd.

1 odpowiedź

0 głosów
odpowiedź 22 maja 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)

Po pierwsze myślę, że format daty jest niezrozumiały dla strtotime, bo zapis:

strtotime($_POST['dzien']. $_POST['miesiac']. $_POST['rok'])

dla podanej daty 19.06.1983 to będzie strtotime('1961983'). Nie ma tam zera przed miesiącem, bo go nie masz w select i nie ma też kropek, bo te służą do łączenia ciągów (konkatenacja), a nie są wstawiane w samą datę. Bez 0 przed miesiącem sobie pewnie poradzi, ale taki format jest raczej błędny, dodałbym kropki i spróbował.

Po drugie, jak właśnie sprawdziłem, date dla formatu N da numer dnia tygodnia z zakresu 1-7: https://www.php.net/manual/en/function.date.php a Twoja tablica ma 7 elementów, ale o indeksach od 0 do 6 (w programowaniu często liczymy od zera). W związku z tym będzie próbował dostać się do $dni_tygodnia[7], a to spowoduje błąd, bo takiego elementu nie ma. Najprościej chyba zapisać, aby tablica była numerowana od 1 i wtedy element o indeksie 7 faktycznie będzie niedzielą.

Tak przy okazji, w kodzie raczej niezbyt liczy się to, aby było mało pisania. Ważniejsze jest to, aby był generalnie dobry i czytelny, a nie najkrótszy. Tutaj brakuje Ci np. sprawdzenia czy $_POST['dzien'] i pozostałe wartości w ogóle zostały przesłane albo walidacji ich - co gdy wybiorę nieistniejącą datę lub w ogóle wyślę tam literki zamiast dni tygodnia.

komentarz 22 maja 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)

Caps lock się zaciął? ;) Temat jest o to samo, jak sama zauważasz "podobny" i to nawet bardzo podobny, bo dotyczył bardzo podobnego kodu i przede wszystkim z tym samym celem - znaleźć błąd w skrypcie do sprawdzenia dnia urodzenia. Zwróciłem uwagę, aby nie powielać tematów, tylko tyle.

To super że się uczysz, ale wszyscy jesteśmy tu, aby się uczyć i rozwijać, więc to nic nadzwyczajnego i nie daje prawa zadania nie wiadomo ilu pytań na ten sam temat, bo wtedy jedna osoba utrudni życie wszystkim pozostałym.

No więc pokazałem 2 rzeczy, które wg mnie są źle zapisane i jak to poprawisz, to kod powinien zadziałać :) Jeśli nie to chętnie pomogę (na tyle ile wiem i mam czas), ale musi być też Twoja wola, aby zagłębić to samemu - poszukać, poświęcić czas, na spokojnie się nad tym wszystkim zastanowić i to zrozumieć. Nie wiem do czego dążysz konkretnie, jak mówiłem w programowaniu nie chodzi o to, aby usilnie zapisać kod najkrótszym sposobem czy zrobić wszystko, aby nie było warunku.

W temacie kursu PHP, to jeśli mogę zrobić małą autopromocję, napisałem własny kurs: https://www.phpdevs.pl/ Co prawda nie jest skończony i od dłuższego czasu niestety nie pojawiło się tam nic nowego oprócz aktualizacji kilku treści, ale generalnie całe podstawy są. Może coś Ci to pomoże, starałem się pisać tak, aby zrozumiał każdy, ale nie gwarantuję.

komentarz 22 maja 2020 przez Martita Bywalec (2,500 p.)

Poprawiłam to ale tym razem wyskakuje błąd: Parse error: syntax error, unexpected ';', expecting ')' in $dzien = date('N', strtotime($_POST['dzien'].  '.' . $_POST['miesiac'].  '.' . $_POST['rok']);  

Próbowałam 

<?php
  $dzien = date('N', strtotime($_POST['dzien'].  '.' . $_POST['miesiac'].  '.' . $_POST['rok']);  
  $dni_tygodnia = array(1 => 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota', 'Niedziela');
    echo "Urodziłaś się w ";
    echo $dni_tygodnia[$dzien-7];

?>
$dzien = date('N', strtotime($_POST['dzien'].  '.' . $_POST['miesiac'].  '.' . $_POST['rok']);  

I tak 

$dzien = date('N', strtotime($_POST['dzien']  '.' . $_POST['miesiac']  '.' . $_POST['rok']);  

i tak 

$dzien = date('N', strtotime($_POST['dzien']'.' $_POST['miesiac'] '.' $_POST['rok']);  

Nie mam już pomysłu jak to zrobić.

komentarz 22 maja 2020 przez Martita Bywalec (2,500 p.)
Zaraz się biorę za przerabianie tego kursu Dzięki
komentarz 22 maja 2020 przez Arkadiusz Waluk Ekspert (287,950 p.)
Właściwy jest pierwszy zapis, tylko że zabrakło Ci zamknięcia jednego nawiasu na końcu. Sprawdzaj uważnie. Otwierasz date(, otwierasz strtotime(, a zamykasz na końcu tylko jeden. Pozostałe nie mają prawa zadziałać, bo nie będzie wiedział co zrobić ze stringami zapisanymi obok siebie (ani nie mają kropek żeby je połączyć, ani przecinków jakoby to były kolejne argumenty, nic).
komentarz 22 maja 2020 przez Martita Bywalec (2,500 p.)
Wielkie dzięki teraz już rozumiem .

Podobne pytania

0 głosów
1 odpowiedź 119 wizyt
pytanie zadane 19 stycznia 2021 w PHP przez CSSoup Mądrala (6,460 p.)
0 głosów
2 odpowiedzi 921 wizyt
0 głosów
1 odpowiedź 304 wizyt
pytanie zadane 7 maja 2017 w PHP przez PieroQQ Początkujący (420 p.)

92,576 zapytań

141,426 odpowiedzi

319,651 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...