Wie um zu überprüfen, ob eine variable in $_GET-Array eine Ganzzahl ist?
Ich habe eine Seite wie folgt:
http://sitename/gallery.php?page=2
Es hat Seitenzählung links unten, durch die wir navigieren können. Jedesmal, wenn die Seitenzahlen geklickt werden, es würde senden Sie eine GET Anfrage mit Parametern page=1 oder page=2 und so weiter ...
Wenn ich Speichere diese Werte zu $page
von teh $_GET
variable, einen string-Wert. Ich kann konvertieren in eine Ganzzahl mit (int)
wie diese:
if(!empty($_GET['page'])){
$page = (int)$_GET['page'];
echo "Page Number: ".$page;
}
Aber wie kann ich sicherstellen, dass der übergebene Wert ist eine integer nur und nicht den anderen Mist?
- nicht Sie finden diese:: stackoverflow.com/questions/6416763/...
- Eigentlich keine. Danke für den Hinweis! 🙂 Ich war mir nicht bewusst das
var_dump()
- Was ist Ihr Grund für den Wunsch, um sicherzustellen, dass der Wert ein int? Wenn Sie immer umwandeln in ein int dann nichts anderes mehr durch... der einzige Grund, der mir einfällt, wäre wenn du mal zeigen wollte ist ein Fehler-Seite, wenn nichts anderes durch kommt, oder wenn Sie planen, senden Sie auch mit anderen Datentypen (außer
int
) als Wert vonpage
? Außer, dass Sie brauchen nicht zu überprüfen, ist es Art... Nicht, dass ich mich gegen die Frage - nur die Befragung des in diesem Fall verwenden... wissen um des Wissens Willen ist immer gut 🙂 - Es ist nur so, dass ich nicht wollen, dass Menschen, pass in zufällige Dinge, wie zum Beispiel: wrwh!@67 - ODER etwas bösartiges.
- Ja, wie ich dachte, in diesem Fall, wenn Sie nur jemals auf oder verwenden Sie die
$page
variable, nachdem Sie gewirkt wurden, um einen int - Sie brauchen sich keine sorgen über schädliche Inhalte,... weil alles, was nicht numerisch, wird gegossen, auf 0.echo (int) '//*&73...\\made_up_nonsense...!'; #will echo 0
. Es ist gut zu denken in dieser Hinsicht allerdings 😉 Sie werden nicht glauben, wie viele scripts gibt, die es ermöglichen, etwas übergeben zu werden, und verwendet in beängstigend Möglichkeiten... - Ja... Aber immer noch versuche ich zu halten, da Sie sagen, dass es immer eine gute Praxis, dies zu tun. 🙂
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwendung von filtern:
Diese auch überprüft, ob die variable wird in den query-string zur gleichen Zeit. Wenn Sie möchten, zu unterscheiden zwischen fehlenden und ungültigen, die Sie haben zu verlassen aus dem letzten argument, um
filter_input()
:filter_var()
Funktion zu. Richtig?filter_input()
wenn ich weiß, dass die parameter sollten ausINPUT_GET
- sonst nehme ichfilter_var()
🙂Verwenden
filter_var()
mit derFILTER_VALIDATE_INT
filter drauf, und den Rückgabewert überprüfen.Verwenden is_numeric().
is_int()
wird nicht funktionieren, weil die GET-Parameter immer Strings.Ich habe Links ein paar Kommentare hier und da. Dank der schwachen Typisierung, Funktionen wie
empty
undisset
tendenziell unzuverlässig. Der Schnellste Weg, um zu überprüfen, ob ein parameter ein int ist oder nicht IMO wäre diese:Casting int zu vergleichen und dann die jeweiligen Werte wird true zurückgegeben, nur wenn
$_GET['page']
ist einer gültigen int. Wenn Sie verwenden möchten, strengen Art Vergleich aus irgendeinem Grund (etwas zu tun), könnte man doppelt Darsteller:Aber in diesem speziellen Fall kann ich nicht wirklich erkennen, warum Sie würde wollen, dass
FILTER_VALIDATE_INT
wie in diesem Kommentar: stackoverflow.com/a/12194343/432720(int)
oder sogar die Wahl, diese option wäre überflüssig!!! 😛 Macht Nix. Aber ja... ich Stimme zu. Das würde wirklich zu viel werden.$_GET['page']
könnte ein leerer string sein (''
), in welchem Fall('' == (int)'') === true
während'' == (string)((int)'') === false
... meine Güte, lose Typisierung, gotta love it :sdies ist eine Möglichkeit, wie man prüfen parameter, wenn intetger oder nicht.
Mit
is_int
wird nicht helfen, wahrscheinlich. Alle eingehenden Parameter (einschließlich der $_GET und $_POST) sind als strings geparst PHP. Dieis_int
Funktion überprüft den Datentyp, nicht auf den Wert.ctype_digit
überprüft werden nur die Ziffern aber:is_numeric ist wahrscheinlich das, was Sie brauchen.
Können Sie auch prüfen, mit
es gibt einen boolschen Wert zurück(true,flase)....wenn seine wahre, dann ist es nicht ein integer ist,wenn es falsch sein eine ganze Zahl.
page=12.7548754
gültig?@siehe https://stackoverflow.com/a/41868665/6758130