SitePoint Sponsor

User Tag List

Results 1 to 10 of 10
  1. #1
    SitePoint Member
    Join Date
    Jan 2013
    Posts
    5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Contact Form Sending With No Field Data

    I have created a contact form for a client's website. The purpose of this form is for visitors to enter some information about themselves and once they press submit, my client receives the information via email. However, the form is being submitted without any information coming through. Just emails with no contents.

    Why is the contents not being sent through? I would really appreciate some guidance!

    Please see my code below:

    Code:
    <?php
    /*
    This first bit sets the email address that you want the form to be submitted to.
    You will need to change this value to a valid email address that you can access.
    */
    $webmaster_email = "me@email.com";
    
    /*
    This bit sets the URLs of the supporting pages.
    If you change the names of any of the pages, you will need to change the values here.
    */
    $feedback_page = "questionnaire1.html";
    $error_page = "error_message.html";
    $thankyou_page = "thank_you.html";
    
    /*
    This next bit loads the form field data into variables.
    If you add a form field, you will need to add it here.
    */
    $email_address = $_REQUEST['email_address'] ;
    $name = $_REQUEST['name'] ;
    $telephone = $_REQUEST['telephone'] ;
    $brand = $_REQUEST['brand'] ;
    $target_demo = $_REQUEST['target_demo'] ;
    $describe_product = $_REQUEST['describe_product'] ;
    
    /*
    The following function checks for email injection.
    Specifically, it checks for carriage returns - typically used by spammers to inject a CC list.
    */
    function isInjected($str) {
    	$injections = array('(\n+)',
    	'(\r+)',
    	'(\t+)',
    	'(%0A+)',
    	'(%0D+)',
    	'(%08+)',
    	'(%09+)'
    	);
    	$inject = join('|', $injections);
    	$inject = "/$inject/i";
    	if(preg_match($inject,$str)) {
    		return true;
    	}
    	else {
    		return false;
    	}
    }
    
    // If the user tries to access this script directly, redirect them to the feedback form,
    if (!isset($_REQUEST['email_address'])) {
    header( "Location: $feedback_page" );
    }
    
    // If the form fields are empty, redirect to the error page.
    elseif (empty($email_address) || empty($target_demo) || empty($describe_product) || empty($telephone) || empty($brand) || empty($name)) {
    header( "Location: $error_page" );
    }
    
    // If email injection is detected, redirect to the error page.
    elseif ( isInjected($email_address) ) {
    header( "Location: $error_page" );
    }
    
    
    // If we passed all previous tests, send the email then redirect to the thank you page.
    else {
    mail( "me@email.com", "Client Questionnaire",
      "From: $email_address" );
    
    
    header( "Location: $thankyou_page" );
    }
    ?>

  2. #2
    It's all Geek to me silver trophybronze trophy
    ralph.m's Avatar
    Join Date
    Mar 2009
    Location
    Melbourne, AU
    Posts
    24,323
    Mentioned
    462 Post(s)
    Tagged
    8 Thread(s)
    Hi sarahtoronto. Welcome to the forums.

    Your mail() function is not sending the content entered by the visitor, so you need to add something like this to your form code:

    PHP Code:
    $email_body 
        
    "Telephone of sender: $telephone\n\n" .
        
    "-----------------------------------------------------------\n\n" .
        
    "Brand: $brand\n\n" .
        
    "-----------------------------------------------------------\n\n" .
        
    "Target: $target_demo\n\n" .
        
    "-----------------------------------------------------------\n\n" .
        
    "Product Description: $describe_product"
    and then modify the mail() function to this:

    Code:
    mail( "me@email.com", "Client Questionnaire", $email_body, "From: $email_address" );

  3. #3
    SitePoint Member
    Join Date
    Jan 2013
    Posts
    5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks so much ralph - this worked!
    I have one follow up question. I am adding check boxes into the form and it's giving me an error message when I submit the form in my browser. Here is the same code as above, including the additions that you provided. In bold, you will see the checkbox code I have included but it's not working. Any advice?

    Code:
    <?php
    /*
    This first bit sets the email address that you want the form to be submitted to.
    You will need to change this value to a valid email address that you can access.
    */
    $webmaster_email = "my@email.com";
    
    /*
    This bit sets the URLs of the supporting pages.
    If you change the names of any of the pages, you will need to change the values here.
    */
    $feedback_page = "questionnaire1.html";
    $error_page = "error_message.html";
    $thankyou_page = "thank_you.html";
    
    /*
    This next bit loads the form field data into variables.
    If you add a form field, you will need to add it here.
    */
    $email_address = $_REQUEST['email_address'] ;
    $name = $_REQUEST['name'] ;
    $telephone = $_REQUEST['telephone'] ;
    $brand = $_REQUEST['brand'] ;
    $target_demo = $_REQUEST['target_demo'] ;
    $describe_product = $_REQUEST['describe_product'] ;
    
    /*
    The following function checks for email injection.
    Specifically, it checks for carriage returns - typically used by spammers to inject a CC list.
    */
    function isInjected($str) {
    	$injections = array('(\n+)',
    	'(\r+)',
    	'(\t+)',
    	'(%0A+)',
    	'(%0D+)',
    	'(%08+)',
    	'(%09+)'
    	);
    	$inject = join('|', $injections);
    	$inject = "/$inject/i";
    	if(preg_match($inject,$str)) {
    		return true;
    	}
    	else {
    		return false;
    	}
    }
    
    $email_body = 
        "Name: $name\n\n" .
        "-----------------------------------------------------------\n\n" .
        "Brand: $brand\n\n" .
        "-----------------------------------------------------------\n\n"
        "Product Description: $describe_product" .
        "-----------------------------------------------------------\n\n" .
        "Target: $target_demo\n\n" .
        "-----------------------------------------------------------\n\n" .
        "Telephone of sender: $telephone\n\n";  
        
        
        
        foreach($_POST['check'] as $value) {
    
    $check_msg .= "Checked: $value\n";
    
    
    
    } 
            
    
    // If the user tries to access this script directly, redirect them to the feedback form,
    if (!isset($_REQUEST['email_address'])) {
    header( "Location: $feedback_page" );
    }
    
    // If the form fields are empty, redirect to the error page.
    elseif (empty($email_address) || empty($target_demo) || empty($describe_product) || empty($telephone) || empty($brand) || empty($name)) {
    header( "Location: $error_page" );
    }
    
    // If email injection is detected, redirect to the error page.
    elseif ( isInjected($email_address) ) {
    header( "Location: $error_page" );
    }
    
    
    // If we passed all previous tests, send the email then redirect to the thank you page.
    else {
    mail( "$webmaster_email", "Client Questionnaire",
      $email_body, $check_msg, "From: $email_address" );
    
    
    header( "Location: $thankyou_page" );
    }
    ?>

  4. #4
    It's all Geek to me silver trophybronze trophy
    ralph.m's Avatar
    Join Date
    Mar 2009
    Location
    Melbourne, AU
    Posts
    24,323
    Mentioned
    462 Post(s)
    Tagged
    8 Thread(s)
    You can't just add things to the mail() function like that, as it expects only certain elements, including the email body contents where I added it. Add the collected data to the $email_body data instead. Using an array for the checkbox data is a good way to go, but I've done something simpler below. I'm not very good at this stuff, but I think something like this might suffice (changes in bold):

    Code:
    <?php
    /*
    This first bit sets the email address that you want the form to be submitted to.
    You will need to change this value to a valid email address that you can access.
    */
    $webmaster_email = "my@email.com";
    
    /*
    This bit sets the URLs of the supporting pages.
    If you change the names of any of the pages, you will need to change the values here.
    */
    $feedback_page = "questionnaire1.html";
    $error_page = "error_message.html";
    $thankyou_page = "thank_you.html";
    
    /*
    This next bit loads the form field data into variables.
    If you add a form field, you will need to add it here.
    */
    $email_address = $_REQUEST['email_address'] ;
    $name = $_REQUEST['name'] ;
    $telephone = $_REQUEST['telephone'] ;
    $brand = $_REQUEST['brand'] ;
    $target_demo = $_REQUEST['target_demo'] ;
    $describe_product = $_REQUEST['describe_product'] ;
    if (isset($_POST['check'])) {
        $check_boxes = $_POST['check'];
    }
    $check_selections = implode(', ', $check_boxes);
    
    
    /*
    The following function checks for email injection.
    Specifically, it checks for carriage returns - typically used by spammers to inject a CC list.
    */
    function isInjected($str) {
    	$injections = array('(\n+)',
    	'(\r+)',
    	'(\t+)',
    	'(%0A+)',
    	'(%0D+)',
    	'(%08+)',
    	'(%09+)'
    	);
    	$inject = join('|', $injections);
    	$inject = "/$inject/i";
    	if(preg_match($inject,$str)) {
    		return true;
    	}
    	else {
    		return false;
    	}
    }
    
    $email_body = 
        "Name: $name\n\n" .
        "-----------------------------------------------------------\n\n" .
        "Brand: $brand\n\n" .
        "-----------------------------------------------------------\n\n"
        "Product Description: $describe_product" .
        "-----------------------------------------------------------\n\n" .
        "Target: $target_demo\n\n" .
        "-----------------------------------------------------------\n\n" .
        "Options checked: $check_selections\n\n" .
        "-----------------------------------------------------------\n\n" .
        "Telephone of sender: $telephone";  
       
            
    
    // If the user tries to access this script directly, redirect them to the feedback form,
    if (!isset($_REQUEST['email_address'])) {
    header( "Location: $feedback_page" );
    }
    
    // If the form fields are empty, redirect to the error page.
    elseif (empty($email_address) || empty($target_demo) || empty($describe_product) || empty($telephone) || empty($brand) || empty($name)) {
    header( "Location: $error_page" );
    }
    
    // If email injection is detected, redirect to the error page.
    elseif ( isInjected($email_address) ) {
    header( "Location: $error_page" );
    }
    
    
    // If we passed all previous tests, send the email then redirect to the thank you page.
    else {
    mail( "$webmaster_email", "Client Questionnaire",
      $email_body, "From: $email_address" );
    
    
    header( "Location: $thankyou_page" );
    }
    ?>

  5. #5
    SitePoint Member
    Join Date
    Jan 2013
    Posts
    5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    hmm that code is just bringing up a broken page... the form won't submit now. Are you sure this part is formatted correctly?

    Code:
    if (isset($_POST['check'])) {
        $check_boxes = $_POST['check'];
    }
    $check_selections = implode(', ', $check_boxes);

  6. #6
    It's all Geek to me silver trophybronze trophy
    ralph.m's Avatar
    Join Date
    Mar 2009
    Location
    Melbourne, AU
    Posts
    24,323
    Mentioned
    462 Post(s)
    Tagged
    8 Thread(s)
    It would be useful to see your HTML form code.

  7. #7
    SitePoint Member
    Join Date
    Jan 2013
    Posts
    5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Quote Originally Posted by ralph.m View Post
    It would be useful to see your HTML form code.
    Sure, here is the HTML form:

    Code:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    
    <html>
    
    	<head>
    		<meta http-equiv="content-type" content="text/html;charset=iso-8859-1">
    		<meta name="generator" content="Adobe GoLive 6">
    		<title>Client Questionnaire</title>
    	</head>
    
    	<body bgcolor="#ffffff">
    		<table width="772" border="0" cellspacing="0" cellpadding="0" align="center">
    			<tr height="22">
    				<td align="left" valign="top" height="22"><span style="color: #000000;vertical-align: top;height: 24px;line-height: 24px;font-size: 22px;font-family: trebuchet ms, sans-serif;font-weight: bold;">Let's Get <font color="#ff0099">Started</font><br>
    					</span><span style="color: #363636;vertical-align: top;height: 16px;line-height: 16px;font-size: 18px;font-family: trebuchet ms, sans-serif;font-weight: bold;"><span style="color: #363636;vertical-align: top;height: 13px;line-height: 13px;font-size: 12px;font-family: trebuchet ms, sans-serif;font-weight: lighter;">Please fill in the following information and an Activation&nbsp;Manager will connect with you shortly.</span></span></td>
    			</tr>
    		</table>
    		<br>
    		<table width="772" border="0" cellspacing="0" cellpadding="0" align="center">
    			<tr>
    				<td>
    					<form action="send_mail.php" method="post">
    						<table width="772" border="0" cellspacing="0" cellpadding="4" bgcolor="#f5f5f5">
    							<tr>
    								<td align="right" valign="top" class="form" width="168"><label for="first_name">Name</label></td>
    								<td valign="top" width="192"><input type="text" name="name" value="" maxlength="50" size="30"></td>
    								<td align="right" valign="top" width="188"><label for="email">Email</label></td>
    								<td width="192"><input type="text" name="email_address" value="" maxlength="80" size="30"></td>
    							</tr>
    							<tr>
    								<td align="right" valign="top" class="form" width="168"><label for="telephone">Phone</label></td>
    								<td valign="top" width="192"><input type="text" name="telephone" maxlength="30" size="30"></td>
    								<td align="right" valign="top" width="188">Brand or Category</td>
    								<td width="192"><input type="text" name="brand" maxlength="80" size="30"></td>
    							</tr>
    							<tr>
    								<td style="text-align:left" width="168"></td>
    								<td style="text-align:left" align="left" width="192"></td>
    								<td width="188"></td>
    								<td width="192"></td>
    								<table width="672" border="0" cellspacing="2" cellpadding="0"></table>
    								<br>
    								<table width="713" border="0" cellspacing="0" cellpadding="4"></table>
    							</tr>
    						</table>
    						<br>
    						<table width="772" border="0" cellspacing="0" cellpadding="4" align="center">
    							<tr>
    								<td align="right" valign="top" width="185"><span style="color: #363636;vertical-align: top;height: 16px;line-height: 16px;font-size: 18px;font-family: trebuchet ms, sans-serif;font-weight: bold;"><span style="color: #363636;vertical-align: top;height: 13px;line-height: 13px;font-size: 12px;font-family: trebuchet ms, sans-serif;font-weight: lighter;">What is your brand's target demo?</span></span></td>
    								<td valign="top" width="176"><textarea name="target_demo" maxlength="1000" cols="25" rows="4"></textarea></td>
    								<td align="right" valign="top" width="203"><span style="color: #363636;vertical-align: top;height: 16px;line-height: 16px;font-size: 18px;font-family: trebuchet ms, sans-serif;font-weight: bold;"><span style="color: #363636;vertical-align: top;height: 13px;line-height: 13px;font-size: 12px;font-family: trebuchet ms, sans-serif;font-weight: lighter;">How would you describe your product, including the competitive positioning?</span></span></td>
    								<td valign="top" width="176"><textarea name="describe_product" maxlength="1000" cols="25" rows="4"></textarea></td>
    							</tr>
    						</table>
    						<br>
    						<table width="772" border="0" cellspacing="0" cellpadding="0">
    							<tr>
    								<td><span style="color: #363636;vertical-align: top;height: 16px;line-height: 16px;font-size: 18px;font-family: trebuchet ms, sans-serif;font-weight: bold;"><span style="color: #363636;vertical-align: top;height: 18px;line-height: 18px;font-size: 16px;font-family: trebuchet ms, sans-serif;font-weight: lighter;"><b>What are your primary brand marketing objectives for 2013?</b></span></span></td>
    							</tr>
    							<tr>
    								<td>
    									<table width="195" border="0" cellspacing="0" cellpadding="2">
    										<tr>
    											<td width="18"><input type="checkbox" name="overall_awareness" value="Objective for 2013: Overall Awareness" border="0"></td>
    											<td width="149">Overall Awareness</td>
    											<td width="20"></td>
    										</tr>
    									</table>
    									<table width="772" border="0" cellspacing="0" cellpadding="2">
    										<tr>
    											<td width="18"></td>
    										</tr>
    									</table>
    								</td>
    							</tr>
    						</table>
    						<br>
    						<input type="submit" value="Submit"><br>
    					</form>
    				</td>
    			</tr>
    		</table>
    	</body>
    
    </html>

  8. #8
    SitePoint Wizard silver trophybronze trophy Cups's Avatar
    Join Date
    Oct 2006
    Location
    France, deep rural.
    Posts
    6,869
    Mentioned
    17 Post(s)
    Tagged
    1 Thread(s)
    Sml script showing how to grab checkbox values and put them into a string so you can add them to your message.

    PHP Code:
    <?
    if (isset($_POST['target'])) {
    $check_selections implode(', '$_POST['target']);
    }

    echo 
    $check_selections ;
    ?>

    <form method=POST action = "">
    <input type="checkbox" name="target[overall_awareness]" value="Objective for 2013: Overall Awareness" />
    <input type="checkbox" name="target[stop_drinking]" value="Objective for 2013: Give up the booze" />
    <input type="checkbox" name="target[stop_swearing]" value="Objective for 2013: Give up the swearing at inanimate objects" />
    <input type="checkbox" name="target[cease_obfuscating]" value="Objective for 2013: Just leave SP users alone" />
    <input type=submit />

  9. #9
    SitePoint Member
    Join Date
    Jan 2013
    Posts
    5
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Hi Cups,

    Thanks for that script. I implemented it and tried tweaking it slightly, but it's pulling up a blank page when I submit the form.

    I have pasted the PHP page below with your code included (in bold). Have I placed this right?

    Code:
    <?php
    /*
    This first bit sets the email address that you want the form to be submitted to.
    You will need to change this value to a valid email address that you can access.
    */
    $webmaster_email = "my@email.com";
    
    /*
    This bit sets the URLs of the supporting pages.
    If you change the names of any of the pages, you will need to change the values here.
    */
    $feedback_page = "questionnaire1.html";
    $error_page = "error_message.html";
    $thankyou_page = "thank_you.html";
    
    /*
    This next bit loads the form field data into variables.
    If you add a form field, you will need to add it here.
    */
    $email_address = $_REQUEST['email_address'] ;
    $name = $_REQUEST['name'] ;
    $telephone = $_REQUEST['telephone'] ;
    $brand = $_REQUEST['brand'] ;
    $target_demo = $_REQUEST['target_demo'] ;
    $describe_product = $_REQUEST['describe_product'] ;
    
    
    if (isset($_POST['target'])) {
    $check_selections = implode(', ', $_POST['target']);
    }
    
    echo $check_selections ;
    
    
    /*
    The following function checks for email injection.
    Specifically, it checks for carriage returns - typically used by spammers to inject a CC list.
    */
    function isInjected($str) {
    	$injections = array('(\n+)',
    	'(\r+)',
    	'(\t+)',
    	'(%0A+)',
    	'(%0D+)',
    	'(%08+)',
    	'(%09+)'
    	);
    	$inject = join('|', $injections);
    	$inject = "/$inject/i";
    	if(preg_match($inject,$str)) {
    		return true;
    	}
    	else {
    		return false;
    	}
    }
    
    $email_body = 
        "Name: $name\n\n" .
        "-----------------------------------------------------------\n\n" .
        "Brand: $brand\n\n" .
        "-----------------------------------------------------------\n\n"
        "Product Description: $describe_product" .
        "-----------------------------------------------------------\n\n" .
        "Target: $target_demo\n\n" .
        "-----------------------------------------------------------\n\n" .
        "Options checked: $check_selections\n\n" .
        "-----------------------------------------------------------\n\n" .
        "Telephone of sender: $telephone\n\n";  
        
    
            
    
    // If the user tries to access this script directly, redirect them to the feedback form,
    if (!isset($_REQUEST['email_address'])) {
    header( "Location: $feedback_page" );
    }
    
    // If the form fields are empty, redirect to the error page.
    elseif (empty($email_address) || empty($target_demo) || empty($describe_product) || empty($telephone) || empty($brand) || empty($name)) {
    header( "Location: $error_page" );
    }
    
    // If email injection is detected, redirect to the error page.
    elseif ( isInjected($email_address) ) {
    header( "Location: $error_page" );
    }
    
    
    // If we passed all previous tests, send the email then redirect to the thank you page.
    else {
    mail( "$webmaster_email", "Client Questionnaire",
      $email_body, "From: $email_address" );
    
    
    header( "Location: $thankyou_page" );
    }
    ?>

  10. #10
    SitePoint Wizard silver trophybronze trophy Cups's Avatar
    Join Date
    Oct 2006
    Location
    France, deep rural.
    Posts
    6,869
    Mentioned
    17 Post(s)
    Tagged
    1 Thread(s)
    Probably because you have error reporting turned off, and yet you echo a line and then try and do a header redirect.

    Stop the redirect from happening.

    If you see anything being returned such as the contents of

    PHP Code:
    echo $check_selections 
    then go back and comment that out.

    This blank page will be a recurring problem for you unless you turn on error_reporting:

    • for your entire server -- as long as it is your DEV server -- not your LIVE server!
    • or, for the directory you are working in
    • or, each page/script you are working on


    For the latter then temporarily add these lines to the top of your script and you will find many helpful messages arriving.

    PHP Code:
    <?php
    // delete these lines before publishing!
     
    error_reporting(E_ALL);
     
    ini_set("display_errors"1);
    ?>
    If you notice a lot of messages now arriving at the top of your scripts, then imagine that these lines are all polluting your error log on your live server ... not good when you want to track a particular error.

    You can do a web search for each type of message to discover how to correct them, or just ask here.

    If this guess of mine does indeed turn out to be correct (current form shows I am not doing too well in the guessing stakes at the moment ), that you do not have error reporting switched on, and you want to turn it on for your DEV server (that is best practice) then make the adjustments on your local php.ini file, restart your server and you are golden.

    Search: Turn on error reporting php.ini


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •