Hướng dẫn php is_null not working - php is_null không hoạt động

dispatch_address_postcode

không bắt buộc và nó vẫn sẽ chạy ngay cả khi nó trống:

if (!is_null($_POST['personal_info_first_name']) && 
    !is_null($_POST['personal_info_surname']) && 
    !is_null($_POST['personal_info_email']) && 
    !is_null($_POST['personal_info_telephone']) && 
    !is_null($_POST['dispatch_address_country']) && 
    !is_null($_POST['dispatch_address_first_name']) &&
    !is_null($_POST['dispatch_address_surname']) && 
    !is_null($_POST['dispatch_address_address']) && 
    !is_null($_POST['dispatch_address_town']) && 
    !is_null($_POST['dispatch_address_postcode']) && 
    !is_null($_POST['dispatch_address_county']) && 
    (   ($_POST['payment_method'] == "Pay by credit card.") ||
        (
            ($_POST['payment_method'] == "Pay by new credit card.") && 
            !is_null($_POST['card_number']) && 
            !is_null($_POST['expiration_date']) && 
            !is_null($_POST['security_code'])
        )
    )
)

Đưa cái gì?

Hướng dẫn php is_null not working - php is_null không hoạt động

Thetaiko

7.7482 Huy hiệu vàng32 Huy hiệu bạc49 Huy hiệu đồng2 gold badges32 silver badges49 bronze badges

hỏi ngày 19 tháng 7 năm 2010 lúc 22:31Jul 19, 2010 at 22:31

JoecortopassijoecortopassiJoeCortopassi

5.0536 Huy hiệu vàng36 Huy hiệu bạc65 Huy hiệu Đồng6 gold badges36 silver badges65 bronze badges

1

"dispatch_address_postcode không bắt buộc và nó vẫn sẽ chạy ngay cả khi nó trống rỗng"

Chỉ cần nhìn vào câu đó một lần nữa. Nếu trường không bắt buộc, sẽ hoàn toàn ổn nếu mã chạy nếu trường trống. Nếu một lĩnh vực không bắt buộc, đừng kiểm tra nó là bắt buộc.

Vấn đề thực sự là mặc dù, is_null chỉ kiểm tra nếu biến là null. Các giá trị được đăng sẽ không bao giờ là null, nếu chúng trống, chúng sẽ là '' (một chuỗi trống). Tất cả các bài kiểm tra

$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
0 của bạn sẽ luôn là
$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
1 và bạn sẽ nhận được cảnh báo nếu biến không được đặt (điều bạn không muốn xảy ra). Bài kiểm tra thích hợp hơn sẽ là
$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
2.always be
$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
1, and you will get a warning if the variable isn't set (something you don't want to happen). The more appropriate test would be
$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
2.

Thậm chí các bài kiểm tra thích hợp hơn sẽ bao gồm một bài kiểm tra nếu giá trị có vẻ hợp lệ (email có giống như một địa chỉ email, điện thoại có ít nhất X chữ số trong đó không?). Bạn cũng nên lặp qua các trường để làm cho mã của bạn dễ đọc hơn, được lồng vô tận và các điều kiện

$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
3 không có niềm vui để xem xét.

$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}

Đã trả lời ngày 19 tháng 7 năm 2010 lúc 23:27Jul 19, 2010 at 23:27

3

Có vẻ như bạn đang cố gắng đảm bảo tất cả các biến bài đăng được gửi. Bạn có muốn giúp đỡ với điều đó không?

Sử dụng! Clan () có thể không phải là câu trả lời cho câu hỏi cụ thể của bạn, nhưng nó chắc chắn sẽ giúp với những gì bạn đang cố gắng làm.

trống () trả về true nếu khóa $ _post không được đặt, nếu đó là một mảng trống hoặc ngay cả khi đó là một chuỗi trống, vì vậy hãy sử dụng! click () là một cách tốt để đảm bảo rằng người dùng đã điền vào thông tin .

Đã trả lời ngày 19 tháng 7 năm 2010 lúc 22:40Jul 19, 2010 at 22:40

NavarrnavarrNavarr

3.6437 Huy hiệu vàng32 Huy hiệu bạc57 Huy hiệu Đồng7 gold badges32 silver badges57 bronze badges

1

Hãy thử viết chức năng

$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
4 của riêng bạn và sử dụng nó thay vì is_null.

Ví dụ (và điều này không có nghĩa là toàn diện):

function is_valid(&$array, $key, $required=false) {
    if(!array_key_exists($array))
        return false;
    $value = trim($array[$key]);
    if(empty($value) && $required)
        return false;
    return true;
}

Sử dụng như vậy:

$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
6

Đã trả lời ngày 19 tháng 7 năm 2010 lúc 22:46Jul 19, 2010 at 22:46

Thetaikothetaikothetaiko

7.7482 Huy hiệu vàng32 Huy hiệu bạc49 Huy hiệu đồng2 gold badges32 silver badges49 bronze badges

1

!is_null($_POST['personal_info_first_name']) && !isset($_POST['personal_info_first_name'])

hỏi ngày 19 tháng 7 năm 2010 lúc 22:31Jul 19, 2010 at 22:35

3

Joecortopassijoecortopassi

5.0536 Huy hiệu vàng36 Huy hiệu bạc65 Huy hiệu ĐồngJul 19, 2010 at 22:41

"dispatch_address_postcode không bắt buộc và nó vẫn sẽ chạy ngay cả khi nó trống rỗng"Casey

Chỉ cần nhìn vào câu đó một lần nữa. Nếu trường không bắt buộc, sẽ hoàn toàn ổn nếu mã chạy nếu trường trống. Nếu một lĩnh vực không bắt buộc, đừng kiểm tra nó là bắt buộc.3 gold badges21 silver badges35 bronze badges

1

Vấn đề thực sự là mặc dù, is_null chỉ kiểm tra nếu biến là null. Các giá trị được đăng sẽ không bao giờ là null, nếu chúng trống, chúng sẽ là '' (một chuỗi trống). Tất cả các bài kiểm tra

$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
0 của bạn sẽ luôn là
$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
1 và bạn sẽ nhận được cảnh báo nếu biến không được đặt (điều bạn không muốn xảy ra). Bài kiểm tra thích hợp hơn sẽ là
$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
2.

Thậm chí các bài kiểm tra thích hợp hơn sẽ bao gồm một bài kiểm tra nếu giá trị có vẻ hợp lệ (email có giống như một địa chỉ email, điện thoại có ít nhất X chữ số trong đó không?). Bạn cũng nên lặp qua các trường để làm cho mã của bạn dễ đọc hơn, được lồng vô tận và các điều kiện

$mandatoryFields = array('foo' => 'email', 'bar' => 'telephone');

foreach ($mandatoryFields as $field => $rule) {
    if (empty($_POST[$field]) || !validateByRule($_POST[$field], $rule)) {
        raiseHell();
    }
}
3 không có niềm vui để xem xét. - read the comments for great info on why this is bad

Đã trả lời ngày 19 tháng 7 năm 2010 lúc 23:27

Có vẻ như bạn đang cố gắng đảm bảo tất cả các biến bài đăng được gửi. Bạn có muốn giúp đỡ với điều đó không?JUST found that this will work. Instead of all that isset and things, just assign the variables programmatically! I think I have some refactoring to do... y'know on all my code...

if (!is_array($_POST)){exit "$_POST isn't an array";}
foreach ($_POST as $param => $value){
    ${$param} = secure($value);
}

//now you have a set of variables that are named exactly as the posted param
//for example, $_POST['personal_info_first_name'] == $personal_info_first_name

if ($payment_method == "Pay by credit card."){
    //do stuff that you were gonna do anyways
} else if ($payment_method == "Pay by new credit card.") {
    if ($card_number && $expiration_date && $security_code){
        //do stuff that you were gonna do anyways
    } else {
        exit("info missing for credit card transaction");
    }
} else {
    exit("unknown payment method")
}

function secure($input){
    //sanitize user input
}

Sử dụng! Clan () có thể không phải là câu trả lời cho câu hỏi cụ thể của bạn, nhưng nó chắc chắn sẽ giúp với những gì bạn đang cố gắng làm.

trống () trả về true nếu khóa $ _post không được đặt, nếu đó là một mảng trống hoặc ngay cả khi đó là một chuỗi trống, vì vậy hãy sử dụng! click () là một cách tốt để đảm bảo rằng người dùng đã điền vào thông tin .Jul 19, 2010 at 23:35

Đã trả lời ngày 19 tháng 7 năm 2010 lúc 22:40TCCV

Navarrnavarr4 gold badges24 silver badges30 bronze badges

6