Использование PHP для выполнения действия post, а не из отправки формы

#php #html #forms

#php #HTML #формы

Вопрос:

Это домашнее задание, и мы обязаны использовать PHP. Мы не можем использовать javascript без крайней необходимости.

Моя текущая форма находится в моем первом PHP-документе. При нажатии кнопки отправки он отправляет сообщения самому себе для проверки данных. Я использовал это, чтобы внести изменения в стиль с помощью PHP в рамках одного документа.

Если все подтвердится, это действие будет отправлено на новый PHP с теми же данными, которые только что были отправлены.

Моя форма состоит из 3 текстовых вводов, одного набора переключателей (3 кнопки) и одного набора флажков (4 флажка). Как только все они будут проверены, мне нужно опубликовать эти данные в новом документе PHP для обработки.

Вот мой текущий код:

             // Are all fields fill
            if (isset($_POST['post'])) {
                $isCodeCorrect = checkStatusCodeCorrect();
                $isTextCorrect = checkStatusTextCorrect();
                $isShareOptionCorrect = checkRadioButtonCorrect();
                $isDateCorrect = checkDateCorrect();
                $isPermissionsCorrect = checkPermissionsCorrect();

                if($isCodeCorrectamp;amp;$isTextCorrectamp;amp;$isShareOptionCorrectamp;amp;$isDateCorrectamp;amp;$isPermissionsCorrect){
                    $mainFormAction='action="poststatusprocess.php"';
                }
            }

            function checkStatusCodeCorrect() {
                if(!empty($_POST['statusCode'])){
                    $str1 = $_POST['statusCode'];
                    //Only S0001 style code
                    $statusCodePattern = "/^Sd{4}$/";
                    if(preg_match($statusCodePattern, $str1)){
                        return true;
                    }else return false;
                }else return false;
            }
            function checkStatusTextCorrect() {
                if(!empty($_POST['statusText'])){
                    $str2 = $_POST['statusText'];
                    //Only a-z, A-Z, commas, explanation marks, question marks, apostraphese, and full stops. Case insensitive and global searching and any white space
                    $statusTextPattern = "/([a-z,!?'.s])/i"; 
                    if(preg_match($statusTextPattern, $str2)){
                        return true;
                    }else return false; 
                }else return false;
            }
            function checkRadioButtonCorrect() {
                return !empty($_POST['shareOption']);
            }
            function checkDateCorrect() {
                if(!empty($_POST['date'])){
                    $str3 = $_POST['date'];
                    //Only 2 digits then forward slash, then 2 digits then forward slash and then only 2 or 4 digits for the year
                    $datePattern = "/^((dd) -d{2}-d{2})$/"; 
                    if(preg_match($datePattern, $str3)){
                        return true;
                    }else return false;
                }else return false;
            }
            function checkPermissionsCorrect(){
                if((!empty($_POST['allowLike']))||(!empty($_POST['allowComment']))||(!empty($_POST['allowShare']))||(!empty($_POST['allowNone']))){
                    return true;
                }else return false;
            }
  

Ответ №1:

Вы можете использовать CURL, если у вас установлены модули, в качестве альтернативы, поскольку это домашнее задание, вы, вероятно, должны изучить и понять, как это сделать вручную.

 
/**
 * Send a POST request without using PHP's curl functions.
 *
 * @param string $url The URL you are sending the POST request to.
 * @param array $postVars Associative array containing POST values.
 * @return string The output response.
 * @throws Exception If the request fails.
 */
function post($url, $postVars = array()){
    //Transform our POST array into a URL-encoded query string.
    $postStr = http_build_query($postVars);
    //Create an $options array that can be passed into stream_context_create.
    $options = array(
        'http' =>
            array(
                'method'  => 'POST', //We are using the POST HTTP method.
                'header'  => 'Content-type: application/x-www-form-urlencoded',
                'content' => $postStr //Our URL-encoded query string.
            )
    );
    //Pass our $options array into stream_context_create.
    //This will return a stream context resource.
    $streamContext  = stream_context_create($options);
    //Use PHP's file_get_contents function to carry out the request.
    //We pass the $streamContext variable in as a third parameter.
    $result = file_get_contents($url, false, $streamContext);
    //If $result is FALSE, then the request has failed.
    if($result === false){
        //If the request failed, throw an Exception containing
        //the error.
        $error = error_get_last();
        throw new Exception('POST request failed: ' . $error['message']);
    }
    //If everything went OK, return the response.
    return $result;
}
  

(Взято из здесь)

Эта функция отправит запрос POST из PHP-кода, затем, как только вы подтвердите все поля в вашей одностраничной форме, вы можете вызвать ее с помощью:

 try{
    $result = post('processValidated.php', array(
        'foo' => 'bar',
        'field' => 'Value'
    ));
    echo $result;
} catch(Exception $e){
    echo $e->getMessage();
}
  

Как уже упоминалось, это не совсем стандартный способ ввода формы и проверки данных. Если это небольшая автономная форма, как недопустимые, так и допустимые отправки форм обрабатываются одним php-скриптом или включенными классами, если используется ООП. В качестве альтернативы платформа MVC будет использовать контроллеры и т.д. Для проверки и обработки отправленных форм и соответствующего ответа

Комментарии:

1. Это сработало не так, как я думал, но это сработало. Я отмечу это как ответ, поскольку технически это отвечает. Спасибо за помощь.

Ответ №2:

Просто включите функцию из другого файла и запустите, если все проверки пройдены. В качестве альтернативы вы можете перенаправить на новый URL, но это станет get, а не post. Обычно вы обрабатываете все запросы post в одном месте и перенаправляете заголовок http на некоторую страницу результатов.