1

I've constructed this code from a hodge-podge of various sources and a couple weeks of what I would call 'whole immersion learning'. In other words I don't know squat about php and just thought I could fake it but apparently I can't.

Anywho, I know what I've done below will send several who see it into paroxysm of utter horror at what I've done to your beloved php but it can't be helped with only 2 weeks of self education and at least it only throws up three notices now rather than all the warnings, screaming warnings and fatal errors that it did in the past.

the last errors I'm getting are...

( ! ) Notice: Undefined variable: error_name in E:\wamp\www\complete-x013_php2\iframe1\contact.php on line 65

( ! ) Notice: Undefined variable: error_email in E:\wamp\www\complete-x013_php2\iframe1\contact.php on line 77

( ! ) Notice: Undefined variable: error_code in E:\wamp\www\complete-x013_php2\iframe1\contact.php on line 89

<?php session_start(); ?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

<html>

<head>

<meta http-equiv="Content-type" content="text/html; charset=utf-8">

<title></title>

<link rel="stylesheet" type="text/css" href="style.css" />

</head>

<body>

<span style="color: #000000; font-size: 85%; font-family: Verdana, Geneva, sans-serif;">

<?php

    if (isset($_POST['submit'])) {
    $error = "
    error_name,
    error_email,
    error_code
    ";

$name =     check_input($_POST['name']);
$email =    check_input($_POST['email']);
$how =      check_input($_POST['how']);
$ifother =  check_input($_POST['ifother']);
$code =     check_input($_POST['code']);
$submit =   check_input($_POST['submit']);

$_POST['name'] = trim($_POST['name']);
$_POST['name'] = stripslashes($_POST['name']);
$_POST['name'] = htmlspecialchars($_POST['name']);

$_POST['email'] = trim($_POST['email']);
$_POST['email'] = stripslashes($_POST['email']);
$_POST['email'] = htmlspecialchars($_POST['email']);

$_POST['how'] = trim($_POST['how']);
$_POST['how'] = stripslashes($_POST['how']);
$_POST['how'] = htmlspecialchars($_POST['how']);

$_POST['ifother'] = trim($_POST['ifother']);
$_POST['ifother'] = stripslashes($_POST['ifother']);
$_POST['ifother'] = htmlspecialchars($_POST['ifother']);

$_POST['code'] = trim($_POST['code']);
$_POST['code'] = stripslashes($_POST['code']);
$_POST['code'] = htmlspecialchars($_POST['code']);

$_POST['submit'] = trim($_POST['submit']);
$_POST['submit'] = stripslashes($_POST['submit']);
$_POST['submit'] = htmlspecialchars($_POST['submit']);

    if (!empty($_POST['name'])) {
    $name = check_input($_POST['name']);
    } else {
        $error .= "error_name";
        $error_name .= "Name is required.";
    }

    if (!empty($_POST['email'])) {
    $email = check_input($_POST['email']);

        if (!preg_match("/^[a-z0-9]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $email)){ 
        $error .= "error_email";
        $error_email .= "E-mail address not valid.";
        }
    } else {
    $error .= "error_email";
    $error_email .= "E-mail address is required.";
    }

    if (!empty($_POST['code'])) {
    $code = check_input($_POST['code']);

        if (strtolower($_POST['code']) != 'black'){ 
        $error .= "error_code";
        $error_code .= "Code is BLACK.";
        }
    } else {
    $error .= "error_code";
    $error_code .= "Enter Code.";
    }

    if (empty($error)) {
    $from = 'From: ' . $name . ' <' . $email . '>';
    $to = "yourmail@host.com";
    $subject = "New Subscription Contact";
    $content = "

Newsletter Subsciption submitted by $name,

E-mail: $email


They were referred to us by: $how, $ifother

-END NOTIFICATION-

";
    $success = 
    mail($to,$subject,$content,$from);
    header('Location: thanks.php');
    exit;
    }

    }

function check_input($data, $problem='')
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
        if ($problem && strlen($data) == 0)
{
    show_error($problem);
}
    return $data;
}
?>

<div>

<form action="contact.php" method="post">

<center>

<table style="border: 0px solid black; border-collapse: collapse;">

<tr>
<td style="border: 0px solid black; height: 16px;" colspan="2">[<span style="color: #ff0000;">*</span>] Denotes a required field.</td>
</tr>

<tr>
<td style="border: 0px solid black; text-align: left; text-indent: 92px; height: 12px;" colspan="2" id="error">
<?php if (!empty($error_name)) { echo '<div  class="error">' . $error_name . '</div >'; } ?>
</td>
</tr>

<tr>
<td style="border: 0px solid black; vertical-align: top; text-align: left;">
<div style="margin-top: 2px;"><span style="color: #ff0000;">*</span><label>Name:</label></div></td>
<td style="border: 0px solid black;">
<input type="text" placeholder="John or Jane Doe" style="width: 269px;" name="name" value="<?php if ($_POST['name']) { echo $_POST['name']; } ?>" /></td>
</tr>

<tr>
<td style="border: 0px solid black; text-align: left; text-indent: 92px; height: 12px;" colspan="2" id="error">
<?php if (!empty($error_email)) { echo '<div  class="error">' . $error_email . '</div >'; } ?>
</td>
</tr>

<tr>
<td style="border: 0px solid black; vertical-align: top; text-align: left;">
<div style="margin-top: 2px;"><span style="color: #ff0000;">*</span><label>E-mail:</label></div></td>
<td style="border: 0px solid black;">
<input type="text" placeholder="yourmail@host.com" style="width: 269px;" name="email" value="<?php if ($_POST['email']) { echo $_POST['email']; } ?>" /></td>
</tr>

<tr>
<td style="border: 0px solid black; height: 12px;" colspan="2"></td>
</tr>

<tr>
<td style="border: 0px solid black; height: 12px;" colspan="2">

<div style="border: 0px solid black; float: left; margin-top: 1px;">How did you find us?</div>

<div style="border: 0px solid black; float: right;">        <select width="180" height="20" style="width: 180px;" name="how">
                            <option value=""> -- Please Select -- </option>
                            <option>Google</option>
                            <option>Yahoo</option>
                            <option>Link from a website</option>
                            <option>Word of mouth</option>
                            <option>Other</option>
                            </select></div>

</td>
</tr>

<tr>
<td style="border: 0px solid black; height: 12px;" colspan="2"></td>
</tr>

<tr>
<td style="border: 0px solid black; vertical-align: top; text-align: left; width: 80px;">
<div style="margin-top: 1px;"><label>If <i>Other</i>:</label></div></td>
<td style="border: 0px solid black;">
<textarea name="ifother" placeholder="If you chose 'link' or 'other'." style="width: 269px; height: 35px;"><?php if ($_POST['ifother']) { echo $_POST['ifother']; } ?></textarea></td>
</tr>

<tr>
<td style="border: 0px solid black; text-align: left; text-indent: 265px; height: 12px;" colspan="2" id="error">
<?php if (!empty($error_code)) { echo '<div class="error">' . $error_code . '</div>'; } ?>
</td>
</tr>

<tr>
<td style="border: 0px solid black;" colspan="2" >
  <div style="border: 0px solid black; float: left; height: 18px; margin-top: 2px;">
   <span style="color: #ff0000;">*</span>What color is this '<b>black</b>' text?    </div>
   <div style="border: 0px solid black; float: right;"><input type="text" placeholder="code" style="width: 90px;" name="code" value="<?php if ($_POST['code']) { echo $_POST['code']; } ?>" /></div>
   </td>
</tr>

<tr>
   <td style="border: 0px solid black;" colspan="2"><div style="border: 0px solid black; height: 10px;"></div>
   </td>
</tr>
<tr>
   <td style="border: 0px solid black; text-align: right;" colspan="2"><input type="submit" style="width: 95px;" name="submit" value="Subscribe!" />
       </td>
</tr>
</table>
</center>
 </form>
    </div>
    </span>
    </body>
</html>
Community
  • 1
  • 1
diresaint
  • 11
  • 4
  • 1
    Though the question is not a *duplicate* per se, this is your topic: [isset() and empty() make code ugly](http://stackoverflow.com/questions/1960509/isset-and-empty-make-code-ugly). Also, maybe the question is better suited for http://codereview.stackexchange.com. – deceze Dec 05 '12 at 09:30
  • i just wonder if the answer of igni really helped as its doesnt solve the error_name and error_code and he get upvoting to 5 , just wonder :) anyway good luck for the rest – echo_Me Dec 05 '12 at 09:40
  • deceze, I read the article you supplied, which i thank you for, but im still a little befuddled by all that crazy php speak so i couldn't make a direct translation to my problem. – diresaint Dec 05 '12 at 11:15
  • peter, you are correct in what you said as his solution made not one iota of a difference in the problem. it is actually an artifact of the original scripting that I had meant to go back and eradicate but hadn't done as yet. – diresaint Dec 05 '12 at 11:19

3 Answers3

6
$error_email .= "E-mail address not valid.";

=>

$error_email = "E-mail address not valid.";
igni
  • 61
  • 2
  • `.=` is a concatenation operator which appends the content on the right side of the equals sign to an existing value (on the left side) just for those that are not sure. – Ren Dec 05 '12 at 09:55
  • Huh, so its not a mistake in scripting? I guess I'll try a version without it and see if it throws any errors or notices. (/me shrugs) not sure if I should leave it or not now. – diresaint Dec 05 '12 at 11:26
1

You need to add this :

$error_code = $error_email = $error_name = "";

just after :

$error = "
    error_name,
    error_email,
    error_code
    ";

Like this :

$error = "
    error_name,
    error_email,
    error_code
    ";
$error_code = $error_email = $error_name = "";

The notice is triggered because you are using .= on a undefined var.

iizno
  • 829
  • 1
  • 9
  • 28
  • 1
    Holy cricket! You got that so fast I cant even comprehend! Thanks so very much for the help! that single error has been bugging me from almost day one! I tried so many different solutions and permutations of each solution I had given up and decided to break down and try posting to this site after trolling it for hours a day to see if I could glean the answer. That's not to say I didn't find answers to lots of other questions I had on this script as I have used stack overflow to learn everything I've done with this script for the most part. – diresaint Dec 05 '12 at 09:42
1

you must define also error_name and error_email and error_code

try this

   if (isset($_POST['submit'])) {
   $error_name ="";
   $error_email ="" ;
   $error_code= "";
    $error = "";
   $name =     check_input($_POST['name']);
 .....
 ....
echo_Me
  • 37,078
  • 5
  • 58
  • 78
  • Wow, Two excellent answers in an amazingly short time, you guys rock! I tried both methods and after a bit of fiddling about I got them both to work so I guess their both correct but I don't know if I can have multiple green solved check marks can I? I can however state that I like peter's answer best. now I need to streamline the entire script and make it tidy. any suggestions? – diresaint Dec 05 '12 at 11:12