Перенаправить на новую страницу после проверки PHP

0

Я очень новичок в php и работаю на веб-сайте, который содержит форму для бронирования ресторана. В настоящее время у меня есть один файл, который содержит как html, так и php-код. Форма проверяется после того, как пользователь нажимает кнопку "Отправить", однако мне было интересно, как можно перенаправить пользователя на новую страницу, подтвердив свою оговорку, если вся информация, которую они ввели в форму, верна.

В основном это тот процесс, который я хочу выполнить на веб-сайте:

user fills out form

if validation not complete

   display error messages, loop back to form so user can correct fields

if form is validated fully

    Send user to confirmation page

Вот необходимый код для моей страницы бронирования:

....


<?php
$nameErr = $teleErr = $emailErr = $partyErr = $vipErr = $reservationErr = $timeErr = "";
$name = $tele = $email = $party = $vip = $reservation = $time = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    if (empty($_POST["name"])) {
        $nameErr = "Please enter a full name";
    } else {
        $name = test_input($_POST["name"]);
        if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
            $nameErr = "Invalid name entered";
        }
    }

    if (empty($_POST["tele"])) {
        $teleErr = "Please enter a telephone number";
    } else {
        $tele = test_input($_POST["tele"]);
        if (!preg_match("/^[0-9 ]{7,}$/",$tele)) {
            $teleErr = "Invalid telephone number entered";
        }
    }

    if (empty($_POST["email"])) {
        $emailErr = "Please enter an email address";
    } else {
        $email = test_input($_POST["email"]);
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "Invalid email entered";
        }
    }

    if($_POST['party']=="") {
        $partyErr = "Please select the party size";
    } else {
        $party = test_input($_POST["party"]);
    }

    if (empty($_POST["vip"])) {
        $vipErr = "Please make a VIP area selection";
    } else {
        $vip = test_input($_POST["vip"]);
    }

    if (empty($_POST["reservation"])) {
        $reservationErr = "Please enter the reservation date";
    } else {
        $reservation = test_input($_POST["reservation"]);
        if (!preg_match("/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/",$reservation)) {
            $reservationErr = "Invalid reservation date";
        }
    }

    if($_POST['time']=="") {
        $timeErr = "Please select the reservation time";
    } else {
        $time = test_input($_POST["time"]);
    }
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

<body>

<div id= "container">

<div id="header">
<div id="logo">
<img src="Steakhouselogo.png" width="440" height="152" alt="This is an image of the Steakhouse logo">
</div>
<br>
<p class="slogan"> <strong> Welcome to Steakhouse, the number 1 restaurant for flame grilled goodness. </strong> </p>
</div>
<div id="links">
<ul class="nav">

</ul>
</div>
<br>

<!-- Introduction of HTML form -->
<div id="body">
<h1> Book a Table </h1>
<br><br>

<br>
<div class="view">
<img src="view.png" width="451" height="227" alt="A view of our restaurant">
</div>
<br>

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

<!-- Personal information -->
<div class="form">
<div class="indicates">
<br>
* indicates a required field
</div>
<p  class="ex">
<br><br>
<strong> Full Name* : </strong> <br> <input type="text" placeholder="John Doe" name="name" value="<?php echo $name;?>">
<span class="error"> <?php echo $nameErr;?></span>
<br><br><br>

<strong> Contact Telephone* : </strong> <br> <input type="text" placeholder="Telephone Number" name="tele" value="<?php echo $tele;?>">
<span class="error"><?php echo $teleErr;?></span>
<br><br><br>

<strong> Contact Email* : </strong> <br> <input type="text" placeholder="[email protected]" name="email" value="<?php echo $email;?>">
<span class="error"><?php echo $emailErr;?></span>
<br><br>

<!-- Party requirments -->

<br>
<strong>Select Party Size* :</strong>
<br>
<select name="party" id="party" value="<?php echo $party;?>">
<option value="">Please Select</option>
<option <?php if (isset($party) && $party=="5") echo "selected";?> value="5">1 Person (+£5)</option>
<option <?php if (isset($party) && $party=="10") echo "selected";?> value="10">2 People (+£10)</option>
<option <?php if (isset($party) && $party=="15") echo "selected";?> value="15">3 People (+£15)</option>
<option <?php if (isset($party) && $party=="20") echo "selected";?> value="20">4 People (+£20)</option>
<option <?php if (isset($party) && $party=="25") echo "selected";?> value="25">5 People (+£25)</option>
<option <?php if (isset($party) && $party=="30") echo "selected";?> value="30">6 People (+£30)</option>
<option <?php if (isset($party) && $party=="35") echo "selected";?> value="35">7 People (+£35)</option>
<option <?php if (isset($party) && $party=="40") echo "selected";?> value="40">8 People (+£40)</option>
<option <?php if (isset($party) && $party=="45") echo "selected";?> value="45">9 People (+£45)</option>
<option <?php if (isset($party) && $party=="50") echo "selected";?> value="50">10+ People (+£50)</option>
</select>
<span id="party" class="error"><?php echo $partyErr;?></span>
<br><br><br>
<strong>Dietary Requirements:</strong>
<br><br>
Vegetarian <input type="checkbox" name="diet[]" value="Vegetarian">
<br><br>
Vegan <input type="checkbox" name="diet[]" value="Vegan">
<br><br>
Peanut Allergy <input type="checkbox" name="diet[]" value="Peanut Allergy">
<br><br>
Gluten Allergy <input type="checkbox" name="diet[]" value="Gluten Allergy">
<br><br><br>

<strong> VIP area* : </strong> <br><br>
Yes (+£5) <input type="radio" name="vip" <?php if (isset($vip) && $vip=="Yes") echo "checked";?> value="Yes">
<br><span id="vip" class="error"><?php echo $vipErr;?></span><br>
No <input type="radio" name="vip" <?php if (isset($vip) && $vip=="No") echo "checked";?> value="No">
<br><br><br>

<strong> Reservation Date* : </strong> <br> <input type="text" placeholder="DD/MM/YYYY" name="reservation" value="<?php echo $reservation;?>">
<span class="error"><?php echo $reservationErr;?></span>
<br><br><br>

<strong> Reservation Time* : </strong>
<br>
<select name="time" value="<?php echo $time;?>">
<option value="">Please Select</option>
<option <?php if (isset($time) && $time=="17:00") echo "selected";?> value="17:00">17:00</option>
<option <?php if (isset($time) && $time=="17:30") echo "selected";?> value="17:30">17:30</option>
<option <?php if (isset($time) && $time=="18:00") echo "selected";?> value="18:00">18:00</option>
<option <?php if (isset($time) && $time=="18:30") echo "selected";?> value="18:30">18:30</option>
<option <?php if (isset($time) && $time=="19:00") echo "selected";?> value="19:00">19:00</option>
<option <?php if (isset($time) && $time=="19:30") echo "selected";?> value="19:30">19:30</option>
<option <?php if (isset($time) && $time=="20:00") echo "selected";?> value="20:00">20:00</option>
<option <?php if (isset($time) && $time=="20:30") echo "selected";?> value="20:30">20:30</option>
<option <?php if (isset($time) && $time=="21:00") echo "selected";?> value="21:00">21:00</option>
<option <?php if (isset($time) && $time=="21:30") echo "selected";?> value="21:30">21:30</option>
<option <?php if (isset($time) && $time=="22:00") echo "selected";?> value="22:00">22:00</option>
</select>
<span id="time" class="error"><?php echo $timeErr;?></span>
<br><br><br>
<strong> Any Additional Information: </strong>
<br>
<textarea name="comments" placeholder="Birthdays, Class Parties..." rows="7" cols="40"></textarea>
<br><br>
<div class="totalPrice">
The total reservation price will be calculated automatically once submitted.
<br><br><br>
</div>
<div class="submitEtc">
<input type="submit" id="submit" name="submit" value="Submit">
<input type="reset" value="Reset form">
<br><br><br><br>
....

До сих пор я приложил много усилий, поэтому любые предложения приветствуются. Пожалуйста, помните, что я новичок в веб-языках. Спасибо.

  • 0
    Обычно вы перенаправляете с помощью простого header('Location:someotherpage.php'); если вам нужны какие-либо данные между страницами, используйте сеансы.
  • 0
    @Mihai Михай, спасибо за ответ, друг, я понимаю, что это способ перенаправления, однако я не знаю, как реализовать эту функцию или функцию сессий. Не могли бы вы показать мне пример, так как я очень плохо знаком с веб-языками
Теги:
validation
forms

5 ответов

0
Лучший ответ

Вот ваш код

<?php
  $nameErr = $teleErr = $emailErr = $partyErr = $vipErr = $reservationErr = $timeErr = "";
  $name = $tele = $email = $party = $vip = $reservation = $time = "";

  if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "Please enter a full name";
  } else {
    $name = test_input($_POST["name"]);
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
        $nameErr = "Invalid name entered";
    }
  }

  if (empty($_POST["tele"])) {
    $teleErr = "Please enter a telephone number";
  } else {
    $tele = test_input($_POST["tele"]);
    if (!preg_match("/^[0-9 ]{7,}$/",$tele)) {
        $teleErr = "Invalid telephone number entered";
    }
  }

  if (empty($_POST["email"])) {
    $emailErr = "Please enter an email address";
  } else {
    $email = test_input($_POST["email"]);
    if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $emailErr = "Invalid email entered";
    }
  }

  if($_POST['party']=="") {
    $partyErr = "Please select the party size";
  } else {
    $party = test_input($_POST["party"]);
  }

  if (empty($_POST["vip"])) {
    $vipErr = "Please make a VIP area selection";
  } else {
    $vip = test_input($_POST["vip"]);
  }

  if (empty($_POST["reservation"])) {
    $reservationErr = "Please enter the reservation date";
  } else {
    $reservation = test_input($_POST["reservation"]);
    if (!preg_match("/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/",$reservation)) {
        $reservationErr = "Invalid reservation date";
  }
 }

 if($_POST['time']=="") {
    $timeErr = "Please select the reservation time";
 } else {
    $time = test_input($_POST["time"]);
 }

 if($nameErr == "" && $teleErr == "" && $emailErr == "" && $partyErr == "" && $vipErr == "" &&  $reservationErr == "" && $timeErr == ""){

    header('Location: http://yoursite.com/dashboard');
    exit();

}

 function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
 }

?>

  • 0
    Это пройдет проверку, я верю?
  • 0
    Если вы пойдете по коду, то обнаружите, что он всегда будет проверять нулевое значение для всех переменных, которые вы создали для хранения ошибок. И в php выполнение всегда происходит сверху вниз, а не снизу вверх. Так что вся ваша проверка, если будет выполнена в первую очередь, то она пойдет на перенаправление.
Показать ещё 3 комментария
0

Где вы отправляете данные этой формы?? Для себя или базы данных. В любом случае, после отправки, вы можете повторить любую из этих функций javascript, чтобы перенаправить пользователя на новую страницу через 1 секунду.

echo "<script>
window.setTimeout(function() {
    window.location.href = 'redirect.php';
}, 1000);
</script>";


or


echo '<script>
$(document).ready(function() {  
    window.setInterval(function() {
    var timeLeft    = $("#timeLeft").html();                                
        if(eval(timeLeft) == 0){
                window.location= ("welcome.php");                 
        }else{              
            $("#timeLeft").html(eval(timeLeft)- eval(1));
        }
    }, 1000); 
});  
</script>';
  • 0
    Спасибо за ваш ответ, в настоящее время я не использую базу данных. У меня есть сервер, на который я загрузил страницу, и я хочу, чтобы он перенаправлял после того, как форма заполнена и проверена. Как бы я внедрил ваш пример в мой код?
0

Действительно, вы сделали много осложнений, не используя Arrays. Вы можете в случае существования ошибки установить массив с именем $errors и его ключ должен быть элементом формы, находящейся в проверке. Например, посмотрите следующий синий код печати:

if (!my_check_email($_POST['email'])){
/* my_check_email() is a custom function the performs email validation. It returns true for valid email and it returns false for invalid email 
*/
// Here invalid email
$errors['email'] = true;
} 

Повторите аналогичный стиль кодирования для других элементов формы, которые вы хотите проверить. В конце вам просто нужно проверить, установлены ли $errors или нет:

if (isset ($ errors)) {//сделать необходимый код для недопустимого ввода} else {//Сохранить данные и перенаправить пользователя, используя любое средство перенаправления. }

Средства перенаправления

1-, используя функцию header php, как указано в других ответах. Однако использование функции заголовка должно использоваться перед любым выходом в вашем файле, т.е. перед любым echo или print или даже с любыми новыми строками или html-тегами в вашем файле сценария.

2-, используя javascript cient-side, подобный следующему:

echo "<script>\n
    window.location.href = 'redirect.php';\n
</script>";

3- Использование метатега на стороне клиента:

echo '<meta http-equiv="refresh" content="0;URL=http://www.indiana.edu/~account/new-directory" />';
  • 0
    Большое спасибо за ваш ответ, мне трудно понять, что вы имеете в виду, так как я неопытен в веб-коде. Не могли бы вы показать мне рабочий пример, чтобы я мог лучше понять? Мне действительно нужно, чтобы это работало :(
  • 0
    htmlgoodies.com/beyond/php/article.php/3472451
Показать ещё 1 комментарий
0

Вы можете перенаправить пользователя с помощью header().

header('Location: http://yoursite.com/dashboard');
exit();
  • 0
    Где бы я это реализовал? Когда я попытался реализовать это, прежде чем он просто отправит меня прямо на страницу подтверждения, прежде чем заполнить форму. Я думаю, это потому, что моя структура файла неверна? Не могли бы вы показать мне рабочий пример того, как это может быть реализовано, чтобы я мог получить лучшую идею? :(
0

Попробуй это

<?php
$nameErr = $teleErr = $emailErr = $partyErr = $vipErr = $reservationErr = $timeErr = "";
$name = $tele = $email = $party = $vip = $reservation = $time = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {

    $c = 0;

    if(empty($_POST["name"])) { {
        $nameErr = "Please enter a full name";
        $c++;
    }

    if(!empty($_POST["name"])) {
        $name = test_input($_POST["name"]);
        if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
            $nameErr = "Invalid name entered";
            $c++;
        }
    }

    if (empty($_POST["tele"])) {
        $teleErr = "Please enter a telephone number";
        $c++;
    } 


    if (!empty($_POST["tele"])) {
        $tele = test_input($_POST["tele"]);
        if (!preg_match("/^[0-9 ]{7,}$/",$tele)) {
            $teleErr = "Invalid telephone number entered";
            $c++;
        }
    }

    if (empty($_POST["email"])) {
        $emailErr = "Please enter an email address";
        $c++;
    } 

    if (!empty($_POST["email"])) {
        $email = test_input($_POST["email"]);
        if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
            $emailErr = "Invalid email entered";
            $c++;
        }
    }

    if($_POST['party']=="") {
        $partyErr = "Please select the party size";
        $c++;
    } else {
        $party = test_input($_POST["party"]);
    }

    if (empty($_POST["vip"])) {
        $vipErr = "Please make a VIP area selection";
        $c++;
    } else {
        $vip = test_input($_POST["vip"]);
    }

    if (empty($_POST["reservation"])) {
        $reservationErr = "Please enter the reservation date";
        $c++;
    }

    if (!empty($_POST["reservation"])) {
        $reservation = test_input($_POST["reservation"]);
        if (!preg_match("/^[0-9]{1,2}\/[0-9]{1,2}\/[0-9]{4}$/",$reservation)) {
            $reservationErr = "Invalid reservation date";
            $c++;
        }
    }

    if($_POST['time']=="") {
        $timeErr = "Please select the reservation time";
        $c++;
    } else {
        $time = test_input($_POST["time"]);
    }

    if($c == 0) {
        // redirect here
    }
}

function test_input($data) {
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>
  • 0
    Спасибо за ваш ответ, какой код я должен поместить в раздел "редирект здесь" вашего примера?
  • 0
    заголовок ('location: yoursite.com');
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню