Skocz do zawartości
Forum komputerowe

Ostatni dzień miesiąca


Rekomendowane odpowiedzi

Skrypt, który ma pokazać ile dni ma dany miesiąc po wskazaniu miesiąca i roku z formularza przez użytkownika.  

Nie wiem gdzie mam błąd. Proszę o poprawienie błędu w kodzie php.

<form action="ostatni_dzien_miesiaca.php" method="post">
<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($i=1900; $i<=2090;++$i)
    	     echo '<option value="'.$i.'">'.$i.'</option>';
        ?>
    </select></br></br>
	     </br></br><input type="submit" name="sprawdz"  value="Sprawdź dzień tygodnia" />
	     </br></br><input type="reset" name="reset"  value="Wyczyść" />
    </form>
<?php
 $rok['rok'] = $miesiac['miesiac'];
        for ($i = 1; $i <= 12; $i++) {
            $miesiac[$i] = date("t", mktime(0, 0, 0, $i, 1, $rok));
        }
		 var_dump($miesiac);
?>
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

To musi być `select`?

<?php

declare(strict_types=1);

function getIntFromPost(string $inputName, int $min, int $max): ?int
{
  $options = [
    'default' => null,
    'min_range' => $min,
    'max_range' => $max,
  ];
  
  return filter_var(filter_input(INPUT_POST, $inputName, FILTER_SANITIZE_NUMBER_INT), FILTER_VALIDATE_INT, [
    'options' => $options,
  ]);
}

$month = getIntFromPost('miesiac', 1, 12);
$year = getIntFromPost('rok', 1900, 2090);

if ($month === null || $year === null) {
  return 0;
}

$dateTime = \DateTimeImmutable::createFromFormat('Y.m', sprintf('%d.%d', $year, $month), new \DateTimeZone('Europe/Warsaw'));
return (int)($dateTime->format('t'));
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Ten kod nie działa. 

Użytkownik wybiera z formularza miesiąc  np. czerwiec i rok np. 2020, klika sprawdź. 

Pisze błąd  declare(strict_types=1);

Usunęłam  declare(strict_types=1); klikam sprawdź i nic nie wyświetla.

Powinno mu się wyświetlić 30 a tu nic się nie wyświetla

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
51 minut temu, Marta Długa napisał:

Pisze błąd  declare(strict_types=1);

To jaką Ty masz wersję PHP?

A to, że się nie wyświetla, to przez to, że są return (dwa ostatnie), a nie echo.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
34 minuty temu, Marta Długa napisał:

Nie przyjmuje declare(strict_types=1); wywala błąd

Daj konkretną treść błędu.

34 minuty temu, Marta Długa napisał:

Jest jakiś inny łatwiejszy sposób dla początkujących ?

Pewnie że jest - strukturalnie. Podobnie jak zrobiłaś to z 'kalkulatorem'.

Tylko, że w swoim kodzie nawet nie odebrałaś danych z formularza. Nie wiem też po co tam jest ta pętla.

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Po zmianie na echo błąd

Fatal error: strict_types declaration must be the very first statement in the script in C:\xampp\htdocs\Data\ostatni_dzien_miesiaca.php on line 21

Na początku html i podnim php.

 <form action="ostatni_dzien_miesiaca.php" method="post">
<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($i=1900; $i<=2090;++$i)
    	     echo '<option value="'.$i.'">'.$i.'</option>';
        ?>
    </select></br></br>
	     </br></br><input type="submit" name="sprawdz"  value="Sprawdź" />
	     </br></br><input type="reset" name="reset"  value="Wyczyść" />
    </form>
<?php

declare(strict_types=1);

function getIntFromPost(string $inputName, int $min, int $max): ?int
{
  $options = [
    'default' => null,
    'min_range' => $min,
    'max_range' => $max,
  ];
  
  echo filter_var(filter_input(INPUT_POST, $inputName, FILTER_SANITIZE_NUMBER_INT), FILTER_VALIDATE_INT, [
    'options' => $options,
  ]);
}

$month = getIntFromPost('miesiac', 1, 12);
$year = getIntFromPost('rok', 1900, 2090);

if ($month === null || $year === null) {
  echo 0;
}

$dateTime = \DateTimeImmutable::createFromFormat('Y.m', sprintf('%d.%d', $year, $month), new \DateTimeZone('Europe/Warsaw'));
echo (int)($dateTime->format('t')); 
 ?>

Dałam na początek przed html

<?php
 declare(strict_types=1);
 ?>

I nadal błąd Fatal error: strict_types declaration must be the very first statement in the script in C:\xampp\htdocs\Data\ostatni_dzien_miesiaca.php on line 2

Poproszę o kod prościejszy bo ten jest dla mnie nie zrozumiały. Dopiero się uczę

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
<?php

declare(strict_types=1);

function getIntFromPost(string $inputName, ?int $min = null, ?int $max = null): ?int
{
  $options = [];
  $options['default'] = null;

  if ($min !== null) {
    $options['min_range'] = $min;
  }

  if ($max !== null) {
    $options['max_range'] = $max;
  }

  return filter_var(filter_input(INPUT_POST, $inputName, FILTER_SANITIZE_NUMBER_INT), FILTER_VALIDATE_INT, [
    'options' => $options,
  ]);
}

$month = getIntFromPost('miesiac', 1, 12);
$year = getIntFromPost('rok', 1900, 2090);
$days = 0;

if ($month !== null && $year !== null) {
  $dateTime = \DateTimeImmutable::createFromFormat('Y.m', sprintf('%d.%d', $year, $month), new \DateTimeZone('Europe/Warsaw'));
  $days = (int)($dateTime->format('t')); 
}

if ($days > 0) {
  echo sprintf('Ilość dni w mięsiącu: %d', $days);
}

?>

<form action="ostatni_dzien_miesiaca.php" method="post">
  <label for="miesiac">Miesiąc:</label>
  <select name="miesiac">
    <?php 
    for($m = 1; $m <= 12; $m++) {
      echo '<option value="' . $m . '">' . $m . '</option>';
    }
    ?>
  </select>
  <label for="rok">Rok:</label>
  <select name="rok">
    <?php 
    for($y = 1900; $y <= 2090; $y++) {
      echo '<option value="' . $y . '">' . $y . '</option>';
    }
    ?>
  </select>
  <input type="submit" name="sprawdz"  value="Sprawdź" />
  <input type="reset" name="reset"  value="Wyczyść" />
</form>
Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nadal błąd declare(strict_types=1);

Fatal error: strict_types declaration must be the very first statement in the script in C:\xampp\htdocs\Data\ostatni_dzien_miesiaca.php on line 3

Poproszę o kod bez declare(strict_types=1).

To ma być kod dla początkujących łatwy do zrozumienia.

Ten kod jest niezrozumiały.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert

Przecież ten kod działa. Testowałem go u siebie... Sprawdź czy plik masz w dobrym kodowaniu: UTF-8 (bez BOM).

Czego nie rozumiesz w tym kodzie? To Ci wytłumaczę.

Ewentualnie staraj się napisać kod samej, a później odezwij się w temacie. Odebrałaś dane z formularza w poprzednim temacie, więc tutaj też nie powinnaś mieć problemu.

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Już mam o to mi chodziło kod łatwy i zrozumiały.

<form action="ostatni_dzien_miesiaca.php" method="post">
<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($i=1900;$i<=2090;++$i)
             echo '<option value="'.$i.'">'.$i.'</option>';
        ?>
    </select></br></br>
         </br></br><input type="submit" name="sprawdz"  value="Sprawdź dzień tygodnia" />
         </br></br><input type="reset" name="reset"  value="Wyczyść" />
    </form>
<?php
	$miesiac = date('t', strtotime($_POST['miesiac'] . '/1'));
 echo "Wybrany miesiąc ma ".  $miesiac . "dni." ;
?>

Jak zamienić cyferki na miesiące?

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Nie pokazuje błędu , ale nadal pokazuje cyfry zamiast miesiące. Prosze o pomoc

<form action="ostatni_dzien_miesiaca.php" method="post">
<label for="miesiac">Miesiąc:</label>
    <select name="miesiac">
        <?php
                 for($l=1;$l<=12;++$l)
             echo '<option value="'.$l.'">'.$l.'</option>';
		 switch ($l) {
        case '01': $l = 'stycze?'; break;
        case '02': $l = 'luty'; break;
        case '03': $l = 'marzec'; break;
        case '04': $l = 'kwiecie?'; break;
        case '05': $l = 'maj'; break;
        case '06': $l = 'czerwiec'; break;
        case '07': $l = 'lipiec'; break;
        case '08': $l = 'sierpie?'; break;
        case '09': $l = 'wrzesie?'; break;
        case '10': $l = 'pa?dziernik'; break;
        case '11': $l = 'listopad'; break;
        case '12': $l = 'grudzie?'; break;
      
    } 
        ?>
    </select></br></br>
	<label for="rok">Rok:</label>
    <select name="rok">
        <?php
                 for($i=1900;$i<=2090;++$i)
             echo '<option value="'.$i.'">'.$i.'</option>';
        ?>
    </select></br></br>
         </br></br><input type="submit" name="sprawdz"  value="Sprawdź dzień tygodnia" />
         </br></br><input type="reset" name="reset"  value="Wyczyść" />
    </form>

<?php

	$miesiac = date('t', strtotime($_POST['miesiac'] . '/1'));
 echo "Wybrany miesiąc ma ".  $miesiac . "dni." ;
 
?>
Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
1 godzinę temu, Marta Długa napisał:

Jak zamienić cyferki na miesiące?

Najwygodniej użyć tablicy. Wtedy `select` będzie wyglądać tak:

<?php
$months = ['Styczeń', 'Luty', 'Marzec', 'Kwiecień', 'Maj', 'Czerwiec', 'Lipiec', 'Sierpień', 'Wrzesień', 'Piździernik', 'Listopad', 'Grudzień'];
?>

<select name="miesiac">
  <?php
  foreach ($months as $number => $monthName) {
    echo '<option value="' . $number + 1 . '">' . $monthName . '</option>';
  }
  ?>
</select>

Polecam zabrać się za 'czyste' programowanie. Nie rozumiesz podstaw, więc będzie ciężko Ci zrozumieć niektóre mechanizmy. Najlepiej zacząć od C++ i programowania strukturalnego w konsoli.

Nie możesz użyć zmiennej wcześniej niż jej deklaracja, bo będzie rzucać błędem.

Tak samo ze switch() - użyłaś instrukcji po samym wyświetleniu `option`.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
13 minut temu, Marta Długa napisał:

Nie pokazuje błędu , ale nadal pokazuje cyfry zamiast miesiące. Prosze o pomoc

<form action="ostatni_dzien_miesiaca.php" method="post">
<label for="miesiac">Miesiąc:</label>
    <select name="miesiac">
        <?php
                 for($l=1;$l<=12;++$l)
             echo '<option value="'.$l.'">'.$l.'</option>';
		 switch ($l) {
        case '01': $l = 'stycze?'; break;
        case '02': $l = 'luty'; break;
        case '03': $l = 'marzec'; break;
        case '04': $l = 'kwiecie?'; break;
        case '05': $l = 'maj'; break;
        case '06': $l = 'czerwiec'; break;
        case '07': $l = 'lipiec'; break;
        case '08': $l = 'sierpie?'; break;
        case '09': $l = 'wrzesie?'; break;
        case '10': $l = 'pa?dziernik'; break;
        case '11': $l = 'listopad'; break;
        case '12': $l = 'grudzie?'; break;
      
    } 
        ?>
    </select></br></br>
	<label for="rok">Rok:</label>
    <select name="rok">
        <?php
                 for($i=1900;$i<=2090;++$i)
             echo '<option value="'.$i.'">'.$i.'</option>';
        ?>
    </select></br></br>
         </br></br><input type="submit" name="sprawdz"  value="Sprawdź dzień tygodnia" />
         </br></br><input type="reset" name="reset"  value="Wyczyść" />
    </form>

<?php

	$miesiac = date('t', strtotime($_POST['miesiac'] . '/1'));
 echo "Wybrany miesiąc ma ".  $miesiac . "dni." ;
 
?>

 

Bo zmieniasz je po wyświetleniu. Zmienną $l bierze wtedy z pętli.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
7 minut temu, -n3veR napisał:

Polecam zabrać się za 'czyste' programowanie. Nie rozumiesz podstaw, więc będzie ciężko Ci zrozumieć niektóre mechanizmy. Najlepiej zacząć od C++ i programowania strukturalnego w konsoli.

Zaczynałam od C++ ale tam jeszcze gorzej mi szło. 

Zależy mi na nauczeniu się PHP bo chce projektować strony . 

U mnie jest problem taki że nie wiem co do czego wykorzystać.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Ekspert
1 minutę temu, Marta Długa napisał:

U mnie jest problem taki że nie wiem co do czego wykorzystać.

Cieszę się, że masz determinację i wiesz co chcesz robić w przyszłości, ale zacznij od kursów i tutoriali - będziesz mniej sfrustrowana 'nierozumieniem'.

Mamy sporo tematów z tego zakresu.

Odnośnik do odpowiedzi
Udostępnij na innych stronach
  • Administrator

Przeczytać a przeczytać i zrozumieć to dwie różne rzeczy. Nie jestem za bardzo w temacie, ale przede wszystkim podstawy. Bez podstaw ciężko będzie cokolwiek pojąć.

14 minut temu, Marta Długa napisał:

Zależy mi na nauczeniu się PHP bo chce projektować strony . 

Jeśli chcesz projektować strony pod względem wizualnym to PHP na wstępnym etapie jest zbędne.

Tutaj wchodzi tak zwany UI (wygląd strony) oraz UX (to jakie odczucia ma użytkownik korzystając ze strony) oraz HTML, CSS oraz JS - dzięki temu projektuje się strony wizualnie. W wersji statycznej nic nie jest więcej potrzebne.

Potem można zacząć wchodzić na wyższy poziom ucząc się frameworków do JS (React, Vue, Angular) lub wspomnianego tutaj PHP i także jego frameworków.

Obie te części rozdziela się na kilka sekcji.

Front-end - HTML, CSS, JS + frameworki

Back-end - bazy danych, PHP + frameworki

Full-stack - wszystko co wyżej + duża znajomość rzeczy z programowania

Na początkowym etapie warto sobie zadać pytanie, co chcę robić programując/kodując bo potem można sobie nieźle w bani namieszać.

Odnośnik do odpowiedzi
Udostępnij na innych stronach

Problem wciąż nierozwiązany? Dodaj swoją odpowiedź

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto. Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się
  • Podobna zawartość

    • Przez Vast
      Cześć, mam bazę danych z unixowym czasem ich dodania, potrzebuję usunąć z niej rekordy młodsze niż 50 dni (Jeśli były stworzone w przeciągu 50 dni). Jakieś rady? Totalnie nie mam pomysłu.
       
      Dzięki serdeczne za pomoc :).
    • Przez Mięta
      Mam pytanie nie wiem jak zrobić na stronie aby pokazywało styl? Jak dodać zewnętrzny arkusz stylów do HTML?
      Będę wdzięczny za pomoc.
    • Przez Tomik
      FORMATOWANIE I KOLOROWANIE GRUP. POŚWIATA, GWIAZDKI, IKONY I FONT AWESOME
      Paleta kolorów  HTML Color Picker
      Font Awesome  Icons | Font Awesome
      Przykładowe efekty:


      FORMATOWANIE
      Utwórz nowy arkusz CSS o nazwie, np.: ranks.css i dodaj:
      .ranks-NAZWA { background: url(TŁO); color: #KOLOR; text-shadow: 1px 1px 15px #POŚWIATA; font-weight: bold; } W Format loginu dodaj:
      <span class="ranks-NAZWA">{username}</span> Legenda:
      NAZWA – nazwa klasy CSS TŁO – tło KOLOR – kolor nazwy grupy POŚWIATA – kolor poświaty

    • Przez Dazai
      Zajmuje się tworzeniem stron internetowych HTML, landing-page, one-page, strony wizytówki, a także proste szablony pod CMS Wordpress. Oferuje staranność, dokumentacje, nowoczesność a przede wszystkim przejrzysty kod zrozumiały nawet dla laika. 
      Wykonam: strony HTML, landing-page, one-page, multi-page, blogowe szablony WordPress
      Zakres umiejętności:
      HTML5 & CSS3 JavaScript (podstawowy) Bootstrap 3.x UIKit  RWD WordPress Sass & Gulp.js Adobe Photoshop Podstawy UI/UX Chętnych zapraszam do kontaktu a także przejrzenia mojego portfolio, gdzie link dostępny jest na moim profilu forumowym.
      Kontakt: PW na forum lub [email protected]
×
×
  • Dodaj nową pozycję...