2015-03-26 5 views
1

Кто-нибудь знает, почему эта функция все еще возвращает false?Почему все еще возвращать false?

функция страницы:

function validateDate($date) 
{ 
    $array = array(); 
    $array = explode("-", $date); 
    if (strlen($array[1]) != 1 || strlen($array[1]) != 2) { 
    return false; 
    } else if (strlen($array[0] != 1 || strlen($array[0] != 2))) { 
    return false; 
    } else if (strlen($array[2] != 4)) { 
    return false; 
    } else if (checkdate($array[1], $array[0], $array[2]) == false) { 
    return false; 
    } else { 
    return true; 
    } 
} 

Validate страница:

if (validateDate($_POST['birth']) == false) { 
    ?><img class="inputCheckImg" src="<?= ICON ?>cross.png"><a class="inputCheckCross">This is not a valid date.</a><? 
} 

И вход: 8-5-1996 или 08-05-1996.
Я пробовал оба, но оба не работают.

+0

'error_reporting (0);' ну это не поможет вам многое, чтобы найти ошибку – Rizier123

+0

упс не удаляется, что. я посмотрю, у вас есть минута? –

+0

Я изменил его в своем коде на 'E_ALL', но все равно никаких ошибок :( –

ответ

2

В самом первом тесте:

if (strlen($array[1]) != 1 || strlen($array[1]) != 2) { 
    return false; 

Каждая строка имеет длину, которая не равна 1, или не равно 2. То есть, строка длины 1 провалят второй части тест, а строка длиной 2 не сможет выполнить первую часть. Измените оператора на &&.

if (strlen($array[1]) != 1 && strlen($array[1]) != 2) { 
    return false; 

Проверьте другие тесты, касающиеся подобных ошибок.

0

ваш StrLen имеет неуместную закрывающую скобку

STRLEN ($ массив [2]) = 1

и т.д.

0

В вашем, если statments, как это:!

if (strlen($array[1]) != 1 || strlen($array[1]) != 2) { 
    return false; 
} 

You 'проверяем, является ли этот элемент! = 1 OR! = 2. Это не будет равным обоим, поэтому один из них будет оценивать true, заставляя функцию возвращать false.

Из того, что я могу сказать, вы, вероятно, захотите использовать оператор & &.

1

Я получил это Thx для Hobo Sapiens и TheChafing.

Но еще 1 вещь, которую я изменил.

вместо != я использовал < или >

Так что теперь:

function validateDate($date) 
{ 
$array = array(); 
$array = explode("-", $date); 
if (strlen($array[1]) < 1 && strlen($array[1]) > 2) { 
    return false; 
    } else if (strlen($array[0] < 1 && strlen($array[0] > 2))) { 
    return false; 
    } else if (strlen($array[2] != 4)) { 
    return false; 
    } else if (checkdate($array[1], $array[0], $array[2]) == false) { 
    return false; 
    } else { 
    return true; 
    } 
} 
+0

ваши другие strlens по-прежнему ошибочны else if (strlen ($ array [0]!= 1 || strlen ($ array [0]! = 2))) { return false; это должно быть else if (strlen ($ array [0])! = 1 && strlen ($ array [0])! = 2) { –

0

Я не использую PHP часто, но мне интересно, почему Kris Zani в downvoted.

мне

 } else if (strlen($array[0] != 1 || strlen($array[0] != 2))) { 
     return false; 
     } 

выглядит сломана в ад и обратно. На мой взгляд, это должно быть:

if (strlen($array[0]) != 1 || strlen($array[0]) != 2) 
Смежные вопросы