Form giriş PHP sayısal olup olmadığını nasıl kontrol edebilirim?

8 Cevap php

PHP bir form giriş sayısal olup olmadığını görmek gerekiyor. Bu sayısal değilse, web sitesi yönlendirmelidir. Ben is_numeric denedim () ama çalışmak için görünmüyor.

Kod örnekleri güzel olacak.

Ben miktar için bir interger değer kabul eden bir alışveriş sepeti geliştiriyorum. Ben bu çalışıyorum:

if(!is_numeric($quantity)){
                //redirect($data['referurl']."/badinput");
                echo "is not numeric";
        }

8 Cevap

if(!is_numeric($quantity == 0)){
                //redirect($data['referurl']."/badinput");
                echo "is not numeric";

What you have here are two nested conditions. Let's say $quantity is 1.

The first condition evaluates 1 == 0 and returns FALSE. The second condition checks if FALSE is numeric and returns FALSE because FALSE is not numeric.

Sadece yazmak:

if (!is_numeric($quantity))
{
    echo 'is not numeric';
}

Integral, kayan nokta, üstel gösterimle vb - Muhtemelen "sayısal" ile ne demek açıklamak gerekir? is_numeric() tüm bu kabul edecektir.

Bir dize basamak başka bir şey içerdiğini kontrol etmek istiyorsanız, o zaman, örneğin, normal bir ifade kullanabilirsiniz

/^\d+$/

Eğer bir tamsayı sanki gerçek değerini kullanmak için gidiyoruz eğer, muhtemelen değer ayrıştırılır edilemez ise intval() anyway, which will return 0 aracılığıyla geçmek isteyeceksiniz - eğer {[ (2)]} geçerli bir değer, o zaman muhtemelen belki değerin düşük aralığını kısıtlayarak, bir şekilde bu ele almak gerekecek, olduğunu.

Ayrıca JavaScript kullanarak giriş bazı istemci tarafı doğrulama yapmak akıllıca olabilir.

Geri sunucuya gidiş-dönüş ve bir yazım hatası anlamına olabilir ne için uzun bir tane, ve istemci tarayıcı önceden kalite güvencesi biraz yapmak yaparak sunucu yükünü azaltmak gerekir.

is_int ve is_numeric edin. Her bağlantı örnekleri vardır. Daha fazla yardıma ihtiyacınız olursa, ben sizinle sorunlar ve bir kod örneği yaşıyorsanız veri göndermek istiyorum.

EDIT:

$quantity == 0

Bir boolean değeri dönecektir beri her zaman, sayısal olacaktır (1 veya 0). Bunu yapmak için doğru şey:

if ( is_numeric( $quantity ) ) {
...
}

veya

if ( is_int( $quantity ) ) {
...
}

Bunun yerine basamak kontrol etmek için düzenli ifadelerin, ben kullanmak istiyorum, ancak Rob, ne dedi ctype_digit

Tharkun şimdiye kadar en iyi cevabı var. Eğer böyle bir soru soruyorsun, o gerçekten henüz reg-exp etrafında oluyor karıştırmasını başlamak istemiyorum bu benim tahminim.

Mantık yeniden düşünmek. Neden $ miktar == 0 sayısal bir sonucu olup olmadığını görmek için kontrol etmek istiyorsun? Hataları önlemek için çalışıyorsanız b / c biraz geç kontrol ediyoruz, bir atanmış bir değere sahip değil miktar için mümkün olduğunu düşünüyorum. Bu uygulama çok yaygın (ve hain) güvenlik delik - $ miktar tüm kullanıcı girişinden de türetilmiş bir değeri varsa, bu yürütme bu noktaya ulaşmadan önce girdiyi emin olun. Sorunun küçük bir parçası olarak, daha önce girişi dezenfekte çünkü, varsayılan bir değer atamak gerekmez (ve bir 'hayır girdi' durumla başa çıkmak istiyorum nerede sanitization olduğunu).

İyi şanslar!

Düzenli ifadeler kullanın: /^\d+$/ sorunu çözmek gerekir