Wow, several other conflicts with Zen Cart variables, logic problems, and more.
The following should work:
Code:
<?php
//
// Email Generator V1.00
//
// This script generates an HTML email from a list of product IDs for
// use in an email campaign.
//
$email_template_file = "email.tpl.php";
require('includes/application_top.php');
// set up some variables
$action = '';
$section = '';
$emailtemp = array();
//
// Get the action, either from the form that was posted or from the URL.
//
if (isset($_GET['action']))
{
$action = $_GET['action'];
} elseif (isset($_REQUEST['form']))
{
$action = $_REQUEST['form']['action'];
}
//
// Perform based on the particular action that was defined.
//
if ($action == "generateemail") {
$form = $_REQUEST['form'];
// Clean the product list that the user submitted by removing
// any values that are not numeric (since all of the product
// IDs are numeric).
// Then remove any double-spaces.
// Finally, we trim any spaces from the beginning or end of the string
$form['productlist'] = preg_replace("/[^0-9]/", " ", $form['productlist']);
while (strstr($form['productlist'], ' ')) $form['productlist'] = str_replace(' ', ' ', $form['productlist']);
$form['productlist'] = trim($form['productlist']);
//
// If the product list is not empty, then we split it out into an array at the spaces.
// Then we sanitize to ensure leading zeros etc are removed.
//
if (strlen($form['productlist']) > 0) {
$product_ids = explode(" ", $form['productlist']);
}
foreach ($product_ids as $key=>$val) {
$product_ids[$key] = (int)$val;
}
$form['productlist'] = implode(' ', $product_ids);
//
// If we have product IDs, then we need to get the necessary product information from
// the database. We store the product information from the database into an array for
// reference in the output.
if (count($product_ids) > 0) {
$sql = "SELECT p.products_id, p.products_status, pd.products_name, pd.products_description,
p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price,
p.products_tax_class_id, p.products_date_added, p.products_date_available,
p.manufacturers_id FROM " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd
WHERE p.products_id IN ('".implode("','", $product_ids)."') AND pd.products_id = p.products_id
AND pd.language_id = " . (int)$_SESSION['languages_id'];
$results = $db->Execute($sql);
while (!$results->EOF)
{
$product['id'.$results->fields['products_id']] = $results->fields;
$results->MoveNext();
}
unset($sql, $results);
//
// Get the output template information from the file and store the data for
// reference.
//
$fhandle = fopen($email_template_file, "r");
$content = fread($fhandle, filesize($email_template_file));
fclose($fhandle);
$lines = preg_split("/[\r\n]/", $content);
if (count($lines) > 0) {
foreach ($lines as $line) {
if (preg_match("/\\$\\$(\S+)/", $line, $matches)) {
$section = strtolower($matches[1]);
if (!isset($emailtemp[$section])) $emailtemp[$section] = '';
} elseif ($section != '') {
$emailtemp[$section] .= $line."\n";
}
}
}
unset($content, $line, $lines, $section);
}
$edit = $form;
unset($form, $action);
}
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title>Email Generator V1.00</title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<link rel="stylesheet" type="text/css" href="includes/cssjsmenuhover.css" media="all" id="hoverJS">
<script language="javascript" src="includes/menu.js"></script>
<script language="javascript" src="includes/general.js"></script>
<script type="text/javascript">
<!--
function init()
{
cssjsmenu('navbar');
if (document.getElementById)
{
var kill = document.getElementById('hoverJS');
kill.disabled = true;
}
}
// -->
</script>
<style type="text/css">
<!--
body {
background-color: #FFFFFF;
font-family: tahoma;
font-size: 11px;
}
label {
margin: 3px 0 0 0;
display: block;
width: 130px;
float: left;
padding: 3px 0 0 0;
clear: both;
}
label.required {
font-weight: bold;
}
table {
font-size: 11px;
}
-->
</style>
</head>
<body onload="init()">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->
<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
<tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top"> </td>
<!-- body_text //-->
<td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="100%" valign="top"><p class="pageHeading">Email Generator V1.00</p></td>
</tr>
<tr>
<td>
<?php
//
// The output depends on what page is currently being displayed.
//
if (sizeof($emailtemp) > 0) {
?>
<br>
<b>Results</b><br>
<?php
if (count($product_ids) > 0) {
?>
<table cellpadding="2" cellspacing="0">
<tr style="font-weight: bold;"><td>Product ID</td><td>Status</td><td>Name</td></tr>
<?php
$html_string = $emailtemp['header'];
foreach ($product_ids as $product_id) {
if (isset($product['id'.$product_id])) {
$template_data = $product['id'.$product_id];
$template_data['products_price'] = number_format($template_data['products_price'], 2);
$html_string .= preg_replace("/\<\<(.*?)\>\>/e", "\$template_data['\\1']", $emailtemp['content']);
?>
<tr><td><?php echo $product_id?></td><td>Found</td><td><?php echo htmlentities($product['id'.$product_id]['products_name'])?></td></tr>
<?php
} else {
?>
<tr><td><?php echo $product_id?></td><td>Not Found</td><td>N/A</td></tr>
<?php
}
}
$html_string .= $emailtemp['footer'];
?>
</table>
<?php
}
?>
<br>
<b>HTML Code</b><br>
<form>
<textarea cols="60" rows="10">
<?php echo htmlentities($html_string)?>
</textarea>
</form>
<br>
<?php
}
?>
Enter the product IDs in the order in which you'd like for them to appear in the email, separated by commas or spaces or anything that's not a number.
<br>
<form method="post" action="generate_email2.php">
<input type="hidden" name="form[action]" value="generateemail">
<label class="required" for="productlist">Product IDs</label><textarea id="productlist" name="form[productlist]" cols="30" rows="5"><?php echo (isset($edit)) ? $edit['productlist'] : '';?></textarea>
<br> <br>
<input type="submit" value="Generate">
</form>
</td>
</tr>
</table></td>
</tr>
</table>
<!-- body_eof //-->
<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php
require(DIR_WS_INCLUDES . 'application_bottom.php');
//
// Functions
//
function convertHTMLArray($array)
{
// This function accepts a single-dimensional array, runs through the elements
// and converts special characters to HTML tags.
if (is_array($array)) {
foreach ($array as $key => $val) {
$array[$key] = htmlspecialchars(stripslashes($val));
}
} else {
$array = NULL;
}
return $array;
}
and
Code:
$$HEADER
<TABLE CELLPADDING="15" CELLSPACING="0">
$$CONTENT
<TR>
<TD VALIGN="top" WIDTH="1%"><A HREF="http://www.feelgoodwatches.com/catalog/index.php?main_page=product_info&products_id=<<products_id>>" TARGET="_blank"><IMG SRC="http://www.feelgoodwatches.com/catalog/images/<<products_image>>" BORDER="0" ALT="<<products_name>>" WIDTH="125"></A></TD>
<TD VALIGN="top" WIDTH="99%"><FONT COLOR="#000000" FACE="Arial" SIZE=2><A HREF="http://www.feelgoodwatches.com/catalog/index.php?main_page=product_info&products_id=<<products_id>>" TARGET="_blank"><FONT COLOR="#6868C9" FACE="Arial" SIZE=3><B><<products_name>></B></FONT></A><BR>
<<products_description>>
<BR><FONT COLOR="#FF0000" FACE="Arial" SIZE=3><B>Price:</B> <B>$<<products_price>></B></FONT>
</FONT></TD>
</TR>
<TR>
<TD COLSPAN="2"><HR WIDTH="100%" SIZE="1" COLOR="#7777D8" NOSHADE></TD>
</TR>
$$FOOTER
</TABLE>
If it works for you, please show your appreciation here: www.zen-cart.com/donate
Bookmarks