frijj2k Posted August 3, 2004 Posted August 3, 2004 Hi I have installed the Orders Downloader module and made a slight alteration to the code so that the orders are placed in one CSV file after each order is made. The headings are inserted correctly if the file does not exist and not if the file does exist. The problem is that the actual order records never appear. I have looked through the code I cannot work out why... I do know that the loop where it gets the orders never gets entered because the code.. while ($row) { ... } always evaluates to false so the problem seems to lie somewhere in the lines... $result = tep_db_query($filelayout_sql); $row = tep_db_fetch_array($result); But this is where my understanding is a bit vague. Could somebody please help me in identifying the problem. I have attached a copy of the checkout_process.php file complete with my mods... thank you in advance. Dave B) =============== CHECKOUT_PROCESS.PHP =============== <?php /* $Id: checkout_process.php,v 1.128 2003/05/28 18:00:29 hpdl Exp $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright © 2003 osCommerce Released under the GNU General Public License */ include('includes/application_top.php'); // 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 (!tep_session_is_registered('sendto')) { tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL')); } if ( (tep_not_null(MODULE_PAYMENT_INSTALLED)) && (!tep_session_is_registered('payment')) ) { tep_redirect(tep_href_link(FILENAME_CHECKOUT_PAYMENT, '', 'SSL')); } // 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')); } } include(DIR_WS_LANGUAGES . $language . '/' . FILENAME_CHECKOUT_PROCESS); // load selected payment module require(DIR_WS_CLASSES . 'payment.php'); $payment_modules = new payment($payment); // load the selected shipping module require(DIR_WS_CLASSES . 'shipping.php'); $shipping_modules = new shipping($shipping); require(DIR_WS_CLASSES . 'order.php'); $order = new order; // load the before_process function from the payment modules $payment_modules->before_process(); require(DIR_WS_CLASSES . 'order_total.php'); $order_total_modules = new order_total; $order_totals = $order_total_modules->process(); $sql_data_array = array('customers_id' => $customer_id, 'customers_name' => $order->customer['firstname'] . ' ' . $order->customer['lastname'], 'customers_company' => $order->customer['company'], 'customers_street_address' => $order->customer['street_address'], 'customers_suburb' => $order->customer['suburb'], 'customers_city' => $order->customer['city'], 'customers_postcode' => $order->customer['postcode'], 'customers_state' => $order->customer['state'], 'customers_country' => $order->customer['country']['title'], 'customers_telephone' => $order->customer['telephone'], 'customers_email_address' => $order->customer['email_address'], 'customers_address_format_id' => $order->customer['format_id'], 'delivery_name' => $order->delivery['firstname'] . ' ' . $order->delivery['lastname'], 'delivery_company' => $order->delivery['company'], 'delivery_street_address' => $order->delivery['street_address'], 'delivery_suburb' => $order->delivery['suburb'], 'delivery_city' => $order->delivery['city'], 'delivery_postcode' => $order->delivery['postcode'], 'delivery_state' => $order->delivery['state'], 'delivery_country' => $order->delivery['country']['title'], 'delivery_address_format_id' => $order->delivery['format_id'], 'billing_name' => $order->billing['firstname'] . ' ' . $order->billing['lastname'], 'billing_company' => $order->billing['company'], 'billing_street_address' => $order->billing['street_address'], 'billing_suburb' => $order->billing['suburb'], 'billing_city' => $order->billing['city'], 'billing_postcode' => $order->billing['postcode'], 'billing_state' => $order->billing['state'], 'billing_country' => $order->billing['country']['title'], 'billing_address_format_id' => $order->billing['format_id'], 'payment_method' => $order->info['payment_method'], 'cc_type' => $order->info['cc_type'], 'cc_owner' => $order->info['cc_owner'], 'cc_number' => $order->info['cc_number'], 'cc_expires' => $order->info['cc_expires'], 'date_purchased' => 'now()', 'orders_status' => $order->info['order_status'], 'currency' => $order->info['currency'], 'currency_value' => $order->info['currency_value']); tep_db_perform(TABLE_ORDERS, $sql_data_array); $insert_id = tep_db_insert_id(); for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) { $sql_data_array = array('orders_id' => $insert_id, 'title' => $order_totals[$i]['title'], 'text' => $order_totals[$i]['text'], 'value' => $order_totals[$i]['value'], 'class' => $order_totals[$i]['code'], 'sort_order' => $order_totals[$i]['sort_order']); tep_db_perform(TABLE_ORDERS_TOTAL, $sql_data_array); } $customer_notification = (SEND_EMAILS == 'true') ? '1' : '0'; $sql_data_array = array('orders_id' => $insert_id, 'orders_status_id' => $order->info['order_status'], 'date_added' => 'now()', 'customer_notified' => $customer_notification, 'comments' => $order->info['comments']); tep_db_perform(TABLE_ORDERS_STATUS_HISTORY, $sql_data_array); // initialized for the email confirmation $products_ordered = ''; $subtotal = 0; $total_tax = 0; for ($i=0, $n=sizeof($order->products); $i<$n; $i++) { // Stock Update - Joao Correia if (STOCK_LIMITED == 'true') { if (DOWNLOAD_ENABLED == 'true') { $stock_query_raw = "SELECT products_quantity, pad.products_attributes_filename FROM " . TABLE_PRODUCTS . " p LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES . " pa ON p.products_id=pa.products_id LEFT JOIN " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad ON pa.products_attributes_id=pad.products_attributes_id WHERE p.products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"; // Will work with only one option for downloadable products // otherwise, we have to build the query dynamically with a loop $products_attributes = $order->products[$i]['attributes']; if (is_array($products_attributes)) { $stock_query_raw .= " AND pa.options_id = '" . $products_attributes[0]['option_id'] . "' AND pa.options_values_id = '" . $products_attributes[0]['value_id'] . "'"; } $stock_query = tep_db_query($stock_query_raw); } else { $stock_query = tep_db_query("select products_quantity from " . TABLE_PRODUCTS . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); } if (tep_db_num_rows($stock_query) > 0) { $stock_values = tep_db_fetch_array($stock_query); // do not decrement quantities if products_attributes_filename exists if ((DOWNLOAD_ENABLED != 'true') || (!$stock_values['products_attributes_filename'])) { $stock_left = $stock_values['products_quantity'] - $order->products[$i]['qty']; } else { $stock_left = $stock_values['products_quantity']; } tep_db_query("update " . TABLE_PRODUCTS . " set products_quantity = '" . $stock_left . "' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); if ( ($stock_left < 1) && (STOCK_ALLOW_CHECKOUT == 'false') ) { tep_db_query("update " . TABLE_PRODUCTS . " set products_status = '0' where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); } } } // Update products_ordered (for bestsellers list) tep_db_query("update " . TABLE_PRODUCTS . " set products_ordered = products_ordered + " . sprintf('%d', $order->products[$i]['qty']) . " where products_id = '" . tep_get_prid($order->products[$i]['id']) . "'"); $sql_data_array = array('orders_id' => $insert_id, 'products_id' => tep_get_prid($order->products[$i]['id']), 'products_model' => $order->products[$i]['model'], 'products_name' => $order->products[$i]['name'], 'products_price' => $order->products[$i]['price'], 'final_price' => $order->products[$i]['final_price'], 'products_tax' => $order->products[$i]['tax'], 'products_quantity' => $order->products[$i]['qty']); tep_db_perform(TABLE_ORDERS_PRODUCTS, $sql_data_array); $order_products_id = tep_db_insert_id(); //------insert customer choosen option to order-------- $attributes_exist = '0'; $products_ordered_attributes = ''; if (isset($order->products[$i]['attributes'])) { $attributes_exist = '1'; for ($j=0, $n2=sizeof($order->products[$i]['attributes']); $j<$n2; $j++) { if (DOWNLOAD_ENABLED == 'true') { $attributes_query = "select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix, pad.products_attributes_maxdays, pad.products_attributes_maxcount , pad.products_attributes_filename from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa left join " . TABLE_PRODUCTS_ATTRIBUTES_DOWNLOAD . " pad on pa.products_attributes_id=pad.products_attributes_id where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"; $attributes = tep_db_query($attributes_query); } else { $attributes = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . $order->products[$i]['id'] . "' and pa.options_id = '" . $order->products[$i]['attributes'][$j]['option_id'] . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . $order->products[$i]['attributes'][$j]['value_id'] . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . $languages_id . "' and poval.language_id = '" . $languages_id . "'"); } $attributes_values = tep_db_fetch_array($attributes); $sql_data_array = array('orders_id' => $insert_id, 'orders_products_id' => $order_products_id, 'products_options' => $attributes_values['products_options_name'], 'products_options_values' => $attributes_values['products_options_values_name'], 'options_values_price' => $attributes_values['options_values_price'], 'price_prefix' => $attributes_values['price_prefix']); tep_db_perform(TABLE_ORDERS_PRODUCTS_ATTRIBUTES, $sql_data_array); if ((DOWNLOAD_ENABLED == 'true') && isset($attributes_values['products_attributes_filename']) && tep_not_null($attributes_values['products_attributes_filename'])) { $sql_data_array = array('orders_id' => $insert_id, 'orders_products_id' => $order_products_id, 'orders_products_filename' => $attributes_values['products_attributes_filename'], 'download_maxdays' => $attributes_values['products_attributes_maxdays'], 'download_count' => $attributes_values['products_attributes_maxcount']); tep_db_perform(TABLE_ORDERS_PRODUCTS_DOWNLOAD, $sql_data_array); } $products_ordered_attributes .= "\n\t" . $attributes_values['products_options_name'] . ' ' . $attributes_values['products_options_values_name']; } } //------insert customer choosen option eof ---- $total_weight += ($order->products[$i]['qty'] * $order->products[$i]['weight']); $total_tax += tep_calculate_tax($total_products_price, $products_tax) * $order->products[$i]['qty']; $total_cost += $total_products_price; $products_ordered .= $order->products[$i]['qty'] . ' x ' . $order->products[$i]['name'] . ' (' . $order->products[$i]['model'] . ') = ' . $currencies->display_price($order->products[$i]['final_price'], $order->products[$i]['tax'], $order->products[$i]['qty']) . $products_ordered_attributes . "\n"; } // lets start with the email confirmation $email_order = STORE_NAME . "\n" . EMAIL_SEPARATOR . "\n" . EMAIL_TEXT_ORDER_NUMBER . ' ' . $insert_id . "\n" . EMAIL_TEXT_INVOICE_URL . ' ' . tep_href_link(FILENAME_ACCOUNT_HISTORY_INFO, 'order_id=' . $insert_id, 'SSL', false) . "\n" . EMAIL_TEXT_DATE_ORDERED . ' ' . strftime(DATE_FORMAT_LONG) . "\n\n"; if ($order->info['comments']) { $email_order .= tep_db_output($order->info['comments']) . "\n\n"; } $email_order .= EMAIL_TEXT_PRODUCTS . "\n" . EMAIL_SEPARATOR . "\n" . $products_ordered . EMAIL_SEPARATOR . "\n"; for ($i=0, $n=sizeof($order_totals); $i<$n; $i++) { $email_order .= strip_tags($order_totals[$i]['title']) . ' ' . strip_tags($order_totals[$i]['text']) . "\n"; } if ($order->content_type != 'virtual') { $email_order .= "\n" . EMAIL_TEXT_DELIVERY_ADDRESS . "\n" . EMAIL_SEPARATOR . "\n" . tep_address_label($customer_id, $sendto, 0, '', "\n") . "\n"; } $email_order .= "\n" . EMAIL_TEXT_BILLING_ADDRESS . "\n" . EMAIL_SEPARATOR . "\n" . tep_address_label($customer_id, $billto, 0, '', "\n") . "\n\n"; if (is_object($$payment)) { $email_order .= EMAIL_TEXT_PAYMENT_METHOD . "\n" . EMAIL_SEPARATOR . "\n"; $payment_class = $$payment; $email_order .= $payment_class->title . "\n\n"; if ($payment_class->email_footer) { $email_order .= $payment_class->email_footer . "\n\n"; } } tep_mail($order->customer['firstname'] . ' ' . $order->customer['lastname'], $order->customer['email_address'], EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS); /* Inserted for Order CSV Creation */ // C O N F I G U R A T I O N // V A R I A B L E S // **** Order directory - you need to create this in your Catalog/ directory **** $orderdir = "orders/"; // **** Field Separator **** // change this if you can't use the default of tabs // Tab is the default, comma and semicolon are commonly supported by various progs // Remember, if your descriptions contain this character, you will confuse EP! global $separator; //$separator = "\t"; // tab is default //$separator = ";"; // semi-colon //$separator = "~"; // tilde //$separator = "-"; // dash //$separator = "*"; // splat $separator = ","; // comma for CSV file //require('includes/application_top.php'); require('includes/database_tables.php'); // global $filelayout, $filelayout_count, $filelayout_sql, $fileheaders, $max_categories; //elari check default language_id from configuration table DEFAULT_LANGUAGE // get the right filelayout for this download ep_create_filelayout($dltype, $orders_status, $cust_id); $download='tempfile'; $cust_id=$insert_id; $orders_status = 'full'; //******************************* //******************************* // E N D // INITIALIZATION //******************************* //******************************* if ( $download == 'stream' or $download == 'tempfile' ){ //******************************* //******************************* // DOWNLOAD FILE //******************************* //******************************* $filestring = ""; // this holds the csv file we want to download $result = tep_db_query($filelayout_sql); $row = tep_db_fetch_array($result); // Here we need to allow for the mapping of internal field names to external field names // default to all headers named like the internal ones // the field mapping array only needs to cover those fields that need to have their name changed if ( count($fileheaders) != 0 ){ $filelayout_header = $fileheaders; // if they gave us fileheaders for the dl, then use them } else { $filelayout_header = $filelayout; // if no mapping was spec'd use the internal field names for header names } //We prepare the table heading with layout values foreach( $filelayout_header as $key => $value ){ $fileheaderstring .= $key . $separator; } // now lop off the trailing tab $fileheaderstring = substr($fileheaderstring, 0, strlen($fileheaderstring)-1); // set the type $endofrow = $separator . 'EOREOR' . "\n"; $fileheaderstring .= $endofrow; $num_of_langs = count($langcode); while ($row){ // If you have other modules that need to be available, put them here // remove any bad things in the texts that could confuse EasyCustomer $therow = ''; foreach( $filelayout as $key => $value ){ //echo "The field was $key<br>"; $thetext = $row[$key]; // kill the carriage returns and tabs in the descriptions, they're killing me! $thetext = str_replace("\r",' ',$thetext); $thetext = str_replace("\n",' ',$thetext); $thetext = str_replace("\t",' ',$thetext); // and put the text into the output separated by tabs $therow .= $thetext . $separator; } // lop off the trailing tab, then append the end of row indicator $therow = substr($therow,0,strlen($therow)-1) . $endofrow; $filestring .= $therow; // grab the next row from the db $row = tep_db_fetch_array($result); } //////////////////////////////////////////////////////// $EXPORT_NAME = "ORDER" . $insert_id; $EXPORT_NAME = "ORDERS"; // now either stream it to them or put it in the temp directory $tmpfname = $orderdir . "$EXPORT_NAME.csv"; //unlink($tmpfname); if (!file_exists($tmpfname)){ // File not exist so insert header values $filestring = $fileheaderstring . $filestring; } else { // File exist so no need to add headers } $fp = fopen( $tmpfname, "a+"); fwrite($fp, $filestring); fclose($fp); //echo $insert_id . $orderdir . $EXPORT_NAME . ".csv"; // send emails to other people if (SEND_EXTRA_ORDER_EMAILS_TO != '') { tep_mail('', SEND_EXTRA_ORDER_EMAILS_TO, EMAIL_TEXT_SUBJECT, $email_order, STORE_OWNER, STORE_OWNER_EMAIL_ADDRESS); } // load the after_process function from the payment modules $payment_modules->after_process(); $cart->reset(true); // unregister session variables used during checkout tep_session_unregister('sendto'); tep_session_unregister('billto'); tep_session_unregister('shipping'); tep_session_unregister('payment'); tep_session_unregister('comments'); tep_redirect(tep_href_link(FILENAME_CHECKOUT_SUCCESS, '', 'SSL'));} // *** END *** download section // Everything under here is needed. // ?> <?php function ep_create_filelayout($dltype, $orders_status, $cust_id){ # echo $dltype; # echo $orders_status; global $insert_id, $filelayout, $filelayout_count, $filelayout_sql, $fileheaders, $max_categories; // depending on the type of the download the user wanted, create a file layout for it. $fieldmap = array(); // default to no mapping to change internal field names to external. // The file layout is dynamically made depending on the number of languages $iii = 0; $filelayout = array( 'orders_id' => $iii++, 'date_purchased' => $iii++, 'customers_name' => $iii++, 'customers_telephone' => $iii++, 'customers_email_address' => $iii++, 'billing_name' => $iii++, 'billing_street_address' => $iii++, 'billing_city' => $iii++, 'billing_postcode' => $iii++, 'billing_state' => $iii++, 'billing_country' => $iii++, 'delivery_name' => $iii++, 'delivery_street_address' => $iii++, 'delivery_city' => $iii++, 'delivery_postcode' => $iii++, 'delivery_state' => $iii++, 'delivery_country' => $iii++, 'items_ordered' => $iii++, 'products_options_values' => $iii++, 'quantity_ordered' => $iii++, 'shipping_method' => $iii++, 'order_total' => $iii++, 'cc_type' => $iii++, 'cc_owner' => $iii++, 'cc_number' => $iii++, 'cc_expires' => $iii++ ); $filelayout_sql = "SELECT o.orders_id as orders_id, o.date_purchased as date_purchased, o.customers_name as customers_name, o.customers_telephone as customers_telephone, o.customers_email_address as customers_email_address, o.billing_name as billing_name, o.billing_street_address as billing_street_address, o.billing_city as billing_city, o.billing_postcode as billing_postcode, o.billing_state as billing_state, o.billing_country as billing_country, o.delivery_name as delivery_name, o.delivery_street_address as delivery_street_address, o.delivery_city as delivery_city, o.delivery_postcode as delivery_postcode, o.delivery_state as delivery_state, o.delivery_country as delivery_country, op.products_model as items_ordered, opa.products_options_values as products_options_values, op.products_quantity as quantity_ordered, ot.title as shipping_method, ott.value as order_total, o.cc_type as cc_type, o.cc_owner as cc_owner, o.cc_number as cc_number, o.cc_expires as cc_expires FROM ".TABLE_ORDERS." as o, ".TABLE_ORDERS_PRODUCTS." as op, ".TABLE_ORDERS_PRODUCTS_ATTRIBUTES." as opa, ".TABLE_ORDERS_TOTAL." as ot, ".TABLE_ORDERS_TOTAL." as ott WHERE o.orders_id=op.orders_id AND opa.orders_products_id=op.orders_products_id AND o.orders_id=ot.orders_id AND ott.orders_id = ot.orders_id AND ot.class = 'ot_shipping' AND ott.class = 'ot_total' AND o.orders_id = $insert_id"; $filelayout_count = count($filelayout); } /* End of Order CSV Creation */ require(DIR_WS_INCLUDES . 'application_bottom.php'); ?> Quote
Jan Zonjee Posted August 11, 2004 Posted August 11, 2004 while ($row){ code... // grab the next row from the db $row = tep_db_fetch_array($result); } I don't know, but I don't recall having seen such a construction before. The 'usual' construction I always see is: while ($row = tep_db_fetch_array($result)) { code...... } Perhaps you can give it a try or maybe a more knowledgeable person can comment on this? Quote
frijj2k Posted August 12, 2004 Author Posted August 12, 2004 Thanks for the response... The code structure you mentioned has not been changed by myself... maybe I have a different version of the module. I will try you method and let you know what happens... Fingers crossed! ;-) Cheers Dave Quote
frijj2k Posted August 12, 2004 Author Posted August 12, 2004 hmmm... no luck... Its the same... I get the headers written to the CSV but no records. :( Will keep trying... Dave Quote
frijj2k Posted August 12, 2004 Author Posted August 12, 2004 I dont think the problem lies in the block of code... while ($row) { code... // grab the next row from the db $row = tep_db_fetch_array($result); } because the loop never gets entered so $row must be empty... $row gets its first value on the lines.. $result = tep_db_query($filelayout_sql); $row = tep_db_fetch_array($result); but I am unsure how to debug this and find out which part is failing (and why?) Any ideas? :| Dave Dave Quote
Jan Zonjee Posted August 12, 2004 Posted August 12, 2004 because the loop never gets entered so $row must be empty... $row gets its first value on the lines.. $result = tep_db_query($filelayout_sql); $row = tep_db_fetch_array($result); but I am unsure how to debug this Let's try to see what is actually in $result and in $row. Both are probably arrays, which would call for (from the top of my head) a print_r($result) and print_r($row) just after the lines where they get the values. This I what should give you an idea what is in there. You could stop the whole script after that with exit(); on a line after that, if that is convenient. Quote
philippemarechal Posted October 1, 2004 Posted October 1, 2004 I dont think the problem lies in the block of code... while ($row) { code... // grab the next row from the db $row = tep_db_fetch_array($result); } because the loop never gets entered so $row must be empty... $row gets its first value on the lines.. $result = tep_db_query($filelayout_sql); $row = tep_db_fetch_array($result); but I am unsure how to debug this and find out which part is failing (and why?) Any ideas? :| Dave Dave <{POST_SNAPBACK}> Quote
philippemarechal Posted October 1, 2004 Posted October 1, 2004 <{POST_SNAPBACK}> i have de same problem how cant i fix this urgent urgent urgent Quote
winmill Posted October 11, 2004 Posted October 11, 2004 > i have de same problem how cant i fix this in the WHERE clauses (there are two of them), try changing ot.class = 'ot_shipping' to ot.title = 'Total:' This now brings down each order line item. Quote
frijj2k Posted October 18, 2004 Author Posted October 18, 2004 > i have de same problem how cant i fix this in the WHERE clauses (there are two of them), try changing ot.class = 'ot_shipping' to ot.title = 'Total:' This now brings down each order line item. <{POST_SNAPBACK}> You say there are 2 clauses to change yet in my file (fresh extract from contrib) there is only 1. I tried changing it anyways but it doesnt work. I get the csv file with headings but no data. :-( Any ideas? :-D Cheers Quote
frijj2k Posted October 18, 2004 Author Posted October 18, 2004 I tried printing the contents of $result and $row with the foloing result... $result = Resource ID #75 $row = $row is empty so the problem does seem to lie in the function call $row = tep_db_fetch_array($result); Gonna keep trying things but dont know my way around osCommerce too well yet. Any help is welcome. :) Cheers Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.