Değeri 0 olarak ayarlanırsa, PHP boş ($ val) işlevi true döndürür

4 Cevap php

Ben şu PHP kodu:

$required_fields = array ('menu_name','visible','position');
foreach($required_fields as $fieldname)
{
    if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname]) )
    {
        $errors [] = $fieldname;
    }
}

menu_name, visible ve position sonrası yöntemiyle alınan değişkenler vardır.

Değeri visible sıfır olduğunda, hata diziye bir girdi oluşturur.

0 "boş değil" olarak kabul edilir zaman bir değişkenin boş olup olmadığını tespit etmek için en iyi yolu nedir?

4 Cevap

Kullanıcı verileri özensiz olduğundan, ben olmayan veri olarak boş alanlar davranır özel bir işlevini kullanın. Bu tam olarak ne istediğinizi yapacak gibi geliyor. Bu işlev geçerli (aka boş olmayan) veriler olarak "0" dikkate alacaktır.

function isNullOrEmpty( $arg )
{
    if ( !is_array( $arg ) )
    {
        $arg = array( $arg );
    }

    foreach ( $arg as $key => $value )
    {
        $value = trim($value);
        if( $value == "" || $value == null )
        {
            return true;
        }
    }
    return false;
}

Çok dizilerini destekler ama dizideki her değeri sadece böyle bir şey yapmak gibi yararlı olabilir verileri içerdiğini gerektirir unutmayın:

$required = array( $_POST['name'],  $_POST['age'], $_POST['weight'] );
if ( isNullOrEmpty($required) )
{
  // required data is missing
}

PS: değeri set ve etrafında kolay bir yolu yok değil ise bu fonksiyon PHP uyarıları ateşlenmesine akılda tutmak, ancak her durumda üretimde etkin uyarıları olmamalıdır.

PHP'nin gelen manual:

empty() returns FALSE if var has a non-empty and non-zero value.

Böyle bir şey yapın:

if ( !IsSet ( $_POST['field'] ) || Trim ( $_POST['field'] ) == '' )

Bu bir boş dize içermiyor alan ayarlanmış olduğundan ve sağlayacaktır

Özünde: o empty() bu sorunlara neden değil IsSet() olduğunu

Eğer temin etmek istiyorsanız, bir dizi anahtar array_key_exists() yerine boş kullanımı () olabilir mevcut

Çek elbette paranoyak, bir is_array ayrımı () ve array_key_exists () olacak

Sadece gibi bir şey ile başka bir satır eklemek değil miyim:

if (!isset($_POST[$fieldname]) || empty($_POST[$fieldname]) )
{
    if ($fieldname != 'visible' || $_POST[$fieldname] != 0)
    { 
        $errors [] = $fieldname;
    }
}