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

Przesyłanie danych $_POST'em a typ danych

VPS Starter Arubacloud
0 głosów
127 wizyt
pytanie zadane 7 stycznia 2021 w PHP przez vingilot85 Obywatel (1,150 p.)

Bawię się PHP'em (zainspirowany 2 odc. M. Zelenta z JS), mam taki kod:
 

<!DOCTYPE HTML>
<html lang="pl">
	<head>
		<meta charset="utf-8"/>
		
		<?php
			$first_var = $_POST['first_var'];
			$second_var = $_POST['second_var'];
		?>
		
	</head>
	
	<body>
		<form action="index.php" method="post">
			<input type="text" name="first_var"/>
			<input type="text" name="second_var"/>
			<input type="submit" value="sprawdz"/>
			</br>
			
			<?php
				if (isset($first_var)&&($second_var))
				{
					if((is_int($first_var))||(is_int($second_var)))
					{
						if($first_var<$second_var)
						{
							for($i=$first_var; $i<=$second_var; $i++)
							{
								echo $i.", ";
							}
						}
						else if($first_var>$second_var)
						{
							for($i=$second_var; $i>=$first_var; $i--)
							{
								echo $i.", ";
							}
						}
						else if($first_var==$second_var)
						{
							echo "Liczby są takie same";
						}
					}
					else 
					{
						echo "Wpisz liczby nie litery";
					}
				};
			?>
		</form>
	</body>
</html>

Chcę, aby wyświetlało mi po kolei cyfry od pierwszej podanej w $first_var do drugiej - w $second_var.
Zabezpieczyłem kod na wypadek wpisania najpierw większej, potem mniejszej, a także wpisania takich samych.

Niestety problem pojawia się w przypadku ewentualności wpisania string'a, a nie liczby (ostatni "else").

Zauważyłem, że przeszkoda musi być na poziomie przesyłania danych z formularza, bo testując różne rozwiązania, przy bezpośrednim zdefiniowaniu danych w kodzie ($first_var= //wartość i $second_var= //wartość), wszystko bangla jak należy.

Czy w 

<?php
	$first_var = $_POST['first_var'];
	$second_var = $_POST['second_var'];
?>

da radę jakoś spowodować, aby dane były przesyłane tak samo, niezależnie od ich typu?

2 odpowiedzi

+1 głos
odpowiedź 7 stycznia 2021 przez SzkolnyAdmin Szeryf (86,280 p.)
wybrane 7 stycznia 2021 przez vingilot85
 
Najlepsza

Twój skrypt:

<?php
                if(isset($_POST["first_var"])&&isset($_POST["second_var"]))
                {
                    $first_var = $_POST["first_var"];
                    $second_var = $_POST["second_var"];
					
					if((is_numeric($first_var) && $first_var==(int) $first_var) && (is_numeric($second_var) && $second_var==(int) $second_var))
                    {
                        $first_var = (int) $first_var;
						$second_var = (int) $second_var;
						
						if($first_var<$second_var)
                        {
                            for($i=$first_var; $i<=$second_var; $i++)
                            {
                                echo $i.", ";
                            }
                        }
                        else if($first_var>$second_var)
                        {
                            for($i=$second_var; $i<=$first_var; $i++)
                            {
                                echo $i.", ";
                            }
                        }
                        else if($first_var==$second_var)
                        {
                            echo "Liczby są takie same";
                        }
                    }
                    else
                    {
                        echo "Wpisz liczby nie litery";
                    }
                }
				
            ?>

Pytaj, jak coś jest niejasne.

komentarz 7 stycznia 2021 przez vingilot85 Obywatel (1,150 p.)
Działa, wielkie dzięki!
Jak logicznie nie dojdę do konkluzji co i jak, skorzystam z oferty i jeszcze Cię podpytam:)
komentarz 7 stycznia 2021 przez vingilot85 Obywatel (1,150 p.)

@SzkolnyAdmin, Jednak zapytam - skoro is_numeric ogarnia ogólnie wartości liczbowe, w jakim celu jeszcze warunek int, aby były to liczby całkowite?
Plus, skoro już int, to czy forma zapisania której użyłeś - " $first_var==(int) $first_var " różni się od "(is_int($first_var))"?

komentarz 8 stycznia 2021 przez SzkolnyAdmin Szeryf (86,280 p.)

Funkcja is_numeric sprawdza, czy wartość jest liczbą (da się skonwertować na liczbę) - w ten sposób eliminujesz stringi, które nie zamienisz na liczbę (z pola tekstowego zawsze otrzymujesz string).

https://www.php.net/manual/en/function.is-numeric.php

Funkcja is_int sprawdza, czy wartość jest całkowita, dla stringów, np. "3" zwróci false.

https://www.php.net/manual/en/function.is-int.php

Porównanie $first_var==(int) $first_var  sprawdza, czy wpisałeś liczbę całkowitą w pole. W ten sposób wyeliminujesz liczby z częścią ułamkową. Zapis po prawej stronie porównania konwertuje zmienna na liczbę całkowitą.

Przykład 1: podajesz $first_var = 3, wtedy (int) $first_var też jest równe 3 i warunek jest spełniony.

Przykład 2: podajesz $first_var = 3.14, wtedy (int) $first_var też jest równe 3 i warunek nie jest spełniony.

 

 

 

komentarz 8 stycznia 2021 przez vingilot85 Obywatel (1,150 p.)
Ok, dzięki
0 głosów
odpowiedź 7 stycznia 2021 przez SzkolnyAdmin Szeryf (86,280 p.)

Twój program działa na liczbach całkowitych. Możesz zmienić typ pola do wprowadzania danych na "number". Zainteresuj się funkcją PHP is_int

komentarz 7 stycznia 2021 przez vingilot85 Obywatel (1,150 p.)

Mam już to w kodzie:

if((is_int($first_var))||(is_int($second_var)))

i powinien wykonać sobie kilka konfiguracji na podanych danych. Ale mimo podawania liczb całkowitych, nadal mam ciągle komunikat, jakbym podawał string

komentarz 7 stycznia 2021 przez SzkolnyAdmin Szeryf (86,280 p.)

Linia 21

if (isset($first_var)&&isset($second_var))

Linia 23

if((is_int($first_var))&&(is_int($second_var)))

Przetestuj po zmianach

komentarz 7 stycznia 2021 przez vingilot85 Obywatel (1,150 p.)

Zmieniłem, bez reakcji.
Dodałem też:

else if((is_string($first_var))||(is_string($second_var)))
					{
						echo "Wpisz liczby nie litery";
					}

i również nic

komentarz 7 stycznia 2021 przez vingilot85 Obywatel (1,150 p.)

@SzkolnyAdmin, Zresztą, ten fragment kodu działa dobrze, jeśli w liniach od 6 do 9:

<?php
			$first_var = $_POST['first_var'];
			$second_var = $_POST['second_var'];
?>

wpisuję od razu int albo stringi. Wtedy je rozpoznaje i reakcja się zgadza

Podobne pytania

0 głosów
3 odpowiedzi 363 wizyt
pytanie zadane 17 sierpnia 2015 w C i C++ przez Jonki Dyskutant (8,180 p.)
0 głosów
1 odpowiedź 187 wizyt
pytanie zadane 15 stycznia 2019 w JavaScript przez PROFF Obywatel (1,180 p.)
+1 głos
1 odpowiedź 881 wizyt
pytanie zadane 27 grudnia 2016 w C i C++ przez breeg Początkujący (390 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...