Forum Moderators: coopster

Message Too Old, No Replies

Help with Simple Form NOOB HERE

         

sammymedia

9:41 pm on Sep 12, 2011 (gmt 0)

10+ Year Member



I'll admit. I'm not good with coding, I've been able to get by modifying what all of you geniuses share online, however for the last week I've been trying to get a PHP contact form to work and keep hitting walls.


my form is here: [sammysites.com ] ... I use Yahoo web hosting for my server(only because that's what I started on and all of my files are there ... I am planning on switching soon)

Anyway, my form is not loading for visitors regularly like it should be.
It will submit sometimes, but often I get "waiting for sammysites.com" in the status bar.
I contacted Yahoo and they told me I need to specify a return or from field... not sure. This is what keeps showing in the error log: "Sep 12 19:08:57 From address not in member domain. Message not sent."

Anyone have any suggestions? PLEASE HELP ME! I'm in college, I can't afford any other help options lol!

Demaestro

10:00 pm on Sep 12, 2011 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member Top Contributors Of The Month



Hey Sammy,

The error message you are getting seems to be revolving around the fact that it will only send emails that claim to be from your domain name.

What this means is that to send an email from sammysites.com then the "From" address must be from @sammysites.com

If you can post the PHP code where you are trying to send the email I can show you what I mean.

Basically it sounds like the issue will be fixed if you make the "from" address something like info@sammysites.com

If you need the reply email to be different than the from email you can specify that as well.

sammymedia

11:29 pm on Sep 12, 2011 (gmt 0)

10+ Year Member



Demaestro, thanks so much. I'm not sure if you can see it, but the "contact.php" is the main thing I'm pretty sure. You'll see there isn't any specification of emails except for where the form is sent to.

Dinkar

1:45 am on Sep 13, 2011 (gmt 0)

10+ Year Member



I tried and it's working.

It will be better, if you post your PHP code here.

sammymedia

5:18 pm on Sep 13, 2011 (gmt 0)

10+ Year Member



It works sometimes, and sometimes it doesn't. It often takes a REALLY long time to load. I just think something is wrong.

Temporarily, I've added a plugin to my site... but it's not free and doesn't look too good with my branding. The fields that I need are on correct on the temp form... you can see it here: [sammysites.com...]

Here is the code that needs to be fixed:




<?php
/****SET THE MAX CHARS FOR EACH MESSAGE***************/
//it is recommended not to set the max too high, to prevent extremely long messages
// from stalling your server

$EMAIL_MAX = 2500;
/*****************************************************/

//function for stripping whitespace and some chars
function cleanUp($str_to_clean, $newlines, $spaces){

//build list of whitespace chars to be removed
$bad_chars = array('\r', '\t', ';');

//if newlines are false, add that to the list of bad chars
if(!$newlines){array_push($bad_chars, '\n');}

//if spaces are false, strip them too
if(!$spaces){array_push($bad_chars, ' ');}

$str_to_clean_a = str_replace($bad_chars, '', $str_to_clean);
$str_to_clean_b = strip_tags($str_to_clean_a);
return $str_to_clean_b;
}

//function to check for valid email address pattern
function checkEmail($email) {
if(!eregi("^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$", $email)) {return false;}
return true;
}
//function to check for valid url pattern
function checkURL($url) {
if(!eregi("^http:\/\/", $url)) {return false;}
return true;
}
?>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Contact Form</title>
<style type="text/css">
/* BASIC STYLES */
body{font-family: 'Lucida Grande',Trebuchet, Tahoma, sans-serif;color:#222;font-size:11px;}
fieldset{margin:0;padding:0;border:0;}
label{width:250px; display:block;}
.txt_input{width:250px; display:block;}
textarea{height:80px; width:250px;}
input{display:block;}
.req{color:#f00;font-size:90%;}
#form_errors{color:#f00; display:none;}
#form_thanks{color:#000; display:none;}
</style>

<script type="text/javascript">
v_fields = new Array('sender_email','sender_subject','sender_message');alert_on = true;thanks_on = true; thanks_message = "Thank you. Your price request has been sent, we will contact you shortly. You may learn even more about College the Book here.";
function validateForm(){

//alert(v_fields);

//init errors
var err = "";

//start checking fields
for(i=0;i<v_fields.length;i++){

//store the field value
var _thisfield = eval("document.contact."+v_fields[i]+".value");

//check the field value
if(v_fields[i] == "sender_name"){
if(!isAlpha(_thisfield)){ err += "Please enter a valid name\n";}
}else if(v_fields[i] == "sender_subject"){
if(!isAlpha(_thisfield)){ err += "Please enter a valid subject\n";}
}else if(v_fields[i] == "sender_email"){
if(!isEmail(_thisfield)){ err += "Please enter a valid email address\n";}
}else if(v_fields[i] == "sender_url"){
if(!isURL(_thisfield)){ err += "Please enter a valid URL\n";}
}else if(v_fields[i] == "sender_phone"){
if(!isPhone(_thisfield)){ err += "Please enter a valid phone number\n";}
}else if(v_fields[i] == "sender_message"){
if(!isText(_thisfield)){ err += "Please enter a valid message\n";}
}

}//end for

if(err != ""){
if(alert_on){
alert("The following errors have occurred\n"+err);
}else{
showErrors(err);
}

return false;

}

return true;
}

//function to show errors in HTML
function showErrors(str){
var err = str.replace(/\n/g,"<br />");
document.getElementById("form_errors").innerHTML = err;
document.getElementById("form_errors").style.display = "block";

}

//function to show thank you message in HTML
function showThanks(str){
var tym = str.replace(/\n/g,"<br />");
document.getElementById("form_thanks").innerHTML = tym;
document.getElementById("form_thanks").style.display = "block";

}

function isEmail(str){
if(str == "") return false;
var regex = /^[^\s()<>@,;:\/]+@\w[\w\.-]+\.[a-z]{2,}$/i
return regex.test(str);
}

function isText(str){
if(str == "") return false;
return true;
}

function isURL(str){
var regex = /[a-zA-Z0-9\.\/:]+/
return regex.test(str);
}

// returns true if the number is formatted in the following ways:
// (000)000-0000, (000) 000-0000, 000-000-0000, 000.000.0000, 000 000 0000, 0000000000
function isPhone(str){
var regex = /^\(?[2-9]\d{2}[\)\.-]?\s?\d{3}[\s\.-]?\d{4}$/
return regex.test(str);
}

// returns true if the string contains A-Z, a-z or 0-9 or . or # only
function isAddress(str){
var regex = /[^a-zA-Z0-9\#\.]/g
if (regex.test(str)) return true;
return false;
}

// returns true if the string is 5 digits
function isZip(str){
var regex = /\d{5,}/;
if(regex.test(str)) return true;
return false;
}

// returns true if the string contains A-Z or a-z only
function isAlpha(str){
var regex = /[a-zA-Z]/g
if (regex.test(str)) return true;
return false;
}

// returns true if the string contains A-Z or a-z or 0-9 only
function isAlphaNumeric(str){
var regex = /[^a-zA-Z0-9]/g
if (regex.test(str)) return false;
return true;
}

</script>

<?php
if(isset($_POST["submitForm"])){

$_name = cleanUp($_POST["sender_name"], false, true);

$_email = cleanUp($_POST["sender_email"], false, false);

$_subject = cleanUp($_POST["sender_subject"], false, true);

$_message = cleanUp($_POST["sender_message"], true, true);

$_url = cleanUp($_POST["sender_url"], false, false);

$_phone = cleanUp($_POST["sender_phone"], false, true);


$_body = "You have been sent this message from your contact form\n\n";

if($_name){
$_body .= "NAME: $_name\n\n";
}

if($_email){
$_body .= "EMAIL: $_email\n\n";
}

if($_url){
$_body .= "URL: $_url\n\n";
}

if($_phone){
$_body .= "PHONE: $_phone\n\n";
}

if($_message){

//check length of body, reduce to max chars
if(strlen($_message) > $EMAIL_MAX){$_message= substr($_message, 0, $EMAIL_MAX);}else{$_message = $_message;}
if(strlen($_message) > $SMS_MAX){$_message2 = substr($_message, 0, $SMS_MAX);}else{$_message2 = $_message;}
}



//store the recipient(s)
$_to = array();

//now get the recipient(s)
$_to[] = "sammy@collegethebook.com";

//define the subject
if(!$_subject){$_subject = "E-Mail from your contact form";}


if(!$_name){$_name = "CONTACT FORM";}
if(!$_email){$_email = $_name;}

//set the headers
$_header = "From: $_name < $_email >" . "\r\n" .
"Reply-To: ".$_email."\r\n" .
"Super-Simple-Mailer: supersimple.org";

//we can send up to 2 emails (EMAIL and/or SMS)
if(count($_to) > 2){ $_to = array_slice($_to,0,2);}

for($i=0;$i<count($_to);$i++){

//get the correct message, based on where it is delivering to
if(strstr($_to[$i],"teleflip.com")){$_text = $_body.$_message2;}else{$_text = $_body.$_message;}

//send the email(s)
mail($_to[$i], $_subject, $_text, $_header);

}

echo "<script type=\"text/javascript\">window.onload = function(){showThanks(thanks_message);}</script>";
}
?>

</head>
<body>
<div id="container">
<div class="contact">

<fieldset style="float:left;">
<p id="form_errors"></p>
<p id="form_thanks"></p>
<form name="contact" action="<?=$_SERVER['PHP_SELF']?>" method="post" onsubmit="return validateForm();">

<label>Your Name </label>
<input type="text" class="txt_input" name="sender_name" />

<label>Your E-Mail <span class="req">*</span></label>
<input type="text" class="txt_input" name="sender_email" />

<label>Subject <span class="req">*</span></label>
<input type="text" class="txt_input" name="sender_subject" />

<label>URL </label>
<input type="text" class="txt_input" name="sender_url" />

<label>Telephone </label>
<input type="text" class="txt_input" name="sender_phone" />

<label>Message <span class="req">*</span></label>
<textarea name="sender_message"></textarea>
<input type="submit" name="submitForm" value="Submit" />
</form>
</fieldset>
</div>

Demaestro

7:32 pm on Sep 13, 2011 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member Top Contributors Of The Month



hey sammy...

Going off the error message I still think the issue is that the "FROM" is being set to an email that isn't from your domain name.

I would start by trying the following:

Locate this line of code

//set the headers
$_header = "From: $_name < $_email >" . "\r\n" .

Change it to

//set the headers
$_header = "From: system@sammysites.com" . "\r\n" .

Post back and let me know if that had any affect on things.

sammymedia

2:13 am on Sep 14, 2011 (gmt 0)

10+ Year Member



Demaestro, THANKS! It did work... i tested it several times.
For some reason now that I decided to test it a little bit later, it seems be loading very slow... and now I am actually not receiving any messages... any ideas?

I just checked to make sure I didn't overwrite the file with the old code, and so I should still be good.

rocknbil

3:36 pm on Sep 14, 2011 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Change this

mail($_to[$i], $_subject, $_text, $_header);

to something like this

if ! (mail($_to[$i], $_subject, $_text, $_header)){
echo "<p>Could not send mail. To: $_to[$i] Subject: $_subject Headers: $header</p>";
exit;
}

That might lead to what the problem could be.

Demaestro

3:50 pm on Sep 14, 2011 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member Top Contributors Of The Month



Sammy,

Another thing to check is that the message body doesn't exceed 2500 chars.

If it does then you can increase the limit by changing this line:

/****SET THE MAX CHARS FOR EACH MESSAGE***************/
//it is recommended not to set the max too high, to prevent extremely long messages
// from stalling your server

$EMAIL_MAX = 2500;
/*****************************************************/


Also because you are with Yahoo hosting and they do all sorts of whacky crap it could be that they have a limit on how many emails SENDMAIL will send on your behalf.

Another possiblilty is that Yahoo could be "throttling" your messages, some host limit you to 200/hour some hosts limit you to 25/hour so I would ask Yahoo if they have any limits on your SENDMAIL