Hi I am creating a simple brochure request form to capture users brand and price information along with their email id. I created code for three pages (Page1.php is for brand selection, Page2.php is for price range and email address. I get user selected value for page1.php in the next page but I am not getting values in mail page (I need to collect those two page values here and submit to email). Please find the pages code below. Please help.
page1.php
<html>
<body bgcolor="#fff" text="#000" >
<form method="post" action="page2.php">
<p>Which car you want to buy?<P>
<TABLE border="1" width="500">
<TR ><TD><input type="checkbox" value ="ferrari" name="brand[]"><TD>Ferrari</td></TR>
<TR><TD><input type="checkbox" value ="mercedes" name="brand[]"><TD>Mercedes</td></TR>
<TR><TD><input type="checkbox" value ="bugatti" name="brand[]"><TD>Bugatti</td></TR>
</TABLE>
<input type="hidden" value="1" name="car_brand" >
<p>
<input type="submit" value="Continue" >
</form>
</body>
</html>
page2
<html>
<body bgcolor="#fff" text="#000" >
<div id="firstpage-value" style="border:1px solid #000;">
<h4>Selected Brand</h4>
<?php
if(isset($_POST['car_brand']))
{
$count=count($_POST['brand']);
for($i=0;$i<$count;$i++)
{
echo $_POST['brand'][$i]." ";
}
}
?>
</div>
<form method="post" action="mail.php">
<p>Choose a Price Range<P>
<TABLE border="1" width="500">
<TR ><TD><input type="checkbox" value ="under20k" name="price[]"><TD>Under $20K</td></TR>
<TR><TD><input type="checkbox" value ="35-85k" name="price[]"><TD>$35K-$85K</td></TR>
<TR><TD><input type="checkbox" value ="over85k" name="price[]"><TD>Over $85K</td></TR>
</TABLE>
<input type="text" name="email" value="email" />
<input type="hidden" value="1" name="car_price" >
<p>
<input type="submit" value="Submit" >
<input type="hidden" name="brand" value="<?php echo $_POST['brand']?>">
</form>
</body>
</html>
mail.php
<?php
/* Subject and email variables */
$emailsSubject = 'Brochure Request';
$thanks = 'Thank you for requesting Brochure';
$webMaster = 'mailsample@gmail.com';
$mailheader .= "Reply-To: ".$_POST["email"]."
";
//Get the input.
$email = $_POST['email'];
$brand = $_POST['brand'];
$price = $_POST['price'];
$body = '
<p>A user has been submitted "Request Brochure" form with the following info.</p>
<table width="600" border="1" >
<tr>
<th width="556" height="37" align="left"><h2>Which car you want to buy?</h2></th>
<th width="268" style="border-bottom:1px solid #ccc; ">'.$brand.'</th>
</tr>
<tr>
<th width="556" height="37" align="left"><h2>Choose price range</h2></th>
<th width="268" style="border-bottom:1px solid #ccc; ">'.$price.'</th>
</tr>
<tr>
<th width="556" height="37" align="left"><h2>Email Address</h2></th>
<th width="268" style="border-bottom:1px solid #ccc; ">'.$emaild.'</th>
</tr>
';
$headers = "From: $email
";
$headers .= "Content-type: text/html
";
$headers .= 'Cc:'. $email . "
";
$reply = "";
/* This is what sends the email */
$success = mail($webMaster, $body, $headers, "-f $email");
/* Results Rendered as Html */
header('location:thankyou.php');exit;
?>
</div>
Check below code for each page
Page1
<html>
<body bgcolor="#fff" text="#000" >
<form method="post" action="page2.php">
<p>Which car you want to buy?<P>
<TABLE border="1" width="500">
<TR ><TD><input type="checkbox" value ="ferrari" name="brand[]"><TD>Ferrari</td></TR>
<TR><TD><input type="checkbox" value ="mercedes" name="brand[]"><TD>Mercedes</td></TR>
<TR><TD><input type="checkbox" value ="bugatti" name="brand[]"><TD>Bugatti</td></TR>
</TABLE>
<input type="hidden" value="1" name="car_brand" >
<p>
<input type="submit" value="Continue" >
</form>
</body>
Page2
In this page I used implode function for convert array to string
<html>
<body bgcolor="#fff" text="#000" >
<div id="firstpage-value" style="border:1px solid #000;">
<h4>Selected Brand</h4>
<?php
if(isset($_POST['car_brand']))
{
$count=count($_POST['brand']);
for($i=0;$i<$count;$i++)
{
echo $_POST['brand'][$i]." ";
}
$brand = implode("," ,$_POST['brand']);
}
?>
</div>
<form method="post" action="mail.php">
<p>Choose a Price Range<P>
<TABLE border="1" width="500">
<TR ><TD><input type="checkbox" value ="under20k" name="price[]"><TD>Under $20K</td></TR>
<TR><TD><input type="checkbox" value ="35-85k" name="price[]"><TD>$35K-$85K</td></TR>
<TR><TD><input type="checkbox" value ="over85k" name="price[]"><TD>Over $85K</td></TR>
</TABLE>
<input type="text" name="email" value="email" />
<input type="hidden" value="1" name="car_price" >
<p>
<input type="submit" value="Submit" >
<input type="hidden" name="brand" value="<?php echo $brand; ?>">
</form>
</body>
</html>
mail page
<?php
/* Subject and email variables */
$emailsSubject = 'Brochure Request';
$thanks = 'Thank you for requesting Brochure';
$webMaster = 'mailsample@gmail.com';
$mailheader .= "Reply-To: ".$_POST["email"]."
";
//Get the input.
$email = $_POST['email'];
$brand = $_POST['brand'];
$price = implode(",",$_POST['price']);
$body = '
<p>A user has been submitted "Request Brochure" form with the following info.</p>
<table width="600" border="1" >
<tr>
<th width="556" height="37" align="left"><h2>Which car you want to buy?</h2></th>
<th width="268" style="border-bottom:1px solid #ccc; ">'.$brand.'</th>
</tr>
<tr>
<th width="556" height="37" align="left"><h2>Choose price range</h2></th>
<th width="268" style="border-bottom:1px solid #ccc; ">'.$price.'</th>
</tr>
<tr>
<th width="556" height="37" align="left"><h2>Email Address</h2></th>
<th width="268" style="border-bottom:1px solid #ccc; ">'.$email.'</th>
</tr>
';
$headers = "From: $email
";
$headers .= "Content-type: text/html
";
$headers .= 'Cc:'. $email . "
";
$reply = "";
/* This is what sends the email */
$success = mail($webMaster, $body, $headers, "-f $email");
/* Results Rendered as Html */
header('location:thankyou.php');exit;
?>
There's too much information here to place a comment. There are a few things you can keep in mind. First of all:
Double check if there's a valid POST-request at the page that handles a request, now you are just assuming there was any on page2. This way you can be sure that there's data you need. For example, on page1.php
name your button: <input type="submit" name="step1" value="Continue" />
, now you can validate on page2 wether this button is pressed:
if( isset( $_POST['step1'] ))
{
// Process your code, otherwise return to page1
}
Make sure you receive the correct data from the previous page by checking what data was send along. You can do this with a simple var_dump()
. If you wrap var_dump() within <pre>
tags it gives you a better readable result. For example:
if( isset( $_POST['step1'] ))
{
echo '<pre>'; var_dump($_POST); echo '</pre>';
}
You are echo'ing $_POST['brand'] in step2 into a text field, this is impossible since $_POST['brand'] is a PHP array. There are a few options you can do, the most simple is to use implode()
, this function implodes an array and returns a string:
if( count($_POST['brand']) > 0 ) {
$brands = implode(",", $_POST['brand']); // returns: ferrari,mercedes,bugatti
}
To return this string back to an array, you can use explode(",", $brands);
Apply al these things, validate your request each post and debug what's going wrong and where. These simple steps will get your script working soon enough. There's still a lot to learn and improve on your script. But let's leave it by these tips for now.
The problem is on page2.php Here you are converting array to string at line <input type="hidden" name="brand" value="<?php echo $_POST['brand']?>">
One simple fix to this problem is you can make use of implode function to convert all the selected brands to comma separate string and then assign that string to value of hidden input so that you can access it on mail.php page.
$brand = '';
if(isset($_POST['brand']))
{
$brand = implode("," ,$_POST['brand']);
}
Then
<input type="hidden" name="brand" value="<?php echo $brand; ?>">