-1

I have read quite a number of prior posts to figure this out, but no error fixes work. Please note that I've added a field to the form to request a contact number, after inserting line 17 the form no longer works. If i take out line 17 the form works, but im not sent the number inputted into the form-field.

Line 17 produces an error on the web page:

Notice: Undefined index: phone in /contact.php on line 17

This is Line 17: $phone = $_POST['phone'];

Here is the entire code:

if(!$_POST) exit;


function isEmail($email) {
return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
}

if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

$name     = $_POST['name'];
$email    = $_POST['email'];
$phone    = $_POST['phone'];  //THIS LINE IS LINE 17 CAUSING THE ERROR.
$comment  = $_POST['comment'];

if(trim($name) == '') {
echo '<div class="error_message">Attention! You must enter your name. </div>';
exit();
} else if(trim($email) == '') {
echo '<div class="error_message">Attention! Please enter a valid email address.</div>';
exit();
} else if(!isEmail($email)) {
echo '<div class="error_message">Attention! You have enter an invalid e-mail address, try again.</div>';
exit();
} 

if(trim($phone) == '') {
echo '<div class="error_message">Attention! You must enter a Mobile or  Landline number.</div>';
exit();
}

if(trim($comment) == '') {
echo '<div class="error_message">Attention! Please enter your message.</div>';
exit();
}

if(get_magic_quotes_gpc()) {
$comment = stripslashes($comment);
}

$address = "joe.doe@yourdomain.com";

$e_subject = 'You\'ve been contacted by ' . $name . '.';

$e_body = "You have been contacted by $name with regards to $subject and the additional message is as follows." . PHP_EOL . PHP_EOL;
$e_content = "\"$comment\"" . PHP_EOL . PHP_EOL;
$e_reply = "You can contact $name via email: $email or by calling $phone";

$msg = wordwrap( $e_body . $e_content . $e_reply, 70 );

$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
$headers .= "MIME-Version: 1.0" . PHP_EOL;
$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

if(mail($address, $e_subject, $msg, $headers)) {

// Email has sent successfully, echo a success page.

echo "<div class='ok_message'><p>Thank you <strong>$name</strong>, your message has been submitted to us.</p></div>";

} else {

echo '<div class="error_message">ERROR!</div>';

}

If you require the form, please let me know but this has me stumped.


The FORM:

<form method="get" action="contact.php" class="form contact-form">
          <fieldset>
            <h2>Make a Booking</small></h2>
            <div id="message"></div>
            <div class="formRow">
              <div class="textField">
                <input type="text" name="name" id="name" placeholder="Your name ..." />
              </div>
            </div>
            <div class="formRow">
              <div class="textField">
                <input type="text" name="email" id="email" placeholder="Your email ..." />
              </div>
            </div>
            <div class="formRow">
              <div class="textField">
                <input type="text" name="phone" id="phone" placeholder="Mobile or Landline ..." />
              </div>
            </div>
            <div class="formRow">
              <div class="textField">
                <textarea cols="20" name="comment" id="comment" rows="4" placeholder="When do you need us ..."></textarea>
              </div>
            </div>
            <div class="formRow">
              <button class="btnSmall btn submit right"> <span>Send Message</span> </button>
            </div>
          </fieldset>
        </form>
qldguy27au
  • 1
  • 1
  • 5

2 Answers2

2

Your form is using a GET method method="get" where it should be POST method="post"

Even though you're getting one notice, you will get more.

It's been said in comments that you don't have one for phone, but you do.

<input type="text" name="phone" id="phone" ....

it's definitely your form's method.

All your other arrays are POST, not GET.

Also use a conditional !empty() for your POST arrays.

Plus, your button:

<button class="btnSmall btn submit right">...

it's missing a type.

<button class="btnSmall btn submit right" type="submit">...
Funk Forty Niner
  • 74,450
  • 15
  • 68
  • 141
  • ill do this now, will reply shortly – qldguy27au Apr 25 '15 at 03:08
  • @qldguy27au I've made a slight edit. Check your button; it's missing a type and reload my answer to see it. – Funk Forty Niner Apr 25 '15 at 03:09
  • I have made this change to the form:
    Same error with no change
    – qldguy27au Apr 25 '15 at 03:13
  • @qldguy27au did you change the button type? ` – Funk Forty Niner Apr 25 '15 at 03:15
  • ive made the following changes so far:
    Same error on line 17
    – qldguy27au Apr 25 '15 at 03:18
  • @qldguy27au give me a few minutes, I'll test this. – Funk Forty Niner Apr 25 '15 at 03:24
  • Something else,.. even though there is a number in the field, the form also tells me that there is no number in the field. (It returns the Attention! comments ive set if blank) – qldguy27au Apr 25 '15 at 03:33
  • @qldguy27au I've tested your code with the corrections I've given you and was successful. Make sure you've in fact uploaded the new files and have cleared your disk cache just in case and reload those files. Make sure you've filled out all the inputs. – Funk Forty Niner Apr 25 '15 at 03:39
  • I will delete the files from the host server and upload fresh copies – qldguy27au Apr 25 '15 at 03:43
  • Is there a way i can private message the web address for you to view live – qldguy27au Apr 25 '15 at 03:46
  • @qldguy27au No, sorry. If you're using JS with this also and that you're not showing it, then the problem could be in there. What you posted for code along with my corrections should be working. For a phone number, I used both (123) 5551234 and 123-555-1234. There isn't more I can do that will be of further help. – Funk Forty Niner Apr 25 '15 at 03:48
  • Not a problem, i have js on the site but not used for the form, this has me completely stumped, i will reply here if i figure this out with solution Thank you for your time Fred, i appreciate it – qldguy27au Apr 25 '15 at 03:53
  • @qldguy27au is both your HTML form and PHP inside the same file or as two seperate files? also what are you typing in the phone input or are you putting one in at all? – Funk Forty Niner Apr 25 '15 at 12:16
  • the form is on the index.php page and I have contact.php handling the method of the form. Ive decided to remove the extra field ive placed onto the form, so that it just works without error, im currently in the process of writing a completely new one (or might download an existing one and edit that). Still has me stumped though. – qldguy27au Apr 26 '15 at 11:45
  • @qldguy27au I'm stumped as well. – Funk Forty Niner Apr 26 '15 at 12:40
0

Not to sound like a nag, but you should be validating each post before you use it.

Something like this:

if (isset($_POST))
{
    $name = getPostedField('name');
    $email = getPostedField('email');         
    $phone = getPostedField('phone');
    $comment = getPostedField('comment');
    // do something
}
function getPostedField($fieldName)
{
    if (isset($_POST[$fieldName]))
    {
        return trim($_POST[$fieldName]);
    }
    return '';
}