This is a simple script I copied from a book to create a form, then mail it to an address.

I cant get it too wok and wonder if its the script or my server. I even copied the source form the publishers website and it still wont work.

Basically all it should do is show a form, error check it and then send it.

Can anyone tell me what maybe wrong with it or if its maybe just my server setup.

<HTML>
<HEAD>
<TITLE>All-In-One Feedback Form</TITLE>
</HEAD>
<BODY>
<?
$form_block ="
<FORM METHOD=\"POST\" ACTION=\"$_SERVER[PHP_SELF]\">
<P><strong>Your Name:</strong><br>
<INPUT type=\"text\" NAME=\"sender_name\" VALUE=\"$_POST[sender_name]\" SIZE=30></P>
<P><strong>Your E-Mail Address:</strong><br>
<INPUT type=\"text\" NAME=\"sender_email\" VALUE=\"$_POST[sender_email]\" SIZE=30></P>
<P><strong>Message:</strong><br>
<TEXTAREA NAME=\"message\" COLS=30 ROWS=5 WRAP=virtual>$_POST[message]</TEXTAREA></P>
<INPUT type=\"hidden\" name=\"op\" value=\"ds \">
<P><INPUT TYPE=\"submit\" NAME=\"submit\" VALUE=\"Send This Form\"></p>
</FORM>";
if ($_POST[op] != "ds") {
 //they need to see the form
 echo "$form_block";
 
} else if ($_POST[op] == "ds") {
 //check value of $_POST[sender_name]
 if ($_POST[sender_name] == "") {
  $name_err ="<font color=red>Please enter your name!</font><br>";
  $send ="no";
 }
 
 //check value of $_POST[sender_email]
 if ($_POST[sender_email] == "") {
  $email_err ="<font color=red>Please enter your e-mail address!</font><br>";
  $send ="no";
 }
 
 //check value of $_POST[message]
 if ($_POST[message] == "") {
  $message_err ="<font color=red>Please enter a message!</font><br>";
  $send ="no";
 }
 
 if ($send != "no"){
  //it's ok to send,so build the mail
  $msg ="E-MAIL SENT FROM WWW SITE \n";
  $msg .="Sender's Name:$_POST[sender_name]\n";
  $msg .="Sender's E-Mail:$_POST[sender_email]\n";
  $msg .="Message:$_POST[message]\n \n";
  
  $to ="[email="you@yourdomain.com"]you@yourdomain.com[/email]";
  $subject ="All-in-One Web Site Feedback";
  $mailheaders ="From:My Web Site <>\n";
  $mailheaders .="Reply-To:$_POST[sender_email]\n\n";
  
  //send the mail
  mail($to,$subject,$msg,$mailheaders);
  
  //display confirmation to user
  echo "<P>Mail has been sent!</p>";
 
 } else if ($send =="no"){
  //print error messages
  echo "$name_err";
  echo "$email_err";
  echo "$message_err";
  echo "$form_block";
 }
}
?>

Recommended Answers

All 13 Replies

forgot to say:

when you complete the form details it wont show the "mail has been sent" message and if you leave it blank it wont show the error messages.

ergh. That is pehaps the worst script I've seen in a long time.

dont say that! :)

Its from a book called, PHP fast and easy web development by Julie Meloni

I also have the php cookbook by O'reilly, wonder if thats better, still to look at it.

Did you set up a mail server?

Here's the problem:

$to ="[email="you@yourdomain.com"]you@yourdomain.com[/email]";

Change to (and change the you@yourdomain.com appropriately)

$to ='[email="you@yourdomain.com"]you@yourdomain.com[/email]';

and I will add that the script is unecessarily resource intensive; hard to follow due to improper indentation and using " where ' would have been preferable; doesn't teach how variables and strings ARE different (you don't need to and shouldn't put a variable inside a string on it own); uses outdated and depreciated HTML standards (without even a <!DOCTYPE>); and doesn't use TRUE and FALSE definitions ( $send = "no"!? What kind of rubbish is that? )

and doesn't use TRUE and FALSE definitions ( $send = "no"!? What kind of rubbish is that? )

I agree. That's a poor way to set flags around your code. I'd see if there was a way to manipulate if statements rather than flagging like this. At the very least, don't use "yes" or "no," use 1 or 0.

or prefeably, true or false. Then, it's just a matter of

if( $send )
{

// send

}

Aplogies, I should have stated that this is the code straight form the book, or the cd at least.

I typed it all myself to learn the concept of the script using my own domain, etc.....

The way the book taught me was this, so you understand.

First I created a form in HTML and saved that file as entermail.html, the form action was to call a script called sendemail.php which had the script to send the email after getting the values from the entermail.html

So that was two scripts to send the e-mail.

It then goes on to show you (the script above) how to create just 1 file to setup the form and send the mail. The above script is not working even if I put in my domain details.

Ignore my ignorence here but this is what I thought strange.

There is a hidden field in the scripts $form_block area called "op" (operation)
That field has a value of "ds" (do something)

So basically what the book is saying is that when you run the script the first time it shows the form as the "op" field has a value of "ds", you can then enter your details in the form.

Following me so far?

Okay so the form action in the script has a value of

$_SERVER[PHP_SELF]

this tell me that your going to run the script again upon the user pressing the submit butotn on the form.

So what should happen now is that the value of "op" should now be not equal (!=) to ds, this would then mean that the script has been run to collect the data and you now want to send the mail and output the "mail sent" message.

So if the value of "op" is not "ds" then the form will not be displayed.

But there is at no point in the script an option to change the value of "op" so how can it tell if something has happened to cause it not to display?

As I say I am new to this but thats my thoughts, anyone care to at least shoot me down and say I am talking rubbish.

:cheesy:

or prefeably, true or false. Then, it's just a matter of

if( $send )
{

// send

}

I never liked checking for true like this. For one, if you have register_globals=ON, you can easily define it through the URL. And second, if you have a lot of code, you can accidently define it before you check accidently.

only idiots have register globals enabled. And obviously it's best to be content specfic, eg $send_mail or whatever.

only idiots have register globals enabled. And obviously it's best to be content specfic, eg $send_mail or whatever.

You'd be surprised how many idiots there are in the world.

only idiots have register globals enabled. And obviously it's best to be content specfic, eg $send_mail or whatever.

Most webhosts have register_globals on, but I always use .htaccess in my root to turn it back off for myself anyways :)

that php is all over the place, must be worst i have ever seen too

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.