Ben Yates Ben Yates - 7 months ago 11
PHP Question

Send email and write to database not working

I have a form that allows a user to be messaged by a non-user, the script takes the form contents, stores them in my

messages
table and then finally emails the user the contents to their email address.

I'm having trouble figuring out why my form will not submit and returning the error message I've set when it hasn't been completed correctly. No emails are being sent and no entry is being made in the database table.

My form code;

<form class="signup-form" action="sendmail.php" id="email_submit" method="POST">
<fieldset>
<input type="text" name="msg_touserid" id="msg_touserid" value="<?php echo htmlentities($_GET["uid"], ENT_QUOTES, 'UTF-8'); ?>" style="display: none;">
<input type="text" name="msg_tousername" id="msg_tousername" value="<?php echo htmlentities($_GET["username"], ENT_QUOTES, 'UTF-8'); ?>" style="display: none;">
<input type="text" placeholder="Your name..." name="msg_fromname" id="msg_fromname" value=""><br />
<input type="text" placeholder="Your mobile number..." name="msg_mobile" id="msg_mobile" value=""><br />
<input type="email" name="msg_toemail" id="msg_toemail" value="XXX@gmail.com" style="display: none;">

<input type="email" placeholder="Your email..." name="msg_fromemail" id="msg_fromemail" value=""><br />
<input type="text" placeholder="Message subject..." name="msg_subject" id="msg_subject" value=""><br />
<textarea name="msg_messagebody" id="msg_messagebody" style="height: 282px; background-image: none; background-position: 0px 50%; background-repeat: repeat;"></textarea>
</fieldset>
<input type="submit" class="btn-colored submit-send-email" value="Send email" />
</form>


My sendmail.php code;

$connection = mysql_connect('localhost', 'XXX', 'XXX');
if (!$connection){
die('Could not connect: ' . mysql_error());
}

mysql_select_db( 'DB' );
if (isset($_POST['email_submit'])){
$msg_touserid = $_POST['msg_touserid'];
$msg_tousername = $_POST['msg_tousername'];
$msg_fromname = $_POST['msg_fromname'];
$msg_mobile = $_POST['msg_mobile'];
$msg_toemail = $_POST['msg_toemail'];
$msg_fromemail = $_POST['msg_fromemail'];
$msg_subject = $_POST['msg_subject'];
$msg_messagebody = $_POST['msg_messagebody'];

$sql = "INSERT INTO messages (msg_touserid, msg_tousername, msg_fromname, msg_mobile, msg_toemail, msg_fromemail, msg_subject, msg_messagebody)
VALUES ('$msg_touserid', $msg_tousername', '$msg_fromname', '$msg_mobile', '$msg_toemail', '$msg_fromemail', '$msg_subject', '$msg_messagebody')";
if (!mysql_query($sql,$connection)){
die('Error: ' . mysql_error());
}

$emailID = "$msg_toemail";
$subject = "Enquiry from. $msg_fromname . through our website";
$body = <<<EOD

<table cellspacing="0" cellpadding="1" border="1">
<tbody>
<tr>
<td style="padding: 5px 10px;" width="150">Name: </td>
<td style="padding: 5px 10px;">$msg_fromname</td>
</tr>
<tr>
<td style="padding: 5px 10px;" width="150">Mobile: </td>
<td style="padding: 5px 10px;">$msg_mobile</td>
</tr>
<tr>
<td style="padding: 5px 10px;" width="150">Email: </td>
<td style="padding: 5px 10px;">$msg_fromemail</td>
</tr>
<tr>
<td style="padding: 5px 10px;" width="150">Message: </td>
<td style="padding: 5px 10px;">$msg_messagebody</td>
</tr>
</tbody>
</table>

EOD;

$headers = "From: admin@domain.com\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
$headers .= "X-Priority: 1\r\n";
$headers .= "X-MSMail-Priority: High\n";
$headers .= "X-Mailer: PHP". phpversion() ."\r\n";

mail($emailID, $subject, $body, $headers );
echo "<h4>Thank you for your message.</h4>";

} else {
echo("Oops... Please check you have completed the form correctly.");
};


My database structure;

id int(10) (AI)
msg_touserid int(10)
msg_tousername varchar(100)
msg_fromname varchar(100)
msg_mobile varchar(20)
msg_toemail varchar(100)
msg_fromemail varchar(100)
msg_subject varchar(200)
msg_messagebody varchar(1000)
msg_sent timestamp

Answer

The submit button does not have name attribute.

<input type="submit" class="btn-colored submit-send-email" value="Send email" />

So, the condtion

if (isset($_POST['email_submit'])){

is not satisfying.

Solution:

Add name to submit button.

Corrected code:

<input type="submit" class="btn-colored submit-send-email" value="Send email" name="email_submit" />
Comments