Wątek przeniesiony 2020-06-14 14:15 z Bazy danych przez Shalom.

Ostatni dzień miesiąca w php

0

Mam skrypt, który ma pokazać ile dni ma dany miesiąc po wskazaniu miesiąca z formularza przez użytkownika.
Proszę o poprawienie błędu.
Błąd:
Jak wybiorę 6 miesiąc to pokazuje 30, ale też pokazuje błąd .

Jak wybiorę 7 miesiąc to pokazuje też 30, ale też pokazuje błąd .

Błąd Notice: Undefined variable: miesiac in C:\xampp\htdocs\Data\ostatni_dzien_miesiaca.php on $miesiac = date('t', mktime(0, 0, 0, date($miesiac)-1, 1, ));.

Warning: A non-numeric value encountered in C:\xampp\htdocs\Data\ostatni_dzien_miesiaca.php on$miesiac = date('t', mktime(0, 0, 0, date($miesiac)-1, 1, ));
30

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>
         </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', mktime(0, 0, 0, date($miesiac)-1, 1, ));
echo $miesiac;
?>
1

No nie ma takiej zmiennej jak $miesiac, to wywala błąd.

0

$ miesiac = niemam zielonego pojęcia co potym = napisać.
Dopiero się uczę.
Proszę o pomoc

$ miesiac = $POST['miesiac']; też wywala błąd

1

Do badania czy masz zmienną zadeklarowaną można użyć isset()
https://www.php.net/manual/en/function.isset.php
Sprawdzaj więc tablicę POST w ten sposób.

0

Błąd już nie wyskakuje ale nie pokazuje ile dni ma np czerwiec po wybraniu z formularza.

if (isset($miesiac)) {
 echo $miesiac;   
}
0

Tu masz liczbę dni: https://www.php.net/manual/en/function.cal-days-in-month.php

Nie możesz podać samego numerku miesiąca, bo nie wiadomo wtedy, czy chodzi o rok przestępny, czy zwykły.

0

Niestety z manuala PHP nic nie rozumiem pomimo że przetłumaczę na polski. Proszę o pomoc

0
serek napisał(a):

Tu masz liczbę dni: https://www.php.net/manual/en/function.cal-days-in-month.php

Nie możesz podać samego numerku miesiąca, bo nie wiadomo wtedy, czy chodzi o rok przestępny, czy zwykły.

Proszę o poprawienie błędu.

1
Marta Długa napisał(a):

Niestety z manuala PHP nic nie rozumiem pomimo że przetłumaczę na polski. Proszę o pomoc

No to nie wróżę Ci kariery w programowaniu, skoro podstawy angielskiego to problem.

Musisz zrobić coś takiego:
cal_days_in_month(CAL_GREGORIAN, $miesiac, $rok)

0
serek napisał(a):

No to nie wróżę Ci kariery w programowaniu, skoro podstawy angielskiego to problem.
Nie trzeba znać angielski żeby programować a trzeba umieć myśleć jak programista i wiedzieć co z czym połączyć żeby napisać program. Mój kuzyn jest geniuszem w programowaniu a nie zna angielskiego

Musisz zrobić coś takiego:
cal_days_in_month(CAL_GREGORIAN, $miesiac, $rok)

Nie da się tego zrobić inaczej coś podobnego do skryptu, który pokazuje czy rok jest przestępny czy nie ?
Chodzi o skrypt

<form action="przestepny.php" method="post">
      Podaj rok </br><input type="text" name="rok" />
       </br></br><input type="submit" name="sprawdz"  value="Sprawdź przestępność" />
	     </br></br><input type="reset" name="reset"  value="Wyczyść" />
    </form>
    <?php
      function przestepny($rok)
      {
        return ($rok%4==0 && $rok%100!==0) || $rok%400===0;
      }
      if (!isset($_POST['sprawdz'])) exit;
      $rok=$_POST['rok'];
      if (przestepny($rok)) echo 'Rok '.$rok.' jest przestępny'; 
      else echo 'Rok '.$rok.' nie jest przestępny';
    ?> 
  <?php
      function przestepny($rok)
      {
        return ($rok%4==0 && $rok%100!==0) || $rok%400===0;
      }
      if (!isset($_POST['sprawdz'])) exit;
      $rok=$_POST['rok'];
      if (przestepny($rok)) echo 'Rok '.$rok.' jest przestępny'; 
      else echo 'Rok '.$rok.' nie jest przestępny';
    ?> 
```php
0

Proszę o poprawienie kodu żeby prawidłowo dział. Użytkownik wybiera miesiąc np. 7 i rok 2020.klika sprawdź i wyświetla mu się 31

<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
if (isset($miesiac)) {
	$miesiac = 	date('t', mktime(0, 0, 0, date($rok)-1, 1, ));
 echo $miesiac;   
}
?>

1

Zobacz sobie dokumentację dla funkcji date. Chociaż pewnie niewiele Ci pomoże...

Krótko mówiąc: nie masz zielonego pojęcia, co robisz. A brak znajomości angielskiego to już w ogóle tragedia, bo będzie Ci ciężko cokolwiek znaleźć normalnego.

I weź skorzystać z tej funkcji, którą podałem wyżej.

0

A brak znajomości angielskiego to już w ogóle tragedia, bo będzie Ci ciężko cokolwiek znaleźć normalnego.
Mój kuzyn bez angielskiego świetnie programuje. Ja też mogę tylko na razie nie wiem co wykorzystać do pisania danego programu. Prrzykład znam pętle, zmienne itp. ale nie wiem co wykorzystać do pisania danego programu czy pętle czy co innego.
Już mam o to chodziło

<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." ;
?>
0

Jak zamienić cyferki na miesiące?

0
Marta Długa napisał(a):

Nie trzeba znać angielski żeby programować a trzeba umieć myśleć jak programista i wiedzieć co z czym połączyć żeby napisać program. Mój kuzyn jest geniuszem w programowaniu a nie zna angielskiego

Dobra, teraz poważnie: Ile lat masz? Bo może w ten sposób da się wytłumaczyć niektóre rzeczy. A patrząc na posty, to strzelam, że maks 16.

0

Mam 37 lat i to nie są posty na 16 lat.

2
Marta Długa napisał(a):

Mam 37 lat i to nie są posty na 16 lat.

No to serio radzę podszkolić się z angielskiego, bo bez tego będzie mega trudno. Bez tego ciężko będzie znaleźć porządne materiały. Po polsku też się da, ale będzie tego dużo mniej. No i bez angielskiego nie skorzystasz np. ze StackOverflow^^

A co do rozwiązania, łap:

$date = '2020-02-01';
var_dump(date('t', strtotime($date))); //liczba dni
var_dump(date('L', strtotime($date))); //czy jest rok przestępny
0

Już dawno korzystam z StackOverflow. Wszystkie strony mam tłumaczone automatycznie na polski.
Dzięki

1

Nie musisz znać angielskiego śpiewająco, ale jeżeli nie znasz go przynajmniej na tyle, by móc czytać dokumentację języków, to w zasadzie działasz tutaj jak bez ręki (albo jak w latach 90-tych).

0
Marta Długa napisał(a):

Jak zamienić cyferki na miesiące?

Zrób sobie tablicę:

$miesiace_nazwy[1]="styczeń";
$miesiace_nazwy[2]="luty";
$miesiace_nazwy[3]="marzec";
$miesiace_nazwy[4]="kwiecień";
$miesiace_nazwy[5]="maj";
$miesiace_nazwy[6]="czerwiec";
$miesiace_nazwy[7]="lipiec";
$miesiace_nazwy[8]="sierpień";
$miesiace_nazwy[9]="wrzesień";
$miesiace_nazwy[10]="październik";
$miesiace_nazwy[11]="listopad";
$miesiace_nazwy[12]="grudzień";

$miesiace_nazwy_porz[1]="stycznia";
$miesiace_nazwy_porz[2]="lutego";
$miesiace_nazwy_porz[3]="marca";
$miesiace_nazwy_porz[4]="kwietnia";
$miesiace_nazwy_porz[5]="maja";
$miesiace_nazwy_porz[6]="czerwca";
$miesiace_nazwy_porz[7]="lipca";
$miesiace_nazwy_porz[8]="sierpnia";
$miesiace_nazwy_porz[9]="września";
$miesiace_nazwy_porz[10]="października";
$miesiace_nazwy_porz[11]="listopada";
$miesiace_nazwy_porz[12]="grudnia";
0

Utworzyłam tablice, ale jeszcze nie wyświetla nazw miesięcy.

<label for="miesiac">Miesiąc:</label>
    <select name="miesiac">
        <?php 
    			 for($l=1; $l<=12;++$l)
    	     echo '<option value="'.$l.'">'.$l.'</option>';
		 $miesiace_nazwy=array(
$miesiace_nazwy[1]="styczeń";
$miesiace_nazwy[2]="luty";
$miesiace_nazwy[3]="marzec";
$miesiace_nazwy[4]="kwiecień";
$miesiace_nazwy[5]="maj";
$miesiace_nazwy[6]="czerwiec";
$miesiace_nazwy[7]="lipiec";
$miesiace_nazwy[8]="sierpień";
$miesiace_nazwy[9]="wrzesień";
$miesiace_nazwy[10]="październik";
$miesiace_nazwy[11]="listopad";
$miesiace_nazwy[12]="grudzień");
echo $miesiace_nazwy[$l];
        ?>
    </select></br></br>
1

Ehh, będziesz mieć długą drogę przed sobą :) Coś takiego:

<?php
$miesiace_nazwy[1]="styczeń";
$miesiace_nazwy[2]="luty";
$miesiace_nazwy[3]="marzec";
$miesiace_nazwy[4]="kwiecień";
$miesiace_nazwy[5]="maj";
$miesiace_nazwy[6]="czerwiec";
$miesiace_nazwy[7]="lipiec";
$miesiace_nazwy[8]="sierpień";
$miesiace_nazwy[9]="wrzesień";
$miesiace_nazwy[10]="październik";
$miesiace_nazwy[11]="listopad";
$miesiace_nazwy[12]="grudzień";
?>

<label for="miesiac">Miesiąc:</label>
<select name="miesiac">
<?php 
    foreach ($miesiace_nazwy as $id => $miesiac) {
        echo "<option value=$id>$miesiac</option>";
     }
 ?>
</select>
</br></br>
0
Marta Długa napisał(a):

Mam skrypt, który ma pokazać ile dni ma dany miesiąc po wskazaniu miesiąca z formularza przez użytkownika.
Proszę o poprawienie błędu.
Błąd:
Jak wybiorę 6 miesiąc to pokazuje 30, ale też pokazuje błąd .

Jak wybiorę 7 miesiąc to pokazuje też 30, ale też pokazuje błąd .

Błąd Notice: Undefined variable: miesiac in C:\xampp\htdocs\Data\ostatni_dzien_miesiaca.php on $miesiac = date('t', mktime(0, 0, 0, date($miesiac)-1, 1, ));.

Warning: A non-numeric value encountered in C:\xampp\htdocs\Data\ostatni_dzien_miesiaca.php on$miesiac = date('t', mktime(0, 0, 0, date($miesiac)-1, 1, ));
30

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>
         </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', mktime(0, 0, 0, date($miesiac)-1, 1, ));
echo $miesiac;
?>

Czy koleżance nie chodziło o taki efekt:

<?php
echo "<pre>";  //Wyświetla w przejrzysty sposób tego co przyszlo z formularza
print_r($_POST);
echo "</pre>";

$miesiac_slownie = $_POST['miesiac']; //Przypisanie do zmiennej wybranego miesiąca
$miesiac = number_format($miesiac_slownie, 0, ',' , '.'); //Zamiana na liczbę, ponieważ z formularza wpadło jako text

$rok = 2020;
$number = cal_days_in_month(CAL_GREGORIAN, $miesiac, $rok); // Gotowa funkcja o której pisał Serek

echo "Wybrany miesiąc w 2020 roku posiada: ".$number."dni"; //Wypisanie tego na ekran
?>

1 użytkowników online, w tym zalogowanych: 0, gości: 1