je réponds pour Walter, vu que c'est de mon site qu'il s'agit.
Voilà le contenu de mon checkout_confirmation.php, même si je doute que le pb vienne de là, étant donné que je n'y ai pas touché :
<?php
/*
$Id: checkout_confirmation.php,v 1.139 2003/06/11 17:34:53 hpdl Exp $
osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com Copyright © 2003 osCommerce
Released under the GNU General Public License
*/
require('includes/application_top.php');
// Si le client n'a pas lu les conditions générales de vente.
if (!$HTTP_POST_VARS['conditions']) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT,
'error_message=' . urlencode("Vous devez prendre connaissance des
Conditions générales de vente avant de valider votre commande."), 'SSL', false));
}
// if the customer is not logged on, redirect them to the login page
if (!tep_session_is_registered('customer_id')) {
$navigation->set_snapshot(array('mode' => 'SSL', 'page' => FILENAME_CHECKOUT_PAYMENT));
tep_redirect(tep_href_link(FILENAME_LOGIN, '', 'SSL'));
}
// if there is nothing in the customers cart, redirect them to the shopping cart page
if ($cart->count_contents() < 1) {
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
}
// avoid hack attempts during the checkout procedure by checking the internal cartID
if (isset($cart->cartID) && tep_session_is_registered('cartID')) {
if ($cart->cartID != $cartID) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
}
}
// if no shipping method has been selected, redirect the customer to the shipping method selection page
if (!tep_session_is_registered('shipping')) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
}
if (!tep_session_is_registered('payment')) tep_session_register('payment');
if (isset($HTTP_POST_VARS['payment'])) $payment = $HTTP_POST_VARS['payment'];
if (!tep_session_is_registered('comments')) tep_session_register('comments');
if (tep_not_null($HTTP_POST_VARS['comments'])) {
$comments = tep_db_prepare_input($HTTP_POST_VARS['comments']);
}
// load the selected payment module
require(DIR_WS_CLASSES . 'payment.php');
if ($credit_covers) $payment=''; // CCGV
$payment_modules = new payment($payment);
require(DIR_WS_CLASSES . 'order_total.php');// CCGV
require(DIR_WS_CLASSES . 'order.php');
$order = new order;
$payment_modules->update_status();
$order_total_modules = new order_total;// CCGV
$order_total_modules->collect_posts();// CCGV
$order_total_modules->pre_confirmation_check();// CCGV
##### Points/Rewards Module V2.00 check for error BOF #######
if (isset($HTTP_POST_VARS['customer_shopping_points_spending']) && USE_REDEEM_SYSTEM == 'true') {
if (isset($HTTP_POST_VARS['customer_shopping_points_spending'])&&tep_calc_shopping_pvalue($customer_shopping_points_spending) < $order->info['total'] && !is_object($$payment)) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(REDEEM_SYSTEM_ERROR_POINTS_NOT), 'SSL'));
} else {
if (!tep_session_is_registered('customer_shopping_points_spending'))
tep_session_register('customer_shopping_points_spending');
}
}
if (isset($HTTP_POST_VARS['customer_referred']) && tep_not_null($HTTP_POST_VARS['customer_referred'])) {
$valid_referral_query = tep_db_query("SELECT customers_id FROM " . TABLE_CUSTOMERS . " WHERE customers_email_address = '" . $HTTP_POST_VARS['customer_referred'] . "'");
$valid_referral = tep_db_fetch_array($valid_referral_query);
if (!tep_db_num_rows($valid_referral_query)) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(REFERRAL_ERROR_NOT_FOUND), 'SSL'));
}
if ($HTTP_POST_VARS['customer_referred'] == $order->customer['email_address']) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(REFERRAL_ERROR_SELF), 'SSL'));
} else {
$customer_referral = $valid_referral['customers_id'];
if (!tep_session_is_registered('customer_referral')) tep_session_register('customer_referral');
}
}
// if ( ( is_array($payment_modules->modules) && (sizeof($payment_modules->modules) > 1) && !is_object($$payment) ) || (is_object($$payment) && ($$payment->enabled == false)) ) {
if ( (is_array($payment_modules->modules)) && (sizeof($payment_modules->modules) > 1) && (!is_object($$payment)) && (!$customer_shopping_points_spending) && (!$credit_covers) || (is_object($$payment) && ($$payment->enabled == false)) ) {
tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, 'error_message=' . urlencode(ERROR_NO_PAYMENT_MODULE_SELECTED), 'SSL'));
}
######## Points/Rewards Module V2.00 EOF #################*/
if (is_array($payment_modules->modules)) {
$payment_modules->pre_confirmation_check();
}
// load the selected shipping module
require(DIR_WS_CLASSES . 'shipping.php');
$shipping_modules = new shipping($shipping);
//Lines below repositioned for CCGV
// require(DIR_WS_CLASSES . 'order_total.php');
// $order_total_modules = new order_total;
// Stock Check
$any_out_of_stock = false;
if (STOCK_CHECK == 'true') {
for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
if (tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty'])) {
$any_out_of_stock = true;
}
}
// Out of Stock
if ( (STOCK_ALLOW_CHECKOUT != 'true') && ($any_out_of_stock == true) ) {
tep_redirect(tep_href_link(FILENAME_SHOPPING_CART));
}
}
require(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_CONFIRMATION);
$breadcrumb->add(NAVBAR_TITLE_1, tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'));
$breadcrumb->add(NAVBAR_TITLE_2);
?>
<!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><?php echo TITLE; ?></title>
<base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<script language="JavaScript1.2" type="text/javascript">
<!--
function MM_findObj(n, d) { //v4.01
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
if(!x && d.getElementById) x=d.getElementById(n); return x;
}
function MM_swapImage() { //v3.0
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
}
function MM_swapImgRestore() { //v3.0
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
}
function MM_preloadImages() { //v3.0
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
}
//-->
</script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" onload="MM_preloadImages('images/header_r1_c3_f4.jpg','images/header_r7_c3_f6.jpg','images/header_r1_c3.jpg','images/header_r7_c3.jpg','images/header_r1_c5_f4.jpg','images/header_r1_c9_f6.jpg','images/header_r5_c5_f4.jpg','images/header_r5_c8_f6.jpg','images/header_r5_c9_f8.jpg','images/header_r6_c9_f6.jpg','images/header_r7_c5_f4.jpg','images/header_r7_c7_f4.jpg','images/header_r1_c5.jpg','images/header_r1_c9.jpg','images/header_r5_c5.jpg','images/header_r5_c8.jpg','images/header_r5_c9.jpg','images/header_r6_c9.jpg','images/header_r7_c5.jpg','images/header_r7_c7.jpg','images/header_r1_c9_f4.jpg','images/header_r1_c10_f4.jpg','images/header_r5_c9_f6.jpg','images/header_r5_c10_f6.jpg','images/header_r1_c10.jpg','images/header_r5_c10.jpg','images/header_r5_c8_f4.jpg','images/header_r5_c9_f4.jpg','images/header_r5_c10_f4.jpg','images/header_r6_c9_f4.jpg','images/header_r6_c10_f4.jpg','images/header_r8_c8_f4.jpg','images/header_r6_c10.jpg','images/header_r8_c8.jpg','images/header_r7_c3_f4.jpg','images/header_r7_c5_f6.jpg','images/header_r8_c5_f4.jpg','images/header_r9_c3_f4.jpg','images/header_r8_c5.jpg','images/header_r9_c3.jpg','images/header_r11_c1_f2.jpg','images/header_r11_c2_f2.jpg','images/header_r11_c4_f2.jpg','images/header_r11_c6_f2.jpg','images/header_r11_c8_f2.jpg','images/header_r11_c11_f2.jpg');">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->
<!-- body //-->
<table border="0" width="1001" cellspacing="0" cellpadding="0" align="center">
<tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" style="margin-top: 11px;" width="160" cellspacing="0" cellpadding="0">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
</table></td>
<!-- body_text //-->
<td width="100%" valign="top"><table border="0" width="97%" cellspacing="0" cellpadding="0" align="right">
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td align="center"><?php echo tep_image(DIR_WS_IMAGES . 'bullet1off.gif'); ?></td>
<td align="center"><?php echo tep_image(DIR_WS_IMAGES . 'bullet2off.gif'); ?></td>
<td align="center"><?php echo tep_image(DIR_WS_IMAGES . 'bullet3on.gif'); ?></td>
<td align="center"><?php echo tep_image(DIR_WS_IMAGES . 'bullet4off.gif'); ?></td>
</tr>
<tr>
<td align="center" width="25%" class="checkoutBarTo"><?php echo '<a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING) . '">' . CHECKOUT_BAR_DELIVERY . '</a>'; ?></td>
<td align="center" width="25%" class="checkoutBarTo"><?php echo '<a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT) . '">' . CHECKOUT_BAR_PAYMENT. '</a>'; ?></td>
<td align="center" width="25%" class="checkoutBarCurrent"><?php echo CHECKOUT_BAR_CONFIRMATION; ?></td>
<td align="center" width="25%" class="checkoutBarTo"><?php echo CHECKOUT_BAR_FINISHED; ?></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
<tr class="infoBoxContents">
<?php
if ($sendto != false) {
?>
<td width="30%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td class="main"><?php echo '<b>' . HEADING_DELIVERY_ADDRESS . '</b> <a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING_ADDRESS, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<tr>
<td class="main"><?php echo tep_address_format($order->delivery['format_id'], $order->delivery, 1, ' ', '<br>'); ?></td>
</tr>
<?php
if ($order->info['shipping_method']) {
?>
<tr>
<td class="main"><?php echo '<b>' . HEADING_SHIPPING_METHOD . '</b> <a href="' . tep_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<tr>
<td class="main"><?php echo $order->info['shipping_method']; ?></td>
</tr>
<?php
}
?>
</table></td>
<?php
}
?>
<td width="<?php echo (($sendto != false) ? '70%' : '100%'); ?>" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<?php
if (sizeof($order->info['tax_groups']) > 1) {
?>
<tr>
<td class="main" colspan="2"><?php echo '<b>' . HEADING_PRODUCTS . '</b> <a href="' . tep_href_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
<td class="smallText" align="right"><b><?php echo HEADING_TAX; ?></b></td>
<td class="smallText" align="right"><b><?php echo HEADING_TOTAL; ?></b></td>
</tr>
<?php
} else {
?>
<tr>
<td class="main" colspan="3"><?php echo '<b>' . HEADING_PRODUCTS . '</b> <a href="' . tep_href_link(FILENAME_SHOPPING_CART) . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<?php
}
for ($i=0, $n=sizeof($order->products); $i<$n; $i++) {
echo ' <tr>' . "\n" .
' <td class="main" align="right" valign="top" width="30">' . $order->products[$i]['qty'] . ' x</td>' . "\n" .
' <td class="main" valign="top">' . $order->products[$i]['name'];
if (STOCK_CHECK == 'true') {
echo tep_check_stock($order->products[$i]['id'], $order->products[$i]['qty']);
}
if ( (isset($order->products[$i]['attributes'])) && (sizeof($order->products[$i]['attributes']) > 0) ) {
for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) {
echo '<br><nobr><small> <i> - ' . $order->products[$i]['attributes'][$j]['option'] . ': ' . $order->products[$i]['attributes'][$j]['value'] . '</i></small></nobr>';
}
}
echo '</td>' . "\n";
if (sizeof($order->info['tax_groups']) > 1) echo ' <td class="main" valign="top" align="right">' . tep_display_tax_value($order->products[$i]['tax']) . '%</td>' . "\n";
echo ' <td class="main" align="right" valign="top">' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . '</td>' . "\n" .
' </tr>' . "\n";
}
?>
</table></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td class="main"><b><?php echo HEADING_BILLING_INFORMATION; ?></b></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
<tr class="infoBoxContents">
<td width="30%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td class="main"><?php echo '<b>' . HEADING_PAYMENT_METHOD . '</b> <a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<tr>
<td class="main"><?php echo $order->info['payment_method']; ?></td>
</tr>
</table></td>
<td width="70%" valign="top" align="right"><table border="0" cellspacing="0" cellpadding="2">
<?php
if (MODULE_ORDER_TOTAL_INSTALLED) {
$order_total_modules->process();
echo $order_total_modules->output();
}
?>
</table></td>
</tr>
<tr>
<td colspan="2">
</table></td>
</tr>
<?php
if (is_array($payment_modules->modules)) {
if ($confirmation = $payment_modules->confirmation()) {
?>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td class="main"><b><?php echo HEADING_PAYMENT_INFORMATION; ?></b></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
<tr class="infoBoxContents">
<td><table border="0" cellspacing="0" cellpadding="2">
<tr>
<td class="main" colspan="4"><?php echo $confirmation['title']; ?></td>
</tr>
<?php
for ($i=0, $n=sizeof($confirmation['fields']); $i<$n; $i++) {
?>
<tr>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main"><?php echo $confirmation['fields'][$i]['title']; ?></td>
<td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
<td class="main"><?php echo $confirmation['fields'][$i]['field']; ?></td>
</tr>
<?php
}
?>
</table></td>
</tr>
</table></td>
</tr>
<?php
}
}
?>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<?php
if (tep_not_null($order->info['comments'])) {
?>
<tr>
<td class="main"><?php echo '<b>' . HEADING_ORDER_COMMENTS . '</b> <a href="' . tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL') . '"><span class="orderEdit">(' . TEXT_EDIT . ')</span></a>'; ?></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
<tr class="infoBoxContents">
<td><table border="0" width="100%" cellspacing="0" cellpadding="2">
<tr>
<td class="main"><?php echo nl2br(tep_output_string_protected($order->info['comments'])) . tep_draw_hidden_field('comments', $order->info['comments']); ?></td>
</tr>
</table></td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<?php
}
?>
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td align="right" class="main">
<?php
if (isset($$payment->form_action_url)) {
$form_action_url = $$payment->form_action_url;
} else {
$form_action_url = tep_href_link(FILENAME_CHECKOUT_PROCESS, '', 'SSL');
}
echo tep_draw_form('checkout_confirmation', $form_action_url, 'post');
if (is_array($payment_modules->modules)) {
echo $payment_modules->process_button();
}
echo tep_image_submit('button_confirm_order.gif', IMAGE_BUTTON_CONFIRM_ORDER) . '</form>' . "\n";
?>
</td>
</tr>
</table></td>
</tr>
<tr>
<td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
</tr>
<tr>
<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
<tr>
<td width="25%"><table border="0" width="100%" cellspacing="0" cellpadding="0">
</table></td>
</tr>
</table></td>
</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'); ?>
En fait, le pb vient peut-être de l'odre assigné aux différentes lignes dans admin/modules/total commande, que j'ai modifié pour prendre en compte les coupons de réduction :