Могу ли я обработать форму с помощью оператора php if else в атрибуте action формы HTML? - PullRequest
0 голосов
/ 24 октября 2018

Я пишу форму для создания логина и пароля.

Если создание учетной записи прошло успешно, я бы хотел, чтобы пользователь затем был перенаправлен на актуальную форму ВХОДА.

Я создал серию проверок с передачей переменной $errcheck, поэтомупрограмма знает что делать.В случае ошибки $errcheck будет установлен на 1.По умолчанию используется значение 0.

Если в полях ввода есть ошибки, форма создания учетной записи будет отображена снова, а если все в порядке, то она ВСТАВИТ данные пользователя в таблицу и приведет пользователя кСтраница входа в систему.

Тем не менее, я могу заставить страницу перезагружаться только каждый раз после добавления информации в таблицу.Что я делаю с частью действия формы даже позволено?Я пошел дальше и включил весь свой код на случай, если возникнут какие-либо вопросы по этому поводу.Спасибо.

<!DOCTYPE html>
    <head>
        <style>
            .error {color: #FF0000;}
        </style>
    </head>
    <body>
    <?php 
        $busow_namef = $busow_namel= $owner_email = $bus_psswd = $psswd_confirm = "";                
        $busname_ERR = $busowname_ERR = $owneremail_ERR = $psswd_ERR =           
        $psswdconfirm_ERR =  "";
        $errcheck = 0;

        if ($_SERVER["REQUEST_METHOD"]=="POST") {
            //??????????????????? Check Login information ???????????????????
            function test_input($data) {
                $data = trim($data);
                $data = stripslashes($data);
                $data = htmlspecialchars($data);
                return $data;
            }

            if (empty($_POST["busow_namef"])) {
                $busowname_ERR = "Business owner's name is required";
                $errcheck = 1;
            } else {
                $busownamef = test_input($_POST["busow_namef"]);
            }

            if (empty($_POST["busow_namel"])) {
                $busowname_ERR = "business owner's name is required";
                $errcheck = 1;
            } else {
                $busownamel = test_input($_POST["busow_namel"]);
            }

            if (empty($_POST["bus_psswd"]))  {
                $psswd_ERR = "You must enter a password.";
                $errcheck = 1;
            } else if ((mb_strlen($_POST["bus_psswd"])) < 8) {
                $psswd_ERR = "The password must be 8-10 characters long and only include numbers and letters.";  
                $errcheck = 1;
            } else {
                $bus_psswd = test_input($_POST["bus_psswd"]);
            }

            if (empty($_POST["psswd_confirm"])) {
                $psswdconfirm_ERR = "Please confirm password.";
                $errcheck= 1;
            } else if  ($_POST["psswd_confirm"] != $_POST["bus_psswd"]) {
                $psswdconfirm_ERR = "The passwords do not match.";
                $errcheck = 1;
            } else {
                $psswd = test_input($_POST["psswd_confirm"]); 
                $h_psswd = password_hash($psswd, PASSWORD_DEFAULT);
            }

            if (empty($_POST["tandc"])) {
                $checktandc_ERR= "You must accept the terms and conditions.";
                $errcheck= 1;
            } else {
                $tandc = test_input($_POST["tandc"]);
            }

            if (empty($_POST["owner_email"])) {
                $owneremail_ERR = "Please enter an email address.";
                $errcheck = 1;
            } else { 
                 $_POST["owner_email"] = (filter_var($_POST["owner_email"], FILTER_SANITIZE_EMAIL));
            }

            if (filter_var($_POST["owner_email"] , FILTER_VALIDATE_EMAIL)){
                $owneremail = $_POST["owner_email"];
            } else {  
                $owneremail_ERR = "Please enter a valid email address.";
                $errcheck = 1;
            }

            //???????????????? Connect to database ??????????????????????????
            $link = mysqli_connect('domain', 'user', 'passwd'); 
            if (!$link) { 
                die('Could not connect: ' . mysqli_error()); 
            } 

            mysqli_select_db(database, $link); 

            if (!mysqli_select_db(louisville_ky1, $link)) {
                echo "database not selected";
            } else { 
                $sql = "SELECT owner_email FROM 3bus_owners WHERE owner_email = '$owneremail' ";
                $result = mysql_query($sql, $link);
                if (mysql_num_rows($result) > 0 ) {
                    $errcheck = 1;
                    $owneremail_ERR =  "This email is already registered. Please register with another address or click login.";
                } else {
                    $errcheck = 0;
                    $query = "INSERT INTO 3bus_owners (owner_email, h_psswd, busow_namef, busow_namel) VALUES ('$owneremail', '$h_psswd', '$busownamef',    
'$busownamel')";
                    $result2 = mysql_query($query, $link);
               } //end if num rows >0
           }//end connection check

       } // ???????????????????? end if server request method ????????????????
    ?>

    <!-- ~~~~~~~~~~~~~~~~~~~~~~~~Begin HTML FORM~~~~~~~~~~~~~~~~~~~~~~~~~ -->
    <h2>Create Business Login</h2>
    <br>
    <form method="post" action="<?php if ($errcheck = 1) { echo  
htmlspecialchars($_SERVER["PHP_SELF"]);
} else { echo 'ownersignin.php'; }?>"> 

        Business Owner's Name:<br> 
        First Name:<br><input type="text" name="busow_namef" value="<?php echo  
$busow_namef;?>">
        <span class="error">* <?php echo $busowname_ERR;?></span>
        <br>
        Last Name:<br><input type="text" name="busow_namel"value="<?php echo   
$busow_namel;?>">
        <span class="error">* <?php echo $busowname_ERR;?></span>
        <br>

        Business Owner's E-mail: *this will be your username for login and does not have to be posted in listing
        <br>
        <input type="text" name="owner_email" size="40"value="<?php echo  
$owner_email;?>">
        <span class="error">*<?php echo $owneremail_ERR;?></span> 
        <br><br>
        Password: <input type="password" name="bus_psswd" size="11" maxlength="10">
        <span class="error">*<?php echo $psswd_ERR;?></span> 
        <br>
        Confirm Password: <input type="password" name="psswd_confirm" size="11" maxlength="10">
        <span class="error">*<?php echo $psswdconfirm_ERR;?></span> 
        <br>
        <br>
        <input type="checkbox" name="tandc">I have read and accept the 
        <a href="/termsandconditions.php" target= "_blank">Terms and 
Conditions</a>.
        <span class="error">*<?php echo $checktandc_ERR;?></span>
        <br>
        <br>
        <input type="submit" name="submit" value="Create Login">
    </form>
</body>

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

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

После всех проверок правильности выполните:

if (!$errcheck) {
    header("Location: ownersignup.php");
    exit;
}
?>
<!-- ~~~~~~~~~~~~~~~~~~~~~~~~Begin HTML FORM~~~~~~~~~~~~~~~~~~~~~~~~~ -->
<h2>Create Business Login</h2>
<br>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"> 
...
0 голосов
/ 24 октября 2018

фрагмент сверху:

<form method="post" action="<?php if ($errcheck = 1) { echo htmlspecialchars($_SERVER["PHP_SELF"]); } else { echo 'ownersignin.php'; }?>"> 

Я никогда не видел атрибут действия формы, написанный таким образом, но ... попробуйте изменить "двойные кавычки" вокруг "PHP_SELF" на одинарные кавычки: $ _SERVER ['PHP_SELF'].Это может вызвать проблему, потому что это может быть интерпретировано как:

action="<?php if ($errcheck = 1) { echo htmlspecialchars($_SERVER["

Затем убедитесь, что этот пример кода не пришел со страницы: "ownersignin.php".Просто звучит так, что это будет имя этой страницы вместо названия страницы, на которую будет перенаправлен бланк.

echo 'ownersignin.php';

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

...