0

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
Ben Yates
  • 75
  • 1
  • 11

2 Answers2

0

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" />
Pupil
  • 23,834
  • 6
  • 44
  • 66
  • thanks. That seems to have progressed it but then I realised I was missing the selection of a a database so I added it in but now get a syntax error. I have updated my sendmail.php code above to reflect the change. – Ben Yates Apr 22 '16 at 12:27
0

It wasn't submitting/sending an email because it never had the chance to.

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

Will never satisfy as email_submit is not defined in your form. You have it set as the form ID <form id="email_submit"> but ID's aren't passed to $_POST in the same way as name's are.

Give your submit button a name of email_submit in your form:

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

Now that initial condition will satisfy.

mferly
  • 1,646
  • 1
  • 13
  • 19