Nano Hash - криптовалюты, майнинг, программирование

Проверка на стороне сервера PHP

Используя различные учебные пособия, а именно здесь и здесь я Мне удалось собрать следующий PHP-скрипт, который выполняет проверку на стороне сервера в отправляемой форме. (У меня уже есть скрипт, который занимается проверкой «клиентской стороны».

<?php
//email signup ajax call
if($_GET['action'] == 'signup'){

    //sanitize data
    $email = mysql_real_escape_string($_POST['signup-email']);

    //validate email address - check if input was empty
    if(empty($email)){
        $status = "error";
        $message = "You did not enter an email address!";
    }
    else if(!preg_match('/^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/', $email)){ //validate email address - check if is a valid email address
            $status = "error";
            $message = "You have entered an invalid email address!";
    }
    else {

            $insertSignup = mysql_query("INSERT INTO signups (signup_email_address) VALUES ('$email')");
            if($insertSignup){ //if insert is successful
                $status = "success";
                $message = "You have been signed up!";  
            }
            else { //if insert fails
                $status = "error";
                $message = "Ooops, Theres been a technical error!"; 
            }

    }

    //return json response
    $data = array(
        'status' => $status,
        'message' => $message
    );

    echo json_encode($data);
    exit;
}
?>

Сейчас я пытаюсь добавить еще одно поле, в данном случае «имя», которое я также хотел бы проверить.

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

Мне просто интересно, может ли кто-нибудь взглянуть на это, пожалуйста, и, возможно, указать мне правильное направление.

Большое спасибо и с уважением


  • Я с мобильных устройств, поэтому у меня нет общего комментария, но функции mysql_* устарели. Найдите один из моих комментариев, чтобы узнать больше. 02.09.2012
  • Привет @Truth, большое спасибо за это. Часть кода уже использовалась, но это то, что я буду реализовывать. С уважением 02.09.2012
  • Вот оно :). Пожалуйста, не используйте mysql_* функции для написания нового кода. Они больше не поддерживаются, и сообщество начало процесс устаревания. Видите красное поле? Вместо этого вам следует изучить подготовленные операторы и использовать либо PDO или MySQL. Если вы не можете решить, какая из них, вам поможет эта статья. Если вы выберете PDO, вот хороший учебник. 02.09.2012
  • Привет @Truth, я очень ценю ссылку и руководство. Я сейчас смотрю на это. Большое спасибо и с уважением 03.09.2012

Ответы:


1

PHP имеет расширение фильтра для проверки и очистки ввода.

Функция, которую вы ищете,

Существует также filter_input_array, но, поскольку нет простого способа правильно выполнить модульное тестирование, проще использовать вместо этого вышеприведенный вариант и передавать его суперглобальным значениям по мере необходимости.

Пример:

$userInput = array(
    'signup-email' => 'foo at example.com',
    'name' => 'ArthurDent42'
);

$validatedInput = filter_var_array(
    $userInput, 
    array(
        'signup-email' => FILTER_VALIDATE_EMAIL,
        'name' => array(
            'filter' => FILTER_VALIDATE_REGEXP,
            'options' => array(
                'regexp' => "/^[a-z ]{5,10}$/i"
            )
        )
    )
);

var_dump($validatedInput);

Вывод (демонстрация):

array(2) { 
    ["signup-email"]=> bool(false) 
    ["name"]=> bool(false)
}

После того, как вы подтвердите и продезинфицируете ввод, поместите несколько защитных предложений для каждого из значений в массиве и вернитесь раньше, если они ложны:

if (!$validatedInput['signup-email']) {
    return json_encode(array(
        'status' => 'error',
        'message' => 'The eMail was invalid'
    ));
}

if (!$validatedInput['name']) {
    return json_encode(array(
        'status' => 'error',
        'message' => 'Name must be 5 to 10 letters from A to Z only'
    ));
}

// everything's validated at this point. Insert stuff to database now.

Обратите внимание, что вы хотите использовать либо PDO, либо mysqli вместо ext/mysql.

02.09.2012
  • Привет @Gordon, большое спасибо, что прислали мне это, это именно то, что мне нужно. С уважением 02.09.2012

  • 2

    В HTML добавьте поле:

    <input type="text" name="name" value="" />
    

    В вашем PHP:

    $name = trim($_POST['name']);
    

    Чтобы подтвердить:

    if ($name === '') {
        $status = 'error';
        $message = 'need a name!';
    }
    

    Теперь добавьте имя к оператору вставки (было бы лучше использовать подготовленные операторы PDO ):

    $nameSql = mysql_real_escape_string($name);
    $insertSignup = mysql_query("INSERT INTO signups (signup_email_address, name) VALUES ('$email', '$nameSql')");
    
    02.09.2012
  • Привет @jspcal, большое спасибо за это. Это было очень полезно. С уважением 02.09.2012

  • 3
  • Привет @EbinPaulose, большое спасибо, что нашли время ответить на мой пост и за решение. С уважением 02.09.2012
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..