Met de volgende functie krijg ik mijn shopping cart op het scherm:
<? echo showCart(); ?>

Met deze functie kan ik een form naar mijn e-mail sturen:
<? mail($your_email, $subject, $message, "From: $name <$email>"); ?>

hoe kan ik nu de inhoud van mijn shopping cart meesturen met de e-mail?
Tja het is een beetje weinig code om er echt wijs uit te worden, maar als je hetgeen wat je normaal op je scherm te zien krijgt in het mailtje wilt hebben:

<?php
$message .= showCart();
?>

De shopping cart die normaal op het scherm weergegeven wordt, wordt nu achter aan het bericht van je mail geplakt.
Dit is mijn checkout code. En voor de pietjes precies: ik weet dat het er nu nog 'slordig' uitziet.

<?php

// Include MySQL class
require_once('_MODIFIED_CART/inc/mysql.class.php');
// Include database connection
require_once('_MODIFIED_CART/inc/global.inc.php');
// Include functions
require_once('_MODIFIED_CART/inc/functions.inc.php');
// Start the session
session_start();

?>

<html>
<head>
<link rel="stylesheet" href="_MODIFIED_CART/css/styles.css" />
</head>
<body
bgcolor="#CCCCCC"
text="#003311"
link="#F50066"
vlink="#F50066"
alink="#F50066">


<?php

$your_email = "[email protected]";
$subject = "Bestelling";
$empty_fields_message = "<p>Niet alle verplichte velden zijn ingevuld.</p>";
$thankyou_message = "<p>Dank u wel voor uw bestelling.</p>";


$name = stripslashes($_POST['txtName']);
$email = stripslashes($_POST['txtEmail']);
$message .= showCart();

if (!isset($_POST['txtName'])) {


?>

<form method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">

<p><label for="txtName">Name:</label><br />
<input type="text" title="Enter your name" name="txtName" /></p>

<p><label for="txtEmail">Email:</label><br />
<input type="text" title="Enter your email address" name="txtEmail" /></p>

<p><label for="txtMessage">Your message:</label><br />
<textarea title="Enter your message" name="txtMessage"></textarea></p>

<p><label title="Send your message">
<input type="submit" value="Send" /></label></p>

</form>

<?php

}

elseif (empty($name) || empty($email)) {

echo $empty_fields_message;

}

else {

// Stop the form being used from an external URL
// Get the referring URL
$referer = $_SERVER['HTTP_REFERER'];
// Get the URL of this page
$this_url = "http://".$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"];
// If the referring URL and the URL of this page don't match then
// display a message and don't send the email.
if ($referer != $this_url) {
echo "You do not have permission to use this script from another URL.";
exit;
}

// The URLs matched so send the email
mail($your_email, $subject, $message, "From: $name <$email>");

// Display the thankyou message
echo $thankyou_message;

}

?>
<div id="contents"><?php
echo showCart();
?> </div>



</body>
</html>


Ik heb dus dit aangepast:

$message .= showCart();

En inderdaad krijg ik nu de shopping cart in mijn e-mail, maar ook de tussenliggende code!



En dit is de showCart in functions.inc.php:


<?php
function showCart() {
global $db;
$cart = $_SESSION['cart'];
if ($cart) {
$items = explode(',',$cart);
$contents = array();
foreach ($items as $item) {
$contents[$item] = (isset($contents[$item])) ? $contents[$item] + 1 : 1;
}
$output[] = '<form action="cart.php?action=update" method="post" id="cart">';
$output[] = '<table cellspacing=6 cellpadding=4 border=0>';
foreach ($contents as $id=>$qty) {
$sql = 'SELECT id, title, author, price FROM data WHERE id = '.$id;
$result = $db->query($sql);
$row = $result->fetch();
extract($row);
$output[] = '<tr>';
$output[] = '<td width=11%><a style="text-decoration: none" href="cart.php?action=delete&id='.$id.'" class="r">Verwijder</a></td>';
$output[] = '<td width=61%>'.$title.'; '.$author.'</td>';
$output[] = '<td width=8%>&#8364; '.$price.'</td>';
$output[] = '<td width=7%><input type="text" name="qty'.$id.'" value="'.$qty.'" size="3" maxlength="3" /></td>';
$output[] = '<td width=11% align="right">&#8364; '.number_format(($price * $qty), 2).'</td>';
$total += $price * $qty;
$output[] = '</tr>';
}
$output[] = '</table><hr>';
$output[] = '<table cellspacing=6 cellpadding=4 border=0>';
$output[] = '<tr><td align="right" width=88%>Subtotaal:</td><td align="right" width=6%>&#8364;</td><td align="right" width=6%>'.number_format(($total), 2).'</td></tr>';
$output[] = '<tr><td align="right" width=88%>Verzendkosten:</td><td align="right" width=6%>&#8364;</td><td align="right" width=6%><u>6.20</u></td></tr>';
$output[] = '<tr><td align="right" width=88%><strong>Prijs inclusief verzendkosten</strong>:</td><td align="right" width=6%><strong>&#8364;</strong></td><td align="right" width=6%><strong>'.number_format(($total + 6.20), 2).'</strong></td></tr>';
$output[] = '</table>';
} else {
$output[] = '<br><p>Uw winkelwagen is leeg.</p><br>';
}
return join('',$output);
}
?>

Let wel: de table wordt definitief afgesloten in cart.php aangezien die knoppen wel in de css komen, maar niet in de (show)Cart.


De vraag is dus eigenlijk: hoe krijg ik de inhoud van showCart (dus hetzelfde resultaat wat je krijgt als je echo showCart uitvoert) meegezonden met de e-mail zonder dat de tussenliggende code ook wordt meegezonden?
wat staat er precies in de funcie showCart(); voor code?
Jep, klopt. Alle code die je normaal op de pagina zou zien door het aanroepen van showCart() wordt in het mailtje geplakt. Als je de tussenliggende code niet gemaild wilt krijgen, zou je misschien een nieuwe functie kunnen maken die je shopping cart zonder tussenliggende code weergeeft.
Blanche schreef op 13.10.2006 23:04
Jep, klopt. Alle code die je normaal op de pagina zou zien door het aanroepen van showCart() wordt in het mailtje geplakt. Als je de tussenliggende code niet gemaild wilt krijgen, zou je misschien een nieuwe functie kunnen maken die je shopping cart zonder tussenliggende code weergeeft.


Dat is toch wel balen. Maar... op zich zou ik zelf eea kunnen ontcijferen, alleen het volgende probleem is dat bij iedere bestelling de output na zoveel tekens wordt afgekapt. Is het aan te passen dat dit ongelimiteerd is?
Ik heb bedacht dat het eigenlijk niet erg is, omdat ik die code gewoon in een html editor kan stoppen. Het enige is dat voorkomen moet worden dat de output van $message in mijn mail wordt afgekapt.

Kan dit door $message van tevoren in te stellen als varchar met een oneindig aantal tekens? Nee, volgens mij heeft dit alleen te maken met MySQL... heeft iemand enig idee hoe ik het afkappen kan voorkomen?

Reageren