• 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

0 głosów
76 wizyt
pytanie zadane 7 stycznia 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 przez SzkolnyAdmin Maniak (62,020 p.)
wybrane 7 stycznia 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 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 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 przez SzkolnyAdmin Maniak (62,020 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 przez vingilot85 Obywatel (1,150 p.)
Ok, dzięki
0 głosów
odpowiedź 7 stycznia przez SzkolnyAdmin Maniak (62,020 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 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 przez SzkolnyAdmin Maniak (62,020 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 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 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 222 wizyt
pytanie zadane 17 sierpnia 2015 w C i C++ przez Jonki Dyskutant (8,190 p.)
0 głosów
1 odpowiedź 82 wizyt
pytanie zadane 15 stycznia 2019 w JavaScript przez PROFF Obywatel (1,180 p.)
+1 głos
1 odpowiedź 465 wizyt
pytanie zadane 27 grudnia 2016 w C i C++ przez breeg Początkujący (390 p.)
Porady nie od parady
Nie wiesz jak poprawnie zredagować pytanie lub pragniesz poznać którąś z funkcji forum? Odwiedź podstronę Pomoc (FAQ) dostępną w menu pod ikoną apteczki.FAQ

85,728 zapytań

134,512 odpowiedzi

298,568 komentarzy

56,635 pasjonatów

Motyw:

Akcja Pajacyk

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

Oto dwie polecane książki warte uwagi. Pełną listę znajdziesz tutaj.

...