Jump to content

Form to Email code problems (while - looping)


tezza42

Recommended Posts

I have a form on a page which is accessed when a user logs into their account.

The form dynamically pulls bits of the users info from 2 tables in a mysql database, Tables (ITEMS) and Table (USERS).

Table (USERS) holds the users info (NAME, EMAIL ETC) while Table (ITEMS) hold information about the users items for which they may have several of.

When the form page is accessed all the users items from Table (ITEMS) are dynamically shown on the form with several radio buttons at the side of each item.

The user can tick certain radio buttonss at the side of each item and click the send button.

 

TRYING TO ACHIEVE...

After the form is sent a thank you message is returned on the same page with details of the items and what radios were ticked.

An Email of the same is sent to user with info of the items and what radios were ticked.

An Email is also sent to me with same info of the items and what radios were ticked.

WHAT I AM ACHIEVING SO FAR WITH CODE BELOW:

The form page is ok showing all users items, radios, send button etc.

The returned thank you page is fine showing items, what radios were checked etc.

Even the email part is working sending an email to the user and myself.

 

THE PROBLEM IS THAT A SEPERATE EMAIL IS SENT TO BOTH OF US FOR EACH ITEM THE USER HAS IN THE DATABASE.

I JUST WANT ONE EMAIL SENDING TO BOTH OF US DETAILING ALL ITEMS.

I realise this is because of the while statement in the call to the database which is looping the below code for each item thus sending an email for each item.

What I can not suss out is how to send just the one email with all items on.

Tried moving the closing loop bracket all over the place and parts of the code but to not avail.

 

THE CODE: (some unecessary code removed from echo/thank you to simplify)

<table width="100%">

<tr>

<td class="bodytext"><strong>Name</strong></td>

<td class="bodytext"><strong>Ref</strong></td>

<td><strong>Status</strong></td>

<td><strong>Type</strong></td>

<td><strong>Date</strong></td>

<td><strong>Extend</strong></td>

<td><strong>Feature</strong></td>

<td><strong>Offer</strong></td>

</tr>

 

<form action="example-this-page" method="post">

<input type="hidden" name="action" value="0">

<input type="hidden" name="id" value="<?php echo $_REQUEST["id"]; ?>">

 

<?php

$sql = "SELECT * FROM ".$TABLES["items"]." WHERE user_id='".$_SESSION["UserAccount"]."'";

$sql_result = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);

 

while ($ITEMS = mysql_fetch_assoc($sql_result)) {

 

$sql = "SELECT * FROM ".$TABLES["users"]." WHERE id='".$ITEMS["user_id"]."'";

$sql_resultT = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);

 

$USER=mysql_fetch_assoc($sql_resultT);

 

?>

 

<? if (isset($action)) {

 

$to = $USER["email"];

$mailheader = "From: $email\r\n";

$mailheader .= "Reply-To: $email\r\n";

$mailheader .= "Content-type: text/html; charset=iso-8859-1\r\n";

$msg =

 

"Dear ".stripslashes($USER["name"])."<br><br>

<table><tr>

<td><strong>Name</strong></td>

<td><strong>Ref No</strong></td>

<td><strong>Status</strong></td>

<td><strong>Type</strong></td>

<td><strong>Date</strong></td>

<td><strong>Extend</strong></td>

<td><strong>Feature</strong></td>

<td><strong>Offer</strong></td>

</tr>

<tr>

<td>".stripslashes($ITEMS["name"])."</td>

<td>".stripslashes($ITEMS["ref"])."</td>

<td>".stripslashes($ITEMS["status"])."</td>

<td>".stripslashes($ITEMS["type"])."</td>

<td>".stripslashes($ITEMS["date"])."</td>

<td>".$_POST['extend']."</td>

<td>".$_POST['feature']."</td>

<td>".$_POST['offer']."</td>

</tr>

</table>

";

 

mail($to, "subject", $msg, $mailheader) or die ("Failure");

mail("me@me.co.uk", "subject", $msg, $mailheader) or die ("Failure");

 

echo

"<br /><br /><font size=2>

<strong><center>Thank you!</center><br />

Your details of your request has been sent:</center><br />

";

 

};

 

?>

 

<tr>

<td><?php echo stripslashes($ITEMS["name"]); ?></td>

<td><?php echo stripslashes($ITEMS["ref"]); ?></td>

<td><?php echo stripslashes($ITEMS["status"]); ?></td>

<td><?php echo stripslashes($ITEMS["type"]); ?></td>

<td><?php echo stripslashes($ITEMS["date"]); ?></td>

 

<td><input type="radio" name="extend<?php echo stripslashes($ITEMS["id"]); ?>" value="No"> No

<input type="radio" name="extend<?php echo stripslashes($ITEMS["id"]); ?>" value="Yes" /> Yes</td>

<td><input type="radio" name="featured<?php echo stripslashes($ITEMS["id"]); ?>" value="No"> No

<input type="radio" name="featured<?php echo stripslashes($ITEMS["id"]); ?>" value="Yes" /> Yes</td>

<td><input type="radio" name="latedeal<?php echo stripslashes($ITEMS["id"]); ?>" value="No"> No

<input type="radio" name="latedeal<?php echo stripslashes($ITEMS["id"]); ?>" value="Yes" /> Yes</td>

</tr>

 

<?php } ?>

 

<tr>

<td> <input type="submit" name="Submit" value="Send"></td>

</tr></table>

 

 

</form>

 

</table>

Link to comment
Share on other sites

The mail() needs to be after the closing brace of the while loop.  But since it uses variables which are reset each time through that loop, you also need a way for it to combine all those variables.

 

What I would do is start building the email message, and add to it each time through the while loop.  Then send it once afterwards.  So you would create $msg before the while loop, add to $msg inside the while loop, and send $msg after the while loop.

Link to comment
Share on other sites

You can improve your code with following guidelines

  • Only one recode come from the query, use mysql_fetch_row(), no need for while()
  • if possible then use joins for
    $sql = "SELECT * FROM ".$TABLES["users"]." WHERE id='".$ITEMS["user_id"]."'";
    $sql_resultT = mysql_query ($sql, $connection ) or die ('request "Could not execute SQL query" '.$sql);
    


     

  • Select only those columns from the table which you want to use in code.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.