954,178 Members — Technology Publication meets Social Media
Username:
Password:
Lost login information?
Have something to say? Contribute New Article Reply to this Article

Learning PHP but problem with script

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.

[PHP]

All-In-One Feedback Form
<?
$form_block ="

Your Name:

Your E-Mail Address:

Message:
$_POST[message]


";
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 ="Please enter your name!
";
$send ="no";
}

//check value of $_POST[sender_email]
if ($_POST[sender_email] == "") {
$email_err ="Please enter your e-mail address!
";
$send ="no";
}

//check value of $_POST[message]
if ($_POST[message] == "") {
$message_err ="Please enter a message!
";
$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 "Mail has been sent!


";

} else if ($send =="no"){
//print error messages
echo "$name_err";
echo "$email_err";
echo "$message_err";
echo "$form_block";
}
}
?> [/PHP]

wise1
Newbie Poster
4 posts since Mar 2004
Reputation Points: 10
Solved Threads: 0
 

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.

wise1
Newbie Poster
4 posts since Mar 2004
Reputation Points: 10
Solved Threads: 0
 

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

Roberdin
Supreme Evil Overlord
Team Colleague
282 posts since Feb 2003
Reputation Points: 63
Solved Threads: 6
 

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.

wise1
Newbie Poster
4 posts since Mar 2004
Reputation Points: 10
Solved Threads: 0
 

Did you set up a mail server?

samaru
a.k.a inscissor
Team Colleague
1,256 posts since Feb 2002
Reputation Points: 262
Solved Threads: 18
 

Here's the problem:
[php]
$to ="[email="you@yourdomain.com"]you@yourdomain.com[/email]";
[/php]

Change to (and change the [email]you@yourdomain.com[/email] appropriately)
[php]
$to ='[email="you@yourdomain.com"]you@yourdomain.com[/email]';
[/php]

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 ); and doesn't use TRUE and FALSE definitions ( $send = "no"!? What kind of rubbish is that? )

Roberdin
Supreme Evil Overlord
Team Colleague
282 posts since Feb 2003
Reputation Points: 63
Solved Threads: 6
 
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.

samaru
a.k.a inscissor
Team Colleague
1,256 posts since Feb 2002
Reputation Points: 262
Solved Threads: 18
 

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

if( $send )
{

// send

}

Roberdin
Supreme Evil Overlord
Team Colleague
282 posts since Feb 2003
Reputation Points: 63
Solved Threads: 6
 

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:

wise1
Newbie Poster
4 posts since Mar 2004
Reputation Points: 10
Solved Threads: 0
 
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.

samaru
a.k.a inscissor
Team Colleague
1,256 posts since Feb 2002
Reputation Points: 262
Solved Threads: 18
 

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

Roberdin
Supreme Evil Overlord
Team Colleague
282 posts since Feb 2003
Reputation Points: 63
Solved Threads: 6
 
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.

samaru
a.k.a inscissor
Team Colleague
1,256 posts since Feb 2002
Reputation Points: 262
Solved Threads: 18
 
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 :)

Gary King
PHP/vBulletin Guru
Team Colleague
417 posts since Nov 2003
Reputation Points: 53
Solved Threads: 5
 

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

imgtube
Newbie Poster
16 posts since Nov 2006
Reputation Points: 10
Solved Threads: 0
 

This article has been dead for over three months

Post: Markdown Syntax: Formatting Help
You