Как я могу оптимизировать этот код? - PullRequest
0 голосов
/ 07 ноября 2010

Как мне оптимизировать следующий код PHP?

<?php

if(strlen($_POST['myName']) < 2 || isNumeric($_POST['myName']))
{
    echo "Please fill in your name!";
    exit();
}

if(!is_numeric($_POST['myAge']) || strlen($_POST['myAge'] < 1))
{
    echo "Please enter only digits!";
    exit();
}

if(strlen($_POST['myRes']) < 2 || isNumeric($_POST['myRes']))
{
    echo "Please enter something!";
    exit();
}

echo "Hi " . $_POST['myName'] . "! you are " . $_POST['myAge'] . " years old and live in " . $_POST['myRes'] . "? Nice to meet you!";

?> 

Что, если я хочу протестировать, скажем, 100 входов - как бы я сделал это наилучшим образом?

Ответы [ 3 ]

8 голосов
/ 07 ноября 2010

Не знаю о скорости, но с точки зрения стиля ваш код может быть улучшен следующим образом (один из многих возможных способов, конечно).

function p($key) {
    return isset($_POST[$key]) ? trim($_POST[$key]) : null;
}

$name = p('myName');
$age  = intval(p('myAge'));
$res  = p('myRes');

$err  = array();

if(!preg_match('~^\w{3,}+$~', $name))
    $err[] = "Please fill in your name!";

if($age < 3 || $age > 99)
    $err[] = "Please enter a valid age";

if(!preg_match('~^\w{3,}+$~', $res))
    $err[] = "Please fill in your location!";

if($err)
    echo implode("<br>", $err);
else
    echo "Hi $name! you are $age years old and live in $res? Nice to meet you!";

Обратите внимание на важные моменты

  • избегайте прямого доступа к суперглобалам, таким как $ _POST во всем коде
  • использовать регулярные выражения для проверки строк
  • принудительно преобразовать целое число при ожидании числа
  • избегать выхода ()
  • использовать интерполяцию строк вместо конкатенации
1 голос
/ 08 ноября 2010

Если вы хотите проверить форму, попробуйте http://docs.jquery.com/Plugins/validation#Validate_forms_like_you.27ve_never_been_validating_before.21 Это клиентская часть, так что вам все равно нужна какая-то проверка на стороне сервера, но это всегда облегчает мне

1 голос
/ 07 ноября 2010

Хорошо. На самом деле вы должны добавить проверку на isset() перед использованием любой из переменных $ _POST, и вы можете изменить strlen($_POST['myAge'] < 1) (обратите внимание, что ваш ) находится в неправильном месте) на empty($_POST['myAge'])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...