Добрый день, хорошие люди ТАК!
Я пытаюсь сделать двоичный калькулятор, который добавляет две двоичные строки вместе и возвращает результат в двоичном виде.
Тем не менее, мой цикл (используемый для проверки входных данных состоит из 0 или 1), кажется, прерывается и возвращает либо 503 (служба временно недоступна), либо указывает, что я достиг максимального времени выполнения (30 секунд).
Я не могу понять, почему. Кажется, обойти эту проблему, если я изменю &&
в ||
Однако это возвращает ложное срабатывание для плохого ввода.
Вот код:
// Spring cleaning - add some variables
$submit = htmlspecialchars(strip_tags(stripslashes($_POST['submit'])));
$val1 = htmlspecialchars(strip_tags(stripslashes($_POST['val1'])));
$val2 = htmlspecialchars(strip_tags(stripslashes($_POST['val2'])));
$val1_length = strlen($val1);
$val2_length = strlen($val1);
$val1 = str_split($val1, 1);
$val2 = str_split($val2, 1);
// Val 1 - Checking
$count = 0; // count variable counts how many times the loop recurs and stops it appropriately
while ($count <= $val1_length) {
if(($val1[$count] != 0) || ($val1[$count] != 1)) { // checks if input is comprised of 0 or 1
showInputError();
exit(); // input does not contain 0 or 1, abort script and do not attempt further calculations
$count = $count + 1; // increment the count variable after one successful loop
}
} // Val1 was fine
Заранее спасибо! 🙂
Как сказал bwoebi в комментариях, поставьте скобку на одну строку выше в операторе if, так как вы на самом деле не подсчитываете, поэтому цикл будет продолжаться вечно, если значение не найдено ..
$count = 0; // count variable counts how many times the loop recurs and stops it appropriately
while ($count <= $val1_length) {
if(($val1[$count] != 0) || ($val1[$count] != 1)) { // checks if input is comprised of 0 or 1
showInputError();
exit(); // input does not contain 0 or 1, abort script and do not attempt further calculations
}
$count = $count + 1; // increment the count variable after one successful loop
} // Val1 was fine
Почему бы вам просто не использовать простое регулярное выражение вроде
$input= '1101010001010101110101';
preg_match('/^[01]+$/', $input);
Мне кажется, вы не проверяете свою $ val1_length в цикле while. Что произойдет, если ваши значения POST будут пустыми? Вы получите бесконечный цикл, так что вы можете заменить время следующим образом:
while ($count <= $val1_length && !empty($val1_length) {...}