Hi
I am trying to make this system whereby the user can add form fields based on what number they type in.
It seems to work after I have pushed "Next step" - which comes up with an error, and then push "Add".
I am using sessions and I don't know how to keep all the items when they click "Add" or "Next step" as they are different form fields. I was wondering about putting them all into an array and then exploding them into comma separated entries.
Here is the order page:
<?php
session_start();
$pgn="order";
include("inc/header.php");
if($_SESSION['order_status'] == "")
{
$topsteps = "<p class=\"topsteps\"><a href=\"order.php?step=1\">Step 1</a> | Step 2 | Step 3</p>";
}
elseif($_SESSION['order_status'] == "2")
{
$topsteps = "<p class=\"topsteps\"><a href=\"order.php?step=1\">Step 1</a> | <a href=\"order.php?step=2\">Step 2</a> | Step 3</p>";
}
elseif($_SESSION['order_status'] == "3")
{
$topsteps = "<p class=\"topsteps\"><a href=\"order.php?step=1\">Step 1</a> | <a href=\"order.php?step=2\">Step 2</a> | <a href=\"order.php?step=3\">Step 3</a></p>";
}
?>
<div id="content">
<p class="header">Order</p>
<?php
switch ($step)
{
default:
?>
<?php echo "$topsteps";
?>
<p class="header">Step 1: Personal details</p>
<form method="post" action="inc/order.php?step=1" id="orderform">
<div class="form" id="orderformformat">
<?php if($_GET['msg'] == "error")
{
echo "<div class=\"error\">Please fill in:<ul>$message</ul></div>";
}
?>
<p class="explanation">Please fill in your personal details</p>
<label for="first_name">First name:</label>
<input type="text" id="first_name" name="first_name" value="<?php echo $_SESSION['first_name'];
?>" />
<br />
<label for="last_name">Last name:</label>
<input type="text" id="last_name" name="last_name" value="<?php echo $_SESSION['last_name'];
?>" />
<br />
<label for="cellphone">Cellphone:</label>
<input type="text" id="cellphone" name="cellphone" value="<?php echo $_SESSION['cellphone'];
?>" />
<br />
<label for="street_number">Street number:</label>
<input type="text" id="street_number" name="street_number" value="<?php echo $_SESSION['street_number'];
?>" />
<br />
<label for="street_name">Street name:</label>
<input type="text" id="street_name" name="street_name" value="<?php echo $_SESSION['street_name'];
?>" />
<br />
<label for="street_name">Suburb:</label>
<input type="text" id="suburb" name="suburb" value="<?php echo $_SESSION['suburb'];
?>" />
<br />
<label for="city">City:</label>
<select id="city" name="city">
<option<?php if($_SESSION['city'] == "Wellington")
{
echo " selected=\"selected\"";
}
?>>Wellington</option>
<option <?php if($_SESSION['city'] == "Palmerston North")
{
echo "selected=\"selected\"";
}
?>>Palmerston North</option>
</select>
<br />
<label for="city">Email address:</label>
<input type="text" id="email_address" name="email_address" value="<?php echo $_SESSION['email_address'];
?>" />
<br />
<br />
<input type="submit" value="Next step -> Adding your items" />
</div>
</form>
<?php
break;
case "2": ?>
<?php if($_SESSION['order_status'] == "1")
{
die("<div class=\"error\">You need to do step one fully first</div>");
}
?>
<?php echo "$topsteps";
?>
<p class="header">Step 2: Adding your items</p>
<form method="post" action="inc/order.php?step=2" id="orderform">
<div class="form" id="orderformformat">
<?php if($_GET['msg'] == "error")
{
echo "<div class=\"error\">Please fill in:<ul>$message</ul></div>";
}
?>
<ol>
<?php
if($_SESSION['items_submitted'] !== "yes") {
$item_offset = 5; } else {
$item_offset = $_SESSION['item_offset'];
}
for($i = 1;
$i <= $item_offset;
$i++)
{
echo "<li><input type=\"text\" id=\"item_".$i."\" name=\"item_".$i."\" value=\"" . $_SESSION['item_$i'] . "\" /></li>";
}
?>
</ol>
<p>You can add some more items at $25 per item:</p>
<input type="hidden" id="item_offset" name="item_offset" value="<?php echo "$item_offset"; ?>">
<input type="text" id="addnumber" name="addnumber" size="2" />
<input type="submit" value="Add" id="Add" name="Add" />
<br />
<input type="submit" value="Next step" id="next_step" name="next_step" />
<hr />
</form>
</div>
<?php
break;
case "3": ?>
<form method="post" action="inc/order.php?step=1" id="orderform">
<div class="form" id="orderformformat">
<?php if(($_SESSION['order_status'] == "1") || ($_SESSION['order_status'] == "2"))
{
die("<div class=\"error\">You need to do the first two steps fully first</div>");
}
?>
<?php echo "$topsteps";
?>
<p class="explanation">When would you like us to pick it up?</p>
<!-- calendar -->
<br />
<label for="time">Time:</label>
<input type="text" name="time" id="time" size="2" value="11.00" onClick="this.value='';
" name="time"/>
<select name="timeset">
<option>am</option>
<option>pm</option>
</select>
<p class="datetimeoptions" style="hidden"></p>
<input type="submit" value="Submit order" />
</div>
</form>
<?php
}
?>
</div>
</div>
<?php include("inc/footer.php");
?>
And the process page
<?php
/* Start a new session for confirmation and error purposes */
session_start();
$_SESSION['message'] = '';
$_SESSION['msg'] = '';
$_SESSION['item_offset'] = '';
error_reporting(E_ALL);
if($_GET["step"]=="1") {
session_register ("first_name");
session_register ("last_name");
session_register ("street_number");
session_register ("street_name");
session_register ("cellphone");
session_register ("city");
session_register ("suburb");
session_register ("email_address");
session_register ("msg");
session_register ("message");
session_register ("order_status");
$first_name = stripslashes(trim($_POST["first_name"]));
$last_name = stripslashes(trim($_POST["last_name"]));
$cellphone = stripslashes(trim($_POST["cellphone"]));
$street_number = stripslashes(trim($_POST["street_number"]));
$street_name = stripslashes(trim($_POST["street_name"]));
$suburb = stripslashes(trim($_POST["suburb"]));
$city = stripslashes(trim($_POST["city"]));
$email_address = stripslashes(trim($_POST["email_address"]));
$_SESSION['first_name'] = $first_name;
$_SESSION['last_name'] = $last_name;
$_SESSION['cellphone'] = $cellphone;
$_SESSION['street_number'] = $street_number;
$_SESSION['street_name'] = $street_number;
$_SESSION['suburb'] = $suburb;
$_SESSION['city'] = $city;
$_SESSION['email_address'] = $email_address;
$error="no";
if($first_name=='') {
$message = "<li>First name</li>";
$error = "yes";
}
if($last_name=='') {
$message .= "<li>Last name</li>";
$error = "yes";
}
if($cellphone=='') {
$message .= "<li>Cellphone</li>";
$error = "yes";
}
if($street_number=='') {
$message .= "<li>"."Street number</li>";
$error = "yes";
}
if($street_name=='') {
$message .= "<li>Street name</li>";
$error = "yes";
}
if($suburb=='') {
$message .= "<li>Suburb</li>";
$error = "yes";
}
$okay = preg_match(
'/^[A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{2,4}$/',
$email_address
);
if ($okay) {
$valid = TRUE;
} else {
$valid = FALSE;
}
if($email_address=='') {
$message .= "<li>Email address</li>";
$error = "yes";
}elseif(!$valid) {
$message .= "<li>Valid email address</li>";
$error = "yes";
}
if($error=="yes") {
$_SESSION['order_status'] = "1";
$_SESSION['message'] = $message;
$_SESSION['msg'] = "error";
header("Location: http://www.williamparry.com/studentstorage/order.php?step=1&msg=error");
} elseif($error=="no") {
/* find a better way to make sure they have done the previous step */
$_SESSION['order_status'] = "2";
header("Location: http://www.williamparry.com/studentstorage/order.php?step=2");
}
}
if(($_GET["step"]=="2")&&(isset($_POST["Add"])))
{
session_register ("item_offset");
$item_offset = stripslashes(trim($_POST["item_offset"]));
$addnumber = stripslashes(trim($_POST["addnumber"]));
$_SESSION['item_offset'] = $item_offset + $addnumber;
header("Location: http://www.williamparry.com/studentstorage/order.php?step=2");
} elseif(($_GET["step"]=="2")&&(isset($_POST["next_step"]))) {
$error="no";
session_register ("items");
session_register ("msg");
session_register ("message");
session_register ("item_offset");
session_register ("items_submitted");
$_SESSION['items'] = $items;
$_SESSION['item_offset'] = $item_offset;
$_SESSION['items_submitted'] = "yes";
if($items=='') {
$message .= "<li>Please fill in your items</li>";
$error = "yes";
}
if($error=="yes") {
$_SESSION['order_status'] = "2";
$_SESSION['message'] = $message;
$_SESSION['msg'] = "error";
header("Location: http://www.williamparry.com/studentstorage/order.php?step=2&msg=error");
} elseif($error=="no") {
/* find a better way to make sure they have done the previous step */
$_SESSION['order_status'] = "2";
header("Location: http://www.williamparry.com/studentstorage/order.php?step=2&msg=total");
}
}
?>