My goal is to create a really seamless multi step form for onboarding with only PHP. It stores in sessions and cookies, and retrieves the session data from the cookie if it is stored.
This is what I came up with but I feel it is pretty messy, and the more steps I have the messier it gets. I'm sure there are cleaner ways to do this.
//Sets session & cookie to post
if (isset($_POST['name'])){
$_SESSION['name'] = $_POST['name'];
setcookie("name", $_POST['name']);
}
if (isset($_POST['address'])){
$_SESSION['address'] = $_POST['address'];
setcookie("address", $_POST['address']);
}
if (isset($_POST['city'])){
$_SESSION['city'] = $_POST['city'];
setcookie("city", $_POST['city']);
}
// Sets session to cookie
if (isset($_COOKIE['name'])){
$_SESSION['name'] = $_COOKIE['name'];
}
if (isset($_COOKIE['address'])){
$_SESSION['address'] = $_COOKIE['address'];
}
if (isset($_COOKIE['city'])){
$_SESSION['city'] = $_COOKIE['city'];
}
//Sets post to session
if (isset($_SESSION['name'])){
$_POST['name'] = $_SESSION['name'];
}
if (isset($_SESSION['address'])){
$_POST['address'] = $_SESSION['address'];
}
if (isset($_SESSION['city'])){
$_POST['city'] = $_SESSION['city'];
}
if(!isset($_POST['name']) || !isset($_SESSION['name']) ): ?>
<h2>name</h2>
<form method="post" autocomplete="off">
<input type="text" name="name" autocomplete="off" placeholder="name"><br>
<input value="submit" type="submit">
</form>
<?php elseif (!isset($_POST['address']) || !isset($_SESSION['address']) ): ?>
<h2>address</h2>
<form method="post" autocomplete="off">
<input type="text" name="address" autocomplete="off" placeholder="address"><br>
<input value="submit" type="submit">
</form>
<?php elseif (!isset($_POST['city']) || !isset($_SESSION['city']) ): ?>
<h2>city</h2>
<form method="post" autocomplete="off">
<input type="text" name="city" autocomplete="off" placeholder="city"><br>
<input value="submit" type="submit">
</form>
<?php endif ?>
<form method="post" autocomplete="off">
<input type="text" name="clear_session" value="1" hidden><br>
<input value="clear_session" type="submit">
</form>
<form method="post" autocomplete="off">
<input type="text" name="clear_cookies" value="1" hidden><br>
<input value="clear_cookies" type="submit">
</form>