у меня возникают проблемы при попытке запустить функцию, когда функция isset () возвращает true - PullRequest
0 голосов
/ 04 ноября 2018

У меня небольшая проблема с моим if(isset($_POST['submit'])) кодом. Я хочу запустить функцию processForm(), когда нажата кнопка отправки формы. Проблема в том, что когда я включаю функцию if(isset($_POST['submit'])), когда я нажимаю на кнопку отправки, processFunction() вообще не запускается. Но когда я включаю if( !isset($_POST['submit'])), функция processForm() запускается ... Почему это и не могли бы вы помочь мне с этим вопросом, пожалуйста

<html>
    <head>
        <title>Membership Form</title>
        <style type="text/css">
            .error { background: #d33; color: white; padding: 0.2em; }
        </style>
    </head>
<body>

    <?php 
        if ( isset($_POST["submit"])) { //if submit input has value
                        processForm();//calls the processForm function
                    }

        function processForm(){ 

            $compulsaryForm = array("firstName" , "lastName", "password" , "passwordRetype");
            $missingFields = array();

            foreach ($compulsaryForm as $input) { //loop
                if (!isset($_POST[$input])) {
                    $missingFields[] = $input;
                } // forget the else part cause we mainly want to avoid the warning msg
            }

            if ($missingFields) {
                echo "<p>there are missingFields</p>";
            }

        }

     ?>

<form action="htmlForms2.php" method="post">

    *name:<input type="text" name="firstName"> <br><br>
    *last name: <input type="text" name="lastName"> <br><br>
    *password<input type="password" name="password"> <br><br>
    *retype password<input type="password" name="passwordRetype"><br><br>

    male:<input type="radio" name="sex"><br>
    female:<input type="radio" name="sex"><br>

    favourite food:<select name = "favourite">
                        <option value="select">select</option>
                        <option value="rice">rice</option>
                        <option value="beans">beans</option>
                    </select><br>

    do you want to recieve news letter?<input type="checkbox" name="newsLetter"><br>

    Any comments? :<input type="text" name="comments"><br>

    <input type="reset" name="reset">
    <input type="submit" name="submit" value="submit">

</form>

1 Ответ

0 голосов
/ 04 ноября 2018

ваш код выглядит нормально с точки зрения проверки поля «отправить». Что не выглядит хорошо, так это строки:

$compulsaryForm = array("firstName" , "lastName", "password" , "passwordRetype");
$missingFields = array();

foreach ($compulsaryForm as $input) { //loop
  if (!isset($_POST[$input])) {
    ...

Все входные данные, которые вы проверяете, будут отправлены в отправке, поэтому isset(...) будет true, они могут быть пустыми , но они обязательно будут существовать. Так что проверьте свою пустоту на стороне сервера или перед отправкой формы, или даже лучше в обоих местах, и она должна работать;)

// Use: count($_POST[$input]) < 5, In case you want to validate the text length 
if ( !isset($_POST[$input]) || empty($_POST[$input]) || count($_POST[$input]) < 5 { 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...