Take the 2-minute tour ×
Stack Overflow is a question and answer site for professional and enthusiast programmers. It's 100% free, no registration required.

not sure what I am doing wrong. I set up a simple php mail form, using javascript validation. Haven't been doing this for too long, would appreciate some help. I am getting errors such as this "Notice: Undefined index: cr[first_name] in /home/content/17/8543117/"

This is the form processing script: 
$to = "[email protected]";
$subject = "You have a new lead!";
$first_name = $_POST['cr[first_name]'];
$last_name = $_POST['cr[last_name]'];
$phone = $_POST['cr[phonecr]'];
$phoneprefix = $_POST['cr[phonecr2]'];
$phonesuffix = $_POST['cr[phonecr3]'];
$email = $_POST['cr[email]'];
$zip = $_POST['cr[zip]'];
$message = '';
$headers = "From: $first_name \n\n $last_name \n\n $phone \n\n $phoneprefix \n\n      
$phonesuffix \n\n $email \n\n $zip";
$sent = mail($to,$subject,$headers);
if($sent)
{
$_SESSION['success'] = '<p class="error">Your inquiry has been sent!</p>';
header('Location: index.php?e=inquiry_sent'); 
exit();
}
?>

This is the form:

<?php
if (isset($_REQUEST['e']))
if ( $_REQUEST['e']=="inquiry_sent"){
echo "<p class=\"error\">Thanks! We will contact you shortly!</p>";
}else{

echo "<p class=\"error2\">Your inquiry failed, please try again</p>";
}
?>
<form name="cr" action="thankyou.php" method="post" onSubmit="return form_check();">
    <input type="hidden" name="creditoptin" value="yes" />
    <div id="cform">
        <div class="crp">
            <label for="first_name">First Name</label>
            <input id="first_name" type="text" name="cr[first_name]" 
value="" style="width:160px;" />   
        </div>
        <div class="crp">
            <label for="last_name">Last Name</label>
            <input id="last_name" type="text" name="cr[last_name]"   
value="" style="width:160px;" />
        </div>
        <div class="crp">
            <label for="phonecr">Phone</label>
            <input name="cr[phonecr]" style="width:34px;" id="phonecr"       
  maxlength="3" onkeyup="force_numeric(this);autotab(this,'phonecr2');" value="" /> -
            <input name="cr[phonecr2]" style="width:34px;"  
id="phonecr2" maxlength="3" onkeyup="force_numeric(this);autotab(this,'phonecr3');"   
value="" /> -
            <input name="cr[phonecr3]" style="width:44px;"   
id="phonecr3" maxlength="4" onkeyup="force_numeric(this);" value="" />
        </div>
        <div class="crp">
            <label for="email">Email Address</label>
            <input id="email" type="text" name="cr[email]" maxlength="60" value="" style="width:160px;" />
        </div>
        <div class="crp">
            <label for="zip">Zip Code</label>
            <input id="zip" name="cr[zip]" maxlength="5"  
onkeyup="force_numeric(this)" value="" />
        </div>
        <div id="submt">
            <input type="image" src="images/submit.png" value="Submit"  
onclick="if(typeof sub_pop == 'function')sub_pop();" />
</form>

Thanks guys!

share|improve this question
add comment

2 Answers

up vote 1 down vote accepted

Instead of $first_name = $_POST['cr[first_name]'];, you should use $first_name = $_POST['first_name'];. Only the names of the input elements get translated into $_POST variables, without the name of the form.

Also, you are not doing any input sanitatizing in your code, but just mailing on whatever the user entered in your form; this might be a security risk. You should check out the Web on topics like XSS and SQL injections and sanitize the user input before processing it further.

share|improve this answer
    
Thanks for the detailed explanation! Much appreciated. –  Alex M Dec 6 '11 at 22:36
add comment

I don't get it, the error tells you exactly what is wrong. change your input names to something like first_name and retrieve the POST it obviously doesn't like cr[first_name]

share|improve this answer
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.