chrometweaks.org

Website iPage hosting service in sydney:which company offers best deal for website hosting in sydney

Click Here To View All Answers...


Got a question, hope someone can answer... Website iPage hosting service in sydney:which company offers best deal for website hosting in sydney Looking forward for any answer. Another question on my mind: Hi,.

When I try to log in to my iPage site as a customer I keep getting this warning:.

Warning: Cannot add header information - headers already sent by (output started at ........../catalog/includes/languages/english.php:668) in ........../catalog/includes/functions/general.php on line 29.

And in general.php line 29 is:.

Header('Location: '$url);.

So I am thinking that the permissions are not set correctly, but their is not a 668 permission (is there?)..

So it must be the line 29, but it looks ok to me..

Can someone please give us a little help.............tip.........nod.........ANYTHING!!!!!.

Thanks,.

Pompeylad..

P.S. A friend has also came across the same problem.[COLOR=red].

This post has been edited by.

Pompeylad.

: 29 June 2004, 21:53..

Comments (118)

I'm stumped. I'm not so sure what is the right answer to your question. I'll do some poking around and get back to you if I bump into an anything. You should email the people at iPage as they probably could answer your iPage question..

Comment #1

Warning: Cannot add header information - headers already sent by (output started at ........../catalog/includes/languages/english.php:668) in ........../catalog/includes/functions/general.php on line 29.

Open english. php in a php readable browser(not in notepad).

Then make sure you dont have a line space or a space in the beginning of the page. I mean..

<?php.....

Is incorrect..

<?php....

Is correct..

First word should be that. same at last line. thats hsould be ?>. right after ?>, click delete and delete extra white spaces. do dame with general.php..

Cant do it, post your files. exactly. I am sure this will fix it...

Comment #2

Ahhhh,.

I see what you mean now. I am using Crimson Editor as I have got myself a new PC. I will have to load up Dreamweaver again..

I hope that will sort the problem out..

Thanks,.

Pompeylad...

Comment #3

Hi,.

Well, I tryed that but still no luck, so here is my english.php..

<?php.

/*.

 $Id: english.php,v 1.114 2003/07/09 18:13:39 dgw_ Exp $.

 osCommerce, Open Source E-Commerce Solutions.

 http://www.oscommerce.com.

 Copyright (c) 2003 osCommerce.

 Released under the GNU General Public License.

*/.

// look in your $PATH_LOCALE/locale directory for available locales.

// or type locale -a on the server..

// Examples:.

// on RedHat try 'en_US'.

// on FreeBSD try 'en_US.ISO_8859-1'.

// on Windows try 'en', or 'English'.

@setlocale(LC_TIME, 'en_US.ISO_8859-1');.

Define('DATE_FORMAT_SHORT', '%d/%m/%Y');  // this is used for strftime().

Define('DATE_FORMAT_LONG', '%A %d %B, %Y'); // this is used for strftime().

Define('DATE_FORMAT', 'd/m/Y'); // this is used for date().

Define('DATE_TIME_FORMAT', DATE_FORMAT_SHORT' %H:%M:%S');.

////.

// Return date in raw format.

// $date should be in format dd/mm/yyyy.

// raw date is in format YYYYMMDD, or DDMMYYYY.

Function tep_date_raw($date, $reverse = false) {.

If ($reverse) {.

    return substr($date, 0, 2)substr($date, 3, 2)substr($date, 6, 4);.

} else {.

    return substr($date, 6, 4)substr($date, 3, 2)substr($date, 0, 2);.

}.

}.

// if USE_DEFAULT_LANGUAGE_CURRENCY is true, use the following currency, instead of the applications default currency (used when changing language).

Define('LANGUAGE_CURRENCY', 'GBP');.

// Global entries for the <html> tag.

Define('HTML_PARAMS','dir="LTR" lang="en"');.

// charset for web pages and emails.

Define('CHARSET', 'iso-8859-1');.

// page title.

Define('TITLE', 'OS Commerce');.

// header text in includes/header.php.

Define('HEADER_TITLE_CREATE_ACCOUNT', 'Create an Account');.

Define('HEADER_TITLE_MY_ACCOUNT', 'My Account');.

Define('HEADER_TITLE_CART_CONTENTS', 'Cart Contents');.

Define('HEADER_TITLE_CHECKOUT', 'Checkout');.

Define('HEADER_TITLE_TOP', 'Top');.

Define('HEADER_TITLE_CATALOG', 'Catalogue');.

Define('HEADER_TITLE_LOGOFF', 'Log Off');.

Define('HEADER_TITLE_LOGIN', 'Log In');.

// footer text in includes/footer.php.

Define('FOOTER_TEXT_REQUESTS_SINCE', 'requests since');.

// text for gender.

Define('MALE', 'Male');.

Define('FEMALE', 'Female');.

Define('MALE_ADDRESS', 'Mr.');.

Define('FEMALE_ADDRESS', 'Ms.');.

// text for date of birth example.

Define('DOB_FORMAT_STRING', 'dd/mm/yyyy');.

// categories box text in includes/boxes/categories.php.

Define('BOX_HEADING_CATEGORIES', 'Categories');.

// manufacturers box text in includes/boxes/manufacturers.php.

Define('BOX_HEADING_MANUFACTURERS', 'Manufacturers');.

// whats_new box text in includes/boxes/whats_new.php.

Define('BOX_HEADING_WHATS_NEW', 'What\'s New?');.

// quick_find box text in includes/boxes/quick_find.php.

Define('BOX_HEADING_SEARCH', 'Quick Find');.

Define('BOX_SEARCH_TEXT', 'Use keywords to find the product you are looking for.');.

Define('BOX_SEARCH_ADVANCED_SEARCH', 'Advanced Search');.

// specials box text in includes/boxes/specials.php.

Define('BOX_HEADING_SPECIALS', 'Specials');.

// reviews box text in includes/boxes/reviews.php.

Define('BOX_HEADING_REVIEWS', 'Reviews');.

Define('BOX_REVIEWS_WRITE_REVIEW', 'Write a review on this product!');.

Define('BOX_REVIEWS_NO_REVIEWS', 'There are currently no product reviews');.

Define('BOX_REVIEWS_TEXT_OF_5_STARS', '%s of 5 Stars!');.

// shopping_cart box text in includes/boxes/shopping_cart.php.

Define('BOX_HEADING_SHOPPING_CART', 'Shopping Cart');.

Define('BOX_SHOPPING_CART_EMPTY', '0 items');.

// order_history box text in includes/boxes/order_history.php.

Define('BOX_HEADING_CUSTOMER_ORDERS', 'Order History');.

// best_sellers box text in includes/boxes/best_sellers.php.

Define('BOX_HEADING_BESTSELLERS', 'Bestsellers');.

Define('BOX_HEADING_BESTSELLERS_IN', 'Bestsellers in<br>&nbsp;&nbsp;');.

// notifications box text in includes/boxes/products_notifications.php.

Define('BOX_HEADING_NOTIFICATIONS', 'Notifications');.

Define('BOX_NOTIFICATIONS_NOTIFY', 'Notify me of updates to <b>%s</b>');.

Define('BOX_NOTIFICATIONS_NOTIFY_REMOVE', 'Do not notify me of updates to <b>%s</b>');.

// manufacturer box text.

Define('BOX_HEADING_MANUFACTURER_INFO', 'Manufacturer Info');.

Define('BOX_MANUFACTURER_INFO_HOMEPAGE', '%s Homepage');.

Define('BOX_MANUFACTURER_INFO_OTHER_PRODUCTS', 'Other products');.

// languages box text in includes/boxes/languages.php.

Define('BOX_HEADING_LANGUAGES', 'Languages');.

// currencies box text in includes/boxes/currencies.php.

Define('BOX_HEADING_CURRENCIES', 'Currencies');.

// information box text in includes/boxes/information.php.

Define('BOX_HEADING_INFORMATION', 'Information');.

Define('BOX_INFORMATION_PRIVACY', 'Privacy Notice');.

Define('BOX_INFORMATION_CONDITIONS', 'Conditions of Use');.

Define('BOX_INFORMATION_SHIPPING', 'Shipping & Returns');.

Define('BOX_INFORMATION_CONTACT', 'Contact Us');.

// tell a friend box text in includes/boxes/tell_a_friend.php.

Define('BOX_HEADING_TELL_A_FRIEND', 'Tell A Friend');.

Define('BOX_TELL_A_FRIEND_TEXT', 'Tell someone you know about this product.');.

// checkout procedure text.

Define('CHECKOUT_BAR_DELIVERY', 'Delivery Information');.

Define('CHECKOUT_BAR_PAYMENT', 'Payment Information');.

Define('CHECKOUT_BAR_CONFIRMATION', 'Confirmation');.

Define('CHECKOUT_BAR_FINISHED', 'Finished!');.

// pull down default text.

Define('PULL_DOWN_DEFAULT', 'Please Select');.

Define('TYPE_BELOW', 'Type Below');.

// javascript messages.

Define('JS_ERROR', 'Errors have occured during the process of your form.\n\nPlease make the following corrections:\n\n');.

Define('JS_REVIEW_TEXT', '* The \'Review Text\' must have at least 'REVIEW_TEXT_MIN_LENGTH' characters.\n');.

Define('JS_REVIEW_RATING', '* You must rate the product for your review.\n');.

Define('JS_ERROR_NO_PAYMENT_MODULE_SELECTED', '* Please select a payment method for your order.\n');.

Define('JS_ERROR_SUBMITTED', 'This form has already been submitted. Please press Ok and wait for this process to be completed.');.

Define('ERROR_NO_PAYMENT_MODULE_SELECTED', 'Please select a payment method for your order.');.

Define('CATEGORY_COMPANY', 'Company Details');.

Define('CATEGORY_PERSONAL', 'Your Personal Details');.

Define('CATEGORY_ADDRESS', 'Your Address');.

Define('CATEGORY_CONTACT', 'Your Contact Information');.

Define('CATEGORY_OPTIONS', 'Options');.

Define('CATEGORY_PASSWORD', 'Your Password');.

Define('ENTRY_COMPANY', 'Company Name:');.

Define('ENTRY_COMPANY_ERROR', '');.

Define('ENTRY_COMPANY_TEXT', '');.

Define('ENTRY_GENDER', 'Gender:');.

Define('ENTRY_GENDER_ERROR', 'Please select your Gender.');.

Define('ENTRY_GENDER_TEXT', '*');.

Define('ENTRY_FIRST_NAME', 'First Name:');.

Define('ENTRY_FIRST_NAME_ERROR', 'Your First Name must contain a minimum of 'ENTRY_FIRST_NAME_MIN_LENGTH' characters.');.

Define('ENTRY_FIRST_NAME_TEXT', '*');.

Define('ENTRY_LAST_NAME', 'Last Name:');.

Define('ENTRY_LAST_NAME_ERROR', 'Your Last Name must contain a minimum of 'ENTRY_LAST_NAME_MIN_LENGTH' characters.');.

Define('ENTRY_LAST_NAME_TEXT', '*');.

Define('ENTRY_DATE_OF_BIRTH', 'Date of Birth:');.

Define('ENTRY_DATE_OF_BIRTH_ERROR', 'Your Date of Birth must be in this format: DD/MM/YYYY (eg 24/09/1979)');.

Define('ENTRY_DATE_OF_BIRTH_TEXT', '* (eg. 24/09/1979)');.

Define('ENTRY_EMAIL_ADDRESS', 'E-Mail Address:');.

Define('ENTRY_EMAIL_ADDRESS_ERROR', 'Your E-Mail Address must contain a minimum of 'ENTRY_EMAIL_ADDRESS_MIN_LENGTH' characters.');.

Define('ENTRY_EMAIL_ADDRESS_CHECK_ERROR', 'Your E-Mail Address does not appear to be valid - please make any necessary corrections.');.

Define('ENTRY_EMAIL_ADDRESS_ERROR_EXISTS', 'Your E-Mail Address already exists in our records - please log in with the e-mail address or create an account with a different address.');.

Define('ENTRY_EMAIL_ADDRESS_TEXT', '*');.

Define('ENTRY_STREET_ADDRESS', 'Street Address:');.

Define('ENTRY_STREET_ADDRESS_ERROR', 'Your Street Address must contain a minimum of 'ENTRY_STREET_ADDRESS_MIN_LENGTH' characters.');.

Define('ENTRY_STREET_ADDRESS_TEXT', '*');.

Define('ENTRY_SUBURB', '');.

Define('ENTRY_SUBURB_ERROR', '');.

Define('ENTRY_SUBURB_TEXT', '');.

Define('ENTRY_POST_CODE', 'Post Code:');.

Define('ENTRY_POST_CODE_ERROR', 'Your Post Code must contain a minimum of 'ENTRY_POSTCODE_MIN_LENGTH' characters.');.

Define('ENTRY_POST_CODE_TEXT', '*');.

Define('ENTRY_CITY', 'City:');.

Define('ENTRY_CITY_ERROR', 'Your City must contain a minimum of 'ENTRY_CITY_MIN_LENGTH' characters.');.

Define('ENTRY_CITY_TEXT', '*');.

Define('ENTRY_STATE', 'County:');.

Define('ENTRY_STATE_ERROR', 'Your County must contain a minimum of 'ENTRY_STATE_MIN_LENGTH' characters.');.

Define('ENTRY_STATE_ERROR_SELECT', 'Please select a county from the County pull down menu.');.

Define('ENTRY_STATE_TEXT', '*');.

Define('ENTRY_COUNTRY', 'Country:');.

Define('ENTRY_COUNTRY_ERROR', 'You must select a country from the Countries pull down menu.');.

Define('ENTRY_COUNTRY_TEXT', '*');.

Define('ENTRY_TELEPHONE_NUMBER', 'Telephone Number:');.

Define('ENTRY_TELEPHONE_NUMBER_ERROR', 'Your Telephone Number must contain a minimum of 'ENTRY_TELEPHONE_MIN_LENGTH' characters.');.

Define('ENTRY_TELEPHONE_NUMBER_TEXT', '*');.

Define('ENTRY_FAX_NUMBER', 'Fax Number:');.

Define('ENTRY_FAX_NUMBER_ERROR', '');.

Define('ENTRY_FAX_NUMBER_TEXT', '');.

Define('ENTRY_NEWSLETTER', 'Newsletter:');.

Define('ENTRY_NEWSLETTER_TEXT', '');.

Define('ENTRY_NEWSLETTER_YES', 'Subscribed');.

Define('ENTRY_NEWSLETTER_NO', 'Unsubscribed');.

Define('ENTRY_NEWSLETTER_ERROR', '');.

Define('ENTRY_PASSWORD', 'Password:');.

Define('ENTRY_PASSWORD_ERROR', 'Your Password must contain a minimum of 'ENTRY_PASSWORD_MIN_LENGTH' characters.');.

Define('ENTRY_PASSWORD_ERROR_NOT_MATCHING', 'The Password Confirmation must match your Password.');.

Define('ENTRY_PASSWORD_TEXT', '*');.

Define('ENTRY_PASSWORD_CONFIRMATION', 'Password Confirmation:');.

Define('ENTRY_PASSWORD_CONFIRMATION_TEXT', '*');.

Define('ENTRY_PASSWORD_CURRENT', 'Current Password:');.

Define('ENTRY_PASSWORD_CURRENT_TEXT', '*');.

Define('ENTRY_PASSWORD_CURRENT_ERROR', 'Your Password must contain a minimum of 'ENTRY_PASSWORD_MIN_LENGTH' characters.');.

Define('ENTRY_PASSWORD_NEW', 'New Password:');.

Define('ENTRY_PASSWORD_NEW_TEXT', '*');.

Define('ENTRY_PASSWORD_NEW_ERROR', 'Your new Password must contain a minimum of 'ENTRY_PASSWORD_MIN_LENGTH' characters.');.

Define('ENTRY_PASSWORD_NEW_ERROR_NOT_MATCHING', 'The Password Confirmation must match your new Password.');.

Define('PASSWORD_HIDDEN', 'HIDDEN');.

Define('FORM_REQUIRED_INFORMATION', '* Required information');.

// constants for use in tep_prev_next_display function.

Define('TEXT_RESULT_PAGE', 'Result Pages:');.

Define('TEXT_DISPLAY_NUMBER_OF_PRODUCTS', 'Displaying <b>%d</b> to <b>%d</b> (of <b>%d</b> products)');.

Define('TEXT_DISPLAY_NUMBER_OF_ORDERS', 'Displaying <b>%d</b> to <b>%d</b> (of <b>%d</b> orders)');.

Define('TEXT_DISPLAY_NUMBER_OF_REVIEWS', 'Displaying <b>%d</b> to <b>%d</b> (of <b>%d</b> reviews)');.

Define('TEXT_DISPLAY_NUMBER_OF_PRODUCTS_NEW', 'Displaying <b>%d</b> to <b>%d</b> (of <b>%d</b> new products)');.

Define('TEXT_DISPLAY_NUMBER_OF_SPECIALS', 'Displaying <b>%d</b> to <b>%d</b> (of <b>%d</b> specials)');.

Define('PREVNEXT_TITLE_FIRST_PAGE', 'First Page');.

Define('PREVNEXT_TITLE_PREVIOUS_PAGE', 'Previous Page');.

Define('PREVNEXT_TITLE_NEXT_PAGE', 'Next Page');.

Define('PREVNEXT_TITLE_LAST_PAGE', 'Last Page');.

Define('PREVNEXT_TITLE_PAGE_NO', 'Page %d');.

Define('PREVNEXT_TITLE_PREV_SET_OF_NO_PAGE', 'Previous Set of %d Pages');.

Define('PREVNEXT_TITLE_NEXT_SET_OF_NO_PAGE', 'Next Set of %d Pages');.

Define('PREVNEXT_BUTTON_FIRST', '&lt;&lt;FIRST');.

Define('PREVNEXT_BUTTON_PREV', '[&lt;&lt;&nbsp;Prev]');.

Define('PREVNEXT_BUTTON_NEXT', '[Next&nbsp;&gt;&gt;]');.

Define('PREVNEXT_BUTTON_LAST', 'LAST&gt;&gt;');.

Define('IMAGE_BUTTON_ADD_ADDRESS', 'Add Address');.

Define('IMAGE_BUTTON_ADDRESS_BOOK', 'Address Book');.

Define('IMAGE_BUTTON_BACK', 'Back');.

Define('IMAGE_BUTTON_BUY_NOW', 'Buy Now');.

Define('IMAGE_BUTTON_CHANGE_ADDRESS', 'Change Address');.

Define('IMAGE_BUTTON_CHECKOUT', 'Checkout');.

Define('IMAGE_BUTTON_CONFIRM_ORDER', 'Confirm Order');.

Define('IMAGE_BUTTON_CONTINUE', 'Continue');.

Define('IMAGE_BUTTON_CONTINUE_SHOPPING', 'Continue Shopping');.

Define('IMAGE_BUTTON_DELETE', 'Delete');.

Define('IMAGE_BUTTON_EDIT_ACCOUNT', 'Edit Account');.

Define('IMAGE_BUTTON_HISTORY', 'Order History');.

Define('IMAGE_BUTTON_LOGIN', 'Sign In');.

Define('IMAGE_BUTTON_IN_CART', 'Add to Cart');.

Define('IMAGE_BUTTON_NOTIFICATIONS', 'Notifications');.

Define('IMAGE_BUTTON_QUICK_FIND', 'Quick Find');.

Define('IMAGE_BUTTON_REMOVE_NOTIFICATIONS', 'Remove Notifications');.

Define('IMAGE_BUTTON_REVIEWS', 'Reviews');.

Define('IMAGE_BUTTON_SEARCH', 'Search');.

Define('IMAGE_BUTTON_SHIPPING_OPTIONS', 'Shipping Options');.

Define('IMAGE_BUTTON_TELL_A_FRIEND', 'Tell a Friend');.

Define('IMAGE_BUTTON_UPDATE', 'Update');.

Define('IMAGE_BUTTON_UPDATE_CART', 'Update Cart');.

Define('IMAGE_BUTTON_WRITE_REVIEW', 'Write Review');.

Define('SMALL_IMAGE_BUTTON_DELETE', 'Delete');.

Define('SMALL_IMAGE_BUTTON_EDIT', 'Edit');.

Define('SMALL_IMAGE_BUTTON_VIEW', 'View');.

Define('ICON_ARROW_RIGHT', 'more');.

Define('ICON_CART', 'In Cart');.

Define('ICON_ERROR', 'Error');.

Define('ICON_SUCCESS', 'Success');.

Define('ICON_WARNING', 'Warning');.

Define('TEXT_GREETING_PERSONAL', 'Welcome back <span class="greetUser">%s!</span> Would you like to see which <a href="%s"><u>new products</u></a> are available to purchase?');.

Define('TEXT_GREETING_PERSONAL_RELOGON', '<small>If you are not %s, please <a href="%s"><u>log yourself in</u></a> with your account information.</small>');.

Define('TEXT_GREETING_GUEST', 'Welcome <span class="greetUser">Guest!</span> Would you like to <a href="%s"><u>log yourself in</u></a>? Or would you prefer to <a href="%s"><u>create an account</u></a>?');.

Define('TEXT_SORT_PRODUCTS', 'Sort products ');.

Define('TEXT_DESCENDINGLY', 'descendingly');.

Define('TEXT_ASCENDINGLY', 'ascendingly');.

Define('TEXT_BY', ' by ');.

Define('TEXT_REVIEW_BY', 'by %s');.

Define('TEXT_REVIEW_WORD_COUNT', '%s words');.

Define('TEXT_REVIEW_RATING', 'Rating: %s [%s]');.

Define('TEXT_REVIEW_DATE_ADDED', 'Date Added: %s');.

Define('TEXT_NO_REVIEWS', 'There are currently no product reviews.');.

Define('TEXT_NO_NEW_PRODUCTS', 'There are currently no products.');.

Define('TEXT_UNKNOWN_TAX_RATE', 'Unknown tax rate');.

Define('TEXT_REQUIRED', '<span class="errorText">Required</span>');.

Define('ERROR_TEP_MAIL', '<font face="Verdana, Arial" size="2" color="#ff0000"><b><small>TEP ERROR:</small> Cannot send the email through the specified SMTP server. Please check your php.ini setting and correct the SMTP server if necessary.</b></font>');.

Define('WARNING_INSTALL_DIRECTORY_EXISTS', 'Warning: Installation directory exists at: 'dirname($HTTP_SERVER_VARS['SCRIPT_FILENAME'])'/install. Please remove this directory for security reasons.');.

Define('WARNING_CONFIG_FILE_WRITEABLE', 'Warning: I am able to write to the configuration file: 'dirname($HTTP_SERVER_VARS['SCRIPT_FILENAME'])'/includes/configure.php. This is a potential security risk - please set the right user permissions on this file.');.

Define('WARNING_SESSION_DIRECTORY_NON_EXISTENT', 'Warning: The sessions directory does not exist: 'tep_session_save_path()'. Sessions will not work until this directory is created.');.

Define('WARNING_SESSION_DIRECTORY_NOT_WRITEABLE', 'Warning: I am not able to write to the sessions directory: 'tep_session_save_path()'. Sessions will not work until the right user permissions are set.');.

Define('WARNING_SESSION_AUTO_START', 'Warning: session.auto_start is enabled - please disable this php feature in php.ini and restart the web server.');.

Define('WARNING_DOWNLOAD_DIRECTORY_NON_EXISTENT', 'Warning: The downloadable products directory does not exist: 'DIR_FS_DOWNLOAD'. Downloadable products will not work until this directory is valid.');.

Define('TEXT_CCVAL_ERROR_INVALID_DATE', 'The expiry date entered for the credit card is invalid.<br>Please check the date and try again.');.

Define('TEXT_CCVAL_ERROR_INVALID_NUMBER', 'The credit card number entered is invalid.<br>Please check the number and try again.');.

Define('TEXT_CCVAL_ERROR_UNKNOWN_CARD', 'The first four digits of the number entered are: %s<br>If that number is correct, we do not accept that type of credit card.<br>If it is wrong, please try again.');.

/*.

 The following copyright announcement can only be.

 appropriately modified or removed if the layout of.

 the iPage site theme has been modified to distinguish.

 itself from the default osCommerce-copyrighted.

 theme..

 For more information please read the following.

 Frequently Asked Questions entry on the osCommerce.

 support site:.

 http://www.oscommerce.com/community.php/faq,26/q,50.

 Please leave this comment intact together with the.

 following copyright announcement..

*/.

Define('FOOTER_TEXT_BODY', 'Copyright &copy; 2003 <a href="http://www.oscommerce.com" target="_blank">OS Commerce</a><br>Designed by <a href="http://www.oscommerce.com" target="_blank">OS Commerce</a>);.

?>.

So, can anybody find what's wrong?.

Thanks,.

Pompeylad...

Comment #4

Oh yeah,.

And here is the general.php:.

[code].

<?php.

/*.

 $Id: general.php,v 1.231 2003/07/09 01:15:48 hpdl Exp $.

 osCommerce, Open Source E-Commerce Solutions.

 http://www.oscommerce.com.

 Copyright (c) 2003 osCommerce.

 Released under the GNU General Public License.

*/.

////.

// Stop from parsing any further PHP code.

 function tep_exit() {.

  tep_session_close();.

  exit();.

 }.

////.

// Redirect to another page or site.

 function tep_redirect($url) {.

   if ( (ENABLE_SSL == true) && (getenv('HTTPS') == 'on') ) { // We are loading an SSL page.

     if (substr($url, 0, strlen(HTTP_SERVER)) == HTTP_SERVER) { // NONSSL url.

       $url = HTTPS_SERVERsubstr($url, strlen(HTTP_SERVER)); // Change it to SSL.

     }.

   }.

   header('Location: '$url);.

   tep_exit();.

 }.

////.

// Parse the data used in the html tags to ensure the tags will not break.

 function tep_parse_input_field_data($data, $parse) {.

   return strtr(trim($data), $parse);.

 }.

 function tep_output_string($string, $translate = false, $protected = false) {.

   if ($protected == true) {.

     return htmlspecialchars($string);.

   } else {.

     if ($translate == false) {.

       return tep_parse_input_field_data($string, array('"' => '&quot;'));.

     } else {.

       return tep_parse_input_field_data($string, $translate);.

     }.

   }.

 }.

 function tep_output_string_protected($string) {.

   return tep_output_string($string, false, true);.

 }.

 function tep_sanitize_string($string) {.

   $string = ereg_replace(' +', ' ', trim($string));.

   return preg_replace("/[<>]/", '_', $string);.

 }.

////.

// Return a random row from a database query.

 function tep_random_select($query) {.

   $random_product = '';.

   $random_query = tep_db_query($query);.

   $num_rows = tep_db_num_rows($random_query);.

   if ($num_rows > 0) {.

     $random_row = tep_rand(0, ($num_rows - 1));.

     tep_db_data_seek($random_query, $random_row);.

     $random_product = tep_db_fetch_array($random_query);.

   }.

   return $random_product;.

 }.

////.

// Return a product's name.

// TABLES: products.

 function tep_get_products_name($product_id, $language = '') {.

   global $languages_id;.

   if (empty($language)) $language = $languages_id;.

   $product_query = tep_db_query("select products_name from "TABLE_PRODUCTS_DESCRIPTION" where products_id = '"(int)$product_id"' and language_id = '"(int)$language"'");.

   $product = tep_db_fetch_array($product_query);.

   return $product['products_name'];.

 }.

////.

// Return a product's special price (returns nothing if there is no offer).

// TABLES: products.

 function tep_get_products_special_price($product_id) {.

   $product_query = tep_db_query("select specials_new_products_price from "TABLE_SPECIALS" where products_id = '"(int)$product_id"' and status");.

   $product = tep_db_fetch_array($product_query);.

   return $product['specials_new_products_price'];.

 }.

////.

// Return a product's stock.

// TABLES: products.

 function tep_get_products_stock($products_id) {.

   $products_id = tep_get_prid($products_id);.

   $stock_query = tep_db_query("select products_quantity from "TABLE_PRODUCTS" where products_id = '"(int)$products_id"'");.

   $stock_values = tep_db_fetch_array($stock_query);.

   return $stock_values['products_quantity'];.

 }.

////.

// Check if the required stock is available.

// If insufficent stock is available return an out of stock message.

 function tep_check_stock($products_id, $products_quantity) {.

   $stock_left = tep_get_products_stock($products_id) - $products_quantity;.

   $out_of_stock = '';.

   if ($stock_left < 0) {.

     $out_of_stock = '<span class="markProductOutOfStock">'STOCK_MARK_PRODUCT_OUT_OF_STOCK'</span>';.

   }.

   return $out_of_stock;.

 }.

////.

// Break a word in a string if it is longer than a specified length ($len).

 function tep_break_string($string, $len, $break_char = '-') {.

   $l = 0;.

   $output = '';.

   for ($i=0, $n=strlen($string); $i<$n; $i++) {.

     $char = substr($string, $i, 1);.

     if ($char != ' ') {.

       $l++;.

     } else {.

       $l = 0;.

     }.

     if ($l > $len) {.

       $l = 1;.

       $output .= $break_char;.

     }.

     $output .= $char;.

   }.

   return $output;.

 }.

////.

// Return all HTTP GET variables, except those passed as a parameter.

 function tep_get_all_get_params($exclude_array = '') {.

   global $HTTP_GET_VARS;.

   if (!is_array($exclude_array)) $exclude_array = array();.

   $get_url = '';.

   if (is_array($HTTP_GET_VARS) && (sizeof($HTTP_GET_VARS) > 0)) {.

     reset($HTTP_GET_VARS);.

     while (list($key, $value) = each($HTTP_GET_VARS)) {.

       if ( (strlen($value) > 0) && ($key != tep_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array)) && ($key != 'x') && ($key != 'y') ) {.

         $get_url .= $key'='rawurlencode(stripslashes($value))'&';.

       }.

     }.

   }.

   return $get_url;.

 }.

////.

// Returns an array with countries.

// TABLES: countries.

 function tep_get_countries($countries_id = '', $with_iso_codes = false) {.

   $countries_array = array();.

   if (tep_not_null($countries_id)) {.

     if ($with_iso_codes == true) {.

       $countries = tep_db_query("select countries_name, countries_iso_code_2, countries_iso_code_3 from "TABLE_COUNTRIES" where countries_id = '"(int)$countries_id"' order by countries_name");.

       $countries_values = tep_db_fetch_array($countries);.

       $countries_array = array('countries_name' => $countries_values['countries_name'],.

                                'countries_iso_code_2' => $countries_values['countries_iso_code_2'],.

                                'countries_iso_code_3' => $countries_values['countries_iso_code_3']);.

     } else {.

       $countries = tep_db_query("select countries_name from "TABLE_COUNTRIES" where countries_id = '"(int)$countries_id"'");.

       $countries_values = tep_db_fetch_array($countries);.

       $countries_array = array('countries_name' => $countries_values['countries_name']);.

     }.

   } else {.

     $countries = tep_db_query("select countries_id, countries_name from "TABLE_COUNTRIES" order by countries_name");.

     while ($countries_values = tep_db_fetch_array($countries)) {.

       $countries_array[] = array('countries_id' => $countries_values['countries_id'],.

                                  'countries_name' => $countries_values['countries_name']);.

     }.

   }.

   return $countries_array;.

 }.

////.

// Alias function to tep_get_countries, which also returns the countries iso codes.

 function tep_get_countries_with_iso_codes($countries_id) {.

   return tep_get_countries($countries_id, true);.

 }.

////.

// Generate a path to categories.

 function tep_get_path($current_category_id = '') {.

   global $cPath_array;.

   if (tep_not_null($current_category_id)) {.

     $cp_size = sizeof($cPath_array);.

     if ($cp_size == 0) {.

       $cPath_new = $current_category_id;.

     } else {.

       $cPath_new = '';.

       $last_category_query = tep_db_query("select parent_id from "TABLE_CATEGORIES" where categories_id = '"(int)$cPath_array[($cp_size-1)]"'");.

       $last_category = tep_db_fetch_array($last_category_query);.

       $current_category_query = tep_db_query("select parent_id from "TABLE_CATEGORIES" where categories_id = '"(int)$current_category_id"'");.

       $current_category = tep_db_fetch_array($current_category_query);.

       if ($last_category['parent_id'] == $current_category['parent_id']) {.

         for ($i=0; $i<($cp_size-1); $i++) {.

           $cPath_new .= '_'$cPath_array[$i];.

         }.

       } else {.

         for ($i=0; $i<$cp_size; $i++) {.

           $cPath_new .= '_'$cPath_array[$i];.

         }.

       }.

       $cPath_new .= '_'$current_category_id;.

       if (substr($cPath_new, 0, 1) == '_') {.

         $cPath_new = substr($cPath_new, 1);.

       }.

     }.

   } else {.

     $cPath_new = implode('_', $cPath_array);.

   }.

   return 'cPath='$cPath_new;.

 }.

////.

// Returns the clients browser.

 function tep_browser_detect($component) {.

   global $HTTP_USER_AGENT;.

   return stristr($HTTP_USER_AGENT, $component);.

 }.

////.

// Alias function to tep_get_countries().

 function tep_get_country_name($country_id) {.

   $country_array = tep_get_countries($country_id);.

   return $country_array['countries_name'];.

 }.

////.

// Returns the zone (State/Province) name.

// TABLES: zones.

 function tep_get_zone_name($country_id, $zone_id, $default_zone) {.

   $zone_query = tep_db_query("select zone_name from "TABLE_ZONES" where zone_country_id = '"(int)$country_id"' and zone_id = '"(int)$zone_id"'");.

   if (tep_db_num_rows($zone_query)) {.

     $zone = tep_db_fetch_array($zone_query);.

     return $zone['zone_name'];.

   } else {.

     return $default_zone;.

   }.

 }.

////.

// Returns the zone (State/Province) code.

// TABLES: zones.

 function tep_get_zone_code($country_id, $zone_id, $default_zone) {.

   $zone_query = tep_db_query("select zone_code from "TABLE_ZONES" where zone_country_id = '"(int)$country_id"' and zone_id = '"(int)$zone_id"'");.

   if (tep_db_num_rows($zone_query)) {.

     $zone = tep_db_fetch_array($zone_query);.

     return $zone['zone_code'];.

   } else {.

     return $default_zone;.

   }.

 }.

////.

// Wrapper function for round().

 function tep_round($number, $precision) {.

   if (strpos($number, '.') && (strlen(substr($number, strpos($number, '.')+1)) > $precision)) {.

     $number = substr($number, 0, strpos($number, '.') + 1 + $precision + 1);.

     if (substr($number, -1) >= 5) {.

       if ($precision > 1) {.

         $number = substr($number, 0, -1) + ('0.'str_repeat(0, $precision-1)'1');.

       } elseif ($precision == 1) {.

         $number = substr($number, 0, -1) + 0.1;.

       } else {.

         $number = substr($number, 0, -1) + 1;.

       }.

     } else {.

       $number = substr($number, 0, -1);.

     }.

   }.

   return $number;.

 }.

////.

// Returns the tax rate for a zone / class.

// TABLES: tax_rates, zones_to_geo_zones.

 function tep_get_tax_rate($class_id, $country_id = -1, $zone_id = -1) {.

   global $customer_zone_id, $customer_country_id;.

   if ( ($country_id == -1) && ($zone_id == -1) ) {.

     if (!tep_session_is_registered('customer_id')) {.

       $country_id = STORE_COUNTRY;.

       $zone_id = STORE_ZONE;.

     } else {.

       $country_id = $customer_country_id;.

       $zone_id = $customer_zone_id;.

     }.

   }.

   $tax_query = tep_db_query("select sum(tax_rate) as tax_rate from "TABLE_TAX_RATES" tr left join "TABLE_ZONES_TO_GEO_ZONES" za on (tr.tax_zone_id = za.geo_zone_id) left join "TABLE_GEO_ZONES" tz on (tz.geo_zone_id = tr.tax_zone_id) where (za.zone_country_id is null or za.zone_country_id = '0' or za.zone_country_id = '"(int)$country_id"') and (za.zone_id is null or za.zone_id = '0' or za.zone_id = '"(int)$zone_id"') and tr.tax_class_id = '"(int)$class_id"' group by tr.tax_priority");.

   if (tep_db_num_rows($tax_query)) {.

     $tax_multiplier = 1.0;.

     while ($tax = tep_db_fetch_array($tax_query)) {.

       $tax_multiplier *= 1.0 + ($tax['tax_rate'] / 100);.

     }.

     return ($tax_multiplier - 1.0) * 100;.

   } else {.

     return 0;.

   }.

 }.

////.

// Return the tax description for a zone / class.

// TABLES: tax_rates;.

 function tep_get_tax_description($class_id, $country_id, $zone_id) {.

   $tax_query = tep_db_query("select tax_description from "TABLE_TAX_RATES" tr left join "TABLE_ZONES_TO_GEO_ZONES" za on (tr.tax_zone_id = za.geo_zone_id) left join "TABLE_GEO_ZONES" tz on (tz.geo_zone_id = tr.tax_zone_id) where (za.zone_country_id is null or za.zone_country_id = '0' or za.zone_country_id = '"(int)$country_id"') and (za.zone_id is null or za.zone_id = '0' or za.zone_id = '"(int)$zone_id"') and tr.tax_class_id = '"(int)$class_id"' order by tr.tax_priority");.

   if (tep_db_num_rows($tax_query)) {.

     $tax_description = '';.

     while ($tax = tep_db_fetch_array($tax_query)) {.

       $tax_description .= $tax['tax_description']' + ';.

     }.

     $tax_description = substr($tax_description, 0, -3);.

     return $tax_description;.

   } else {.

     return TEXT_UNKNOWN_TAX_RATE;.

   }.

 }.

////.

// Add tax to a products price.

 function tep_add_tax($price, $tax) {.

   global $currencies;.

   if ( (DISPLAY_PRICE_WITH_TAX == 'true') && ($tax > 0) ) {.

     return tep_round($price, $currencies->currencies[DEFAULT_CURRENCY]['decimal_places']) + tep_calculate_tax($price, $tax);.

   } else {.

     return tep_round($price, $currencies->currencies[DEFAULT_CURRENCY]['decimal_places']);.

   }.

 }.

// Calculates Tax rounding the result.

 function tep_calculate_tax($price, $tax) {.

   global $currencies;.

   return tep_round($price * $tax / 100, $currencies->currencies[DEFAULT_CURRENCY]['decimal_places']);.

 }.

////.

// Return the number of products in a category.

// TABLES: products, products_to_categories, categories.

 function tep_count_products_in_category($category_id, $include_inactive = false) {.

   $products_count = 0;.

   if ($include_inactive == true) {.

     $products_query = tep_db_query("select count(*) as total from "TABLE_PRODUCTS" p, "TABLE_PRODUCTS_TO_CATEGORIES" p2c where p.products_id = p2c.products_id and p2c.categories_id = '"(int)$category_id"'");.

   } else {.

     $products_query = tep_db_query("select count(*) as total from "TABLE_PRODUCTS" p, "TABLE_PRODUCTS_TO_CATEGORIES" p2c where p.products_id = p2c.products_id and p.products_status = '1' and p2c.categories_id = '"(int)$category_id"'");.

   }.

   $products = tep_db_fetch_array($products_query);.

   $products_count += $products['total'];.

   $child_categories_query = tep_db_query("select categories_id from "TABLE_CATEGORIES" where parent_id = '"(int)$category_id"'");.

   if (tep_db_num_rows($child_categories_query)) {.

     while ($child_categories = tep_db_fetch_array($child_categories_query)) {.

       $products_count += tep_count_products_in_category($child_categories['categories_id'], $include_inactive);.

     }.

   }.

   return $products_count;.

 }.

////.

// Return true if the category has subcategories.

// TABLES: categories.

 function tep_has_category_subcategories($category_id) {.

   $child_category_query = tep_db_query("select count(*) as count from "TABLE_CATEGORIES" where parent_id = '"(int)$category_id"'");.

   $child_category = tep_db_fetch_array($child_category_query);.

   if ($child_category['count'] > 0) {.

     return true;.

   } else {.

     return false;.

   }.

 }.

////.

// Returns the address_format_id for the given country.

// TABLES: countries;.

 function tep_get_address_format_id($country_id) {.

   $address_format_query = tep_db_query("select address_format_id as format_id from "TABLE_COUNTRIES" where countries_id = '"(int)$country_id"'");.

   if (tep_db_num_rows($address_format_query)) {.

     $address_format = tep_db_fetch_array($address_format_query);.

     return $address_format['format_id'];.

   } else {.

     return '1';.

   }.

 }.

////.

// Return a formatted address.

// TABLES: address_format.

 function tep_address_format($address_format_id, $address, $html, $boln, $eoln) {.

   $address_format_query = tep_db_query("select address_format as format from "TABLE_ADDRESS_FORMAT" where address_format_id = '"(int)$address_format_id"'");.

   $address_format = tep_db_fetch_array($address_format_query);.

   $company = tep_output_string_protected($address['company']);.

   if (isset($address['firstname']) && tep_not_null($address['firstname'])) {.

     $firstname = tep_output_string_protected($address['firstname']);.

     $lastname = tep_output_string_protected($address['lastname']);.

   } elseif (isset($address['name']) && tep_not_null($address['name'])) {.

     $firstname = tep_output_string_protected($address['name']);.

     $lastname = '';.

   } else {.

     $firstname = '';.

     $lastname = '';.

   }.

   $street = tep_output_string_protected($address['street_address']);.

   $suburb = tep_output_string_protected($address['suburb']);.

   $city = tep_output_string_protected($address['city']);.

   $state = tep_output_string_protected($address['state']);.

   if (isset($address['country_id']) && tep_not_null($address['country_id'])) {.

     $country = tep_get_country_name($address['country_id']);.

     if (isset($address['zone_id']) && tep_not_null($address['zone_id'])) {.

       $state = tep_get_zone_code($address['country_id'], $address['zone_id'], $state);.

     }.

   } elseif (isset($address['country']) && tep_not_null($address['country'])) {.

     $country = tep_output_string_protected($address['country']);.

   } else {.

     $country = '';.

   }.

   $postcode = tep_output_string_protected($address['postcode']);.

   $zip = $postcode;.

   if ($html) {.

// HTML Mode.

     $HR = '<hr>';.

     $hr = '<hr>';.

     if ( ($boln == '') && ($eoln == "\n") ) { // Values not specified, use rational defaults.

       $CR = '<br>';.

       $cr = '<br>';.

       $eoln = $cr;.

     } else { // Use values supplied.

       $CR = $eoln$boln;.

       $cr = $CR;.

     }.

   } else {.

// Text Mode.

     $CR = $eoln;.

     $cr = $CR;.

     $HR = '';.

     $hr = '';.

   }.

   $statecomma = '';.

   $streets = $street;.

   if ($suburb != '') $streets = $street$cr$suburb;.

   if ($country == '') $country = tep_output_string_protected($address['country']);.

   if ($state != '') $statecomma = $state', ';.

   $fmt = $address_format['format'];.

   eval("\$address = \"$fmt\";");.

   if ( (ACCOUNT_COMPANY == 'true') && (tep_not_null($company)) ) {.

     $address = $company$cr$address;.

   }.

   return $address;.

 }.

////.

// Return a formatted address.

// TABLES: customers, address_book.

 function tep_address_label($customers_id, $address_id = 1, $html = false, $boln = '', $eoln = "\n") {.

   $address_query = tep_db_query("select entry_firstname as firstname, entry_lastname as lastname, entry_company as company, entry_street_address as street_address, entry_suburb as suburb, entry_city as city, entry_postcode as postcode, entry_state as state, entry_zone_id as zone_id, entry_country_id as country_id from "TABLE_ADDRESS_BOOK" where customers_id = '"(int)$customers_id"' and address_book_id = '"(int)$address_id"'");.

   $address = tep_db_fetch_array($address_query);.

   $format_id = tep_get_address_format_id($address['country_id']);.

   return tep_address_format($format_id, $address, $html, $boln, $eoln);.

 }.

 function tep_row_number_format($number) {.

   if ( ($number < 10) && (substr($number, 0, 1) != '0') ) $number = '0'$number;.

   return $number;.

 }.

 function tep_get_categories($categories_array = '', $parent_id = '0', $indent = '') {.

   global $languages_id;.

   if (!is_array($categories_array)) $categories_array = array();.

   $categories_query = tep_db_query("select c.categories_id, cd.categories_name from "TABLE_CATEGORIES" c, "TABLE_CATEGORIES_DESCRIPTION" cd where parent_id = '"(int)$parent_id"' and c.categories_id = cd.categories_id and cd.language_id = '"(int)$languages_id"' order by sort_order, cd.categories_name");.

   while ($categories = tep_db_fetch_array($categories_query)) {.

     $categories_array[] = array('id' => $categories['categories_id'],.

                                 'text' => $indent$categories['categories_name']);.

     if ($categories['categories_id'] != $parent_id) {.

       $categories_array = tep_get_categories($categories_array, $categories['categories_id'], $indent'&nbsp;&nbsp;');.

     }.

   }.

   return $categories_array;.

 }.

 function tep_get_manufacturers($manufacturers_array = '') {.

   if (!is_array($manufacturers_array)) $manufacturers_array = array();.

   $manufacturers_query = tep_db_query("select manufacturers_id, manufacturers_name from "TABLE_MANUFACTURERS" order by manufacturers_name");.

   while ($manufacturers = tep_db_fetch_array($manufacturers_query)) {.

     $manufacturers_array[] = array('id' => $manufacturers['manufacturers_id'], 'text' => $manufacturers['manufacturers_name']);.

   }.

   return $manufacturers_array;.

 }.

////.

// Return all subcategory IDs.

// TABLES: categories.

 function tep_get_subcategories(&$subcategories_array, $parent_id = 0) {.

   $subcategories_query = tep_db_query("select categories_id from "TABLE_CATEGORIES" where parent_id = '"(int)$parent_id"'");.

   while ($subcategories = tep_db_fetch_array($subcategories_query)) {.

     $subcategories_array[sizeof($subcategories_array)] = $subcategories['categories_id'];.

     if ($subcategories['categories_id'] != $parent_id) {.

       tep_get_subcategories($subcategories_array, $subcategories['categories_id']);.

     }.

   }.

 }.

// Output a raw date string in the selected locale date format.

// $raw_date needs to be in this format: YYYY-MM-DD HH:MM:SS.

 function tep_date_long($raw_date) {.

   if ( ($raw_date == '0000-00-00 00:00:00') || ($raw_date == '') ) return false;.

   $year = (int)substr($raw_date, 0, 4);.

   $month = (int)substr($raw_date, 5, 2);.

   $day = (int)substr($raw_date, 8, 2);.

   $hour = (int)substr($raw_date, 11, 2);.

   $minute = (int)substr($raw_date, 14, 2);.

   $second = (int)substr($raw_date, 17, 2);.

   return strftime(DATE_FORMAT_LONG, mktime($hour,$minute,$second,$month,$day,$year));.

 }.

////.

// Output a raw date string in the selected locale date format.

// $raw_date needs to be in this format: YYYY-MM-DD HH:MM:SS.

// NOTE: Includes a workaround for dates before 01/01/1970 that fail on windows servers.

 function tep_date_short($raw_date) {.

   if ( ($raw_date == '0000-00-00 00:00:00') || empty($raw_date) ) return false;.

   $year = substr($raw_date, 0, 4);.

   $month = (int)substr($raw_date, 5, 2);.

   $day = (int)substr($raw_date, 8, 2);.

   $hour = (int)substr($raw_date, 11, 2);.

   $minute = (int)substr($raw_date, 14, 2);.

   $second = (int)substr($raw_date, 17, 2);.

   if (@date('Y', mktime($hour, $minute, $second, $month, $day, $year)) == $year) {.

     return date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, $year));.

   } else {.

     return ereg_replace('2037''$', $year, date(DATE_FORMAT, mktime($hour, $minute, $second, $month, $day, 2037)));.

   }.

 }.

////.

// Parse search string into indivual objects.

 function tep_parse_search_string($search_str = '', &$objects) {.

   $search_str = trim(strtolower($search_str));.

// Break up $search_str on whitespace; quoted string will be reconstructed later.

   $pieces = split('[[:space:]]+', $search_str);.

   $objects = array();.

   $tmpstring = '';.

   $flag = '';.

   for ($k=0; $k<count($pieces); $k++) {.

     while (substr($pieces[$k], 0, 1) == '(') {.

       $objects[] = '(';.

       if (strlen($pieces[$k]) > 1) {.

         $pieces[$k] = substr($pieces[$k], 1);.

       } else {.

         $pieces[$k] = '';.

       }.

     }.

     $post_objects = array();.

     while (substr($pieces[$k], -1) == ')')  {.

       $post_objects[] = ')';.

       if (strlen($pieces[$k]) > 1) {.

         $pieces[$k] = substr($pieces[$k], 0, -1);.

       } else {.

         $pieces[$k] = '';.

       }.

     }.

// Check individual words.

     if ( (substr($pieces[$k], -1) != '"') && (substr($pieces[$k], 0, 1) != '"') ) {.

       $objects[] = trim($pieces[$k]);.

       for ($j=0; $j<count($post_objects); $j++) {.

         $objects[] = $post_objects[$j];.

       }.

     } else {.

/* This means that the $piece is either the beginning or the end of a string..

  So, we'll slurp up the $pieces and stick them together until we get to the.

  end of the string or run out of pieces..

*/.

// Add this word to the $tmpstring, starting the $tmpstring.

       $tmpstring = trim(ereg_replace('"', ' ', $pieces[$k]));.

// Check for one possible exception to the rule. That there is a single quoted word..

       if (substr($pieces[$k], -1 ) == '"') {.

// Turn the flag off for future iterations.

         $flag = 'off';.

         $objects[] = trim($pieces[$k]);.

         for ($j=0; $j<count($post_objects); $j++) {.

           $objects[] = $post_objects[$j];.

         }.

         unset($tmpstring);.

// Stop looking for the end of the string and move onto the next word..

         continue;.

       }.

// Otherwise, turn on the flag to indicate no quotes have been found attached to this word in the string..

       $flag = 'on';.

// Move on to the next word.

       $k++;.

// Keep reading until the end of the string as long as the $flag is on.

       while ( ($flag == 'on') && ($k < count($pieces)) ) {.

         while (substr($pieces[$k], -1) == ')') {.

           $post_objects[] = ')';.

           if (strlen($pieces[$k]) > 1) {.

             $pieces[$k] = substr($pieces[$k], 0, -1);.

           } else {.

             $pieces[$k] = '';.

           }.

         }.

// If the word doesn't end in double quotes, append it to the $tmpstring..

         if (substr($pieces[$k], -1) != '"') {.

// Tack this word onto the current string entity.

           $tmpstring .= ' '$pieces[$k];.

// Move on to the next word.

           $k++;.

           continue;.

         } else {.

/* If the $piece ends in double quotes, strip the double quotes, tack the.

  $piece onto the tail of the string, push the $tmpstring onto the $haves,.

  kill the $tmpstring, turn the $flag "off", and return..

*/.

           $tmpstring .= ' 'trim(ereg_replace('"', ' ', $pieces[$k]));.

// Push the $tmpstring onto the array of stuff to search for.

           $objects[] = trim($tmpstring);.

           for ($j=0; $j<count($post_objects); $j++) {.

             $objects[] = $post_objects[$j];.

           }.

           unset($tmpstring);.

// Turn off the flag to exit the loop.

           $flag = 'off';.

         }.

       }.

     }.

   }.

// add default logical operators if needed.

   $temp = array();.

   for($i=0; $i<(count($objects)-1); $i++) {.

     $temp[] = $objects[$i];.

     if ( ($objects[$i] != 'and') &&.

          ($objects[$i] != 'or') &&.

          ($objects[$i] != '(') &&.

          ($objects[$i+1] != 'and') &&.

          ($objects[$i+1] != 'or') &&.

          ($objects[$i+1] != ')') ) {.

       $temp[] = ADVANCED_SEARCH_DEFAULT_OPERATOR;.

     }.

   }.

   $temp[] = $objects[$i];.

   $objects = $temp;.

   $keyword_count = 0;.

   $operator_count = 0;.

   $balance = 0;.

   for($i=0; $i<count($objects); $i++) {.

     if ($objects[$i] == '(') $balance ;.

     if ($objects[$i] == ')') $balance ++;.

     if ( ($objects[$i] == 'and') || ($objects[$i] == 'or') ) {.

       $operator_count ++;.

     } elseif ( ($objects[$i]) && ($objects[$i] != '(') && ($objects[$i] != ')') ) {.

       $keyword_count ++;.

     }.

   }.

   if ( ($operator_count < $keyword_count) && ($balance == 0) ) {.

     return true;.

   } else {.

     return false;.

   }.

 }.

////.

// Check date.

 function tep_checkdate($date_to_check, $format_string, &$date_array) {.

   $separator_idx = -1;.

   $separators = array('-', ' ', '/', '.');.

   $month_abbr = array('jan','feb','mar','apr','may','jun','jul','aug','sep','oct','nov','dec');.

   $no_of_days = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);.

   $format_string = strtolower($format_string);.

   if (strlen($date_to_check) != strlen($format_string)) {.

     return false;.

   }.

   $size = sizeof($separators);.

   for ($i=0; $i<$size; $i++) {.

     $pos_separator = strpos($date_to_check, $separators[$i]);.

     if ($pos_separator != false) {.

       $date_separator_idx = $i;.

       break;.

     }.

   }.

   for ($i=0; $i<$size; $i++) {.

     $pos_separator = strpos($format_string, $separators[$i]);.

     if ($pos_separator != false) {.

       $format_separator_idx = $i;.

       break;.

     }.

   }.

   if ($date_separator_idx != $format_separator_idx) {.

     return false;.

   }.

   if ($date_separator_idx != -1) {.

     $format_string_array = explode( $separators[$date_separator_idx], $format_string );.

     if (sizeof($format_string_array) != 3) {.

       return false;.

     }.

     $date_to_check_array = explode( $separators[$date_separator_idx], $date_to_check );.

     if (sizeof($date_to_check_array) != 3) {.

       return false;.

     }.

     $size = sizeof($format_string_array);.

     for ($i=0; $i<$size; $i++) {.

       if ($format_string_array[$i] == 'mm' || $format_string_array[$i] == 'mmm') $month = $date_to_check_array[$i];.

       if ($format_string_array[$i] == 'dd') $day = $date_to_check_array[$i];.

       if ( ($format_string_array[$i] == 'yyyy') || ($format_string_array[$i] == 'aaaa') ) $year = $date_to_check_array[$i];.

     }.

   } else {.

     if (strlen($format_string) == 8 || strlen($format_string) == 9) {.

       $pos_month = strpos($format_string, 'mmm');.

       if ($pos_month != false) {.

         $month = substr( $date_to_check, $pos_month, 3 );.

         $size = sizeof($month_abbr);.

         for ($i=0; $i<$size; $i++) {.

           if ($month == $month_abbr[$i]) {.

             $month = $i;.

             break;.

           }.

         }.

       } else {.

         $month = substr($date_to_check, strpos($format_string, 'mm'), 2);.

       }.

     } else {.

       return false;.

     }.

     $day = substr($date_to_check, strpos($format_string, 'dd'), 2);.

     $year = substr($date_to_check, strpos($format_string, 'yyyy'), 4);.

   }.

   if (strlen($year) != 4) {.

     return false;.

   }.

   if (!settype($year, 'integer') || !settype($month, 'integer') || !settype($day, 'integer')) {.

     return false;.

   }.

   if ($month > 12 || $month < 1) {.

     return false;.

   }.

   if ($day < 1) {.

     return false;.

   }.

   if (tep_is_leap_year($year)) {.

     $no_of_days[1] = 29;.

   }.

   if ($day > $no_of_days[$month - 1]) {.

     return false;.

   }.

   $date_array = array($year, $month, $day);.

   return true;.

 }.

////.

// Check if year is a leap year.

 function tep_is_leap_year($year) {.

   if ($year % 100 == 0) {.

     if ($year % 400 == 0) return true;.

   } else {.

     if (($year % 4) == 0) return true;.

   }.

   return false;.

 }.

////.

// Return table heading with sorting capabilities.

 function tep_create_sort_heading($sortby, $colnum, $heading) {.

   global $PHP_SELF;.

   $sort_prefix = '';.

   $sort_suffix = '';.

   if ($sortby) {.

     $sort_prefix = '<a href="'tep_href_link(basename($PHP_SELF), tep_get_all_get_params(array('page', 'info', 'sort'))'page=1&sort='$colnum($sortby == $colnum'a' ? 'd' : 'a'))'" title="'tep_output_string(TEXT_SORT_PRODUCTS($sortby == $colnum'd' || substr($sortby, 0, 1) != $colnum ? TEXT_ASCENDINGLY : TEXT_DESCENDINGLY)TEXT_BY$heading)'" class="productListing-heading">';.

     $sort_suffix = (substr($sortby, 0, 1) == $colnum ? (substr($sortby, 1, 1) == 'a' ? '+' : '-') : '')'</a>';.

   }.

   return $sort_prefix$heading$sort_suffix;.

 }.

////.

// Recursively go through the categories and retreive all parent categories IDs.

// TABLES: categories.

 function tep_get_parent_categories(&$categories, $categories_id) {.

   $parent_categories_query = tep_db_query("select parent_id from "TABLE_CATEGORIES" where categories_id = '"(int)$categories_id"'");.

   while ($parent_categories = tep_db_fetch_array($parent_categories_query)) {.

     if ($parent_categories['parent_id'] == 0) return true;.

     $categories[sizeof($categories)] = $parent_categories['parent_id'];.

     if ($parent_categories['parent_id'] != $categories_id) {.

       tep_get_parent_categories($categories, $parent_categories['parent_id']);.

     }.

   }.

 }.

////.

// Construct a category path to the product.

// TABLES: products_to_categories.

 function tep_get_product_path($products_id) {.

   $cPath = '';.

   $category_query = tep_db_query("select p2c.categories_id from "TABLE_PRODUCTS" p, "TABLE_PRODUCTS_TO_CATEGORIES" p2c where p.products_id = '"(int)$products_id"' and p.products_status = '1' and p.products_id = p2c.products_id limit 1");.

   if (tep_db_num_rows($category_query)) {.

     $category = tep_db_fetch_array($category_query);.

     $categories = array();.

     tep_get_parent_categories($categories, $category['categories_id']);.

     $categories = array_reverse($categories);.

     $cPath = implode('_', $categories);.

     if (tep_not_null($cPath)) $cPath .= '_';.

     $cPath .= $category['categories_id'];.

   }.

   return $cPath;.

 }.

////.

// Return a product ID with attributes.

 function tep_get_uprid($prid, $params) {.

   $uprid = $prid;.

   if ( (is_array($params)) && (!strstr($prid, '{')) ) {.

     while (list($option, $value) = each($params)) {.

       $uprid = $uprid'{'$option'}'$value;.

     }.

   }.

   return $uprid;.

 }.

////.

// Return a product ID from a product ID with attributes.

 function tep_get_prid($uprid) {.

   $pieces = explode('{', $uprid);.

   return $pieces[0];.

 }.

////.

// Return a customer greeting.

 function tep_customer_greeting() {.

   global $customer_id, $customer_first_name;.

   if (tep_session_is_registered('customer_first_name') && tep_session_is_registered('customer_id')) {.

     $greeting_string = sprintf(TEXT_GREETING_PERSONAL, tep_output_string_protected($customer_first_name), tep_href_link(FILENAME_PRODUCTS_NEW));.

   } else {.

     $greeting_string = sprintf(TEXT_GREETING_GUEST, tep_href_link(FILENAME_LOGIN, '', 'SSL'), tep_href_link(FILENAME_CREATE_ACCOUNT, '', 'SSL'));.

   }.

   return $greeting_string;.

 }.

////.

//! Send email (text/html) using MIME.

// This is the central mail function. The SMTP Server should be configured.

// correct in php.ini.

// Parameters:.

// $to_name           The name of the recipient, e.g. "Jan Wildeboer".

// $to_email_address  The eMail address of the recipient,.

//                    e.g. jan..

 function tep_mail($to_name, $to_email_address, $email_subject, $email_text, $from_email_name, $from_email_address) {.

   if (SEND_EMAILS != 'true') return false;.

   // Instantiate a new mail object.

   $message = new email(array('X-Mailer: osCommerce Mailer'));.

   // Build the text version.

   $text = strip_tags($email_text);.

   if (EMAIL_USE_HTML == 'true') {.

     $message->add_html($email_text, $text);.

   } else {.

     $message->add_text($text);.

   }.

   // Send message.

   $message->build_message();.

   $message->send($to_name, $to_email_address, $from_email_name, $from_email_address, $email_subject);.

 }.

////.

// Check if product has attributes.

 function tep_has_product_attributes($products_id) {.

   $attributes_query = tep_db_query("select count(*) as count from "TABLE_PRODUCTS_ATTRIBUTES" where products_id = '"(int)$products_id"'");.

   $attributes = tep_db_fetch_array($attributes_query);.

   if ($attributes['count'] > 0) {.

     return true;.

   } else {.

     return false;.

   }.

 }.

////.

// Get the number of times a word/character is present in a string.

 function tep_word_count($string, $needle) {.

   $temp_array = split($needle, $string);.

   return sizeof($temp_array);.

 }.

 function tep_count_modules($modules = '') {.

   $count = 0;.

   if (empty.

Comment #5

To save you the trouble of posting any more forms, go to this topic, it will answer your question..

Http://www.oscommerc...mon_Problems/15..

Comment #6

Hi,.

Thanks for that, new part of the iPage site I have never seen before..

Ok, I do understand the problem, due to the fact of a space, but I can not find one at the start or the end of both scripts..

Pompeylad...

Comment #7

Send me the link of the iPage site and what is the page name where you get the message. check that for white spaces..

This post has been edited by.

211655.

: 30 June 2004, 20:00..

Comment #8

In your english.php.

Define('FOOTER_TEXT_BODY', 'Copyright 2003 <a href="http://www.oscommerce.com" target="_blank">OS Commerce</a><br>Designed by <a href="http://www.oscommerce.com" target="_blank">OS Commerce</a>');.

?>.

Code you pasted:.

Target="_blank">OS Commerce</a>);.

?>.

Code should be:.

Target="_blank">OS Commerce</a>');.

?>.

You were missing the ' in this line: target="_blank">OS Commerce</a>');..

Comment #9

Dan and George,.

There where spaces on both php files. I downloaded them yet again and the spaces were there, me thinks my free Coffeecup FTP is to blame. I download the php files in to a folder which all ready contained those file names, which may of been the problem, as I seemed to of been opening the old file each time. When I downloaded them in to a empty folder the spaces were there..

Problem solved..

George thanks for pointing out the missing ' in the line: target="_blank">OS Commerce</a>');.

Thanks again to one and all and keep up the good work..

Pompeylad...

Comment #10

As far as I know, that ftp program works okay. Check the configuration settings and make sure that it is uploading files with a .php as ascii files, and not binary. Many ftp programs have a list they use for the ascii file (wsftp-pro is one) and, while they have .htm, .html, .txt in the list, many do not have .php, .php3 and .phtml. This will cause havoc with your file upoads..

Hth.....

Comment #11

Hi,.

When I try to log in to my iPage site as a customer I keep getting this warning:.

Warning: Cannot add header information - headers already sent by (output started at ........../catalog/includes/languages/english.php:668) in ........../catalog/includes/functions/general.php on line 29.

And in general.php line 29 is:.

Header('Location: '$url);.

So I am thinking that the permissions are not set correctly, but their is not a 668 permission (is there?)..

So it must be the line 29, but it looks ok to me..

Can someone please give us a little help.............tip.........nod.........ANYTHING!!!!!.

Thanks,.

Pompeylad..

P.S. A friend has also came across the same problem.[COLOR=red].

This post has been edited by.

Pompeylad.

: 29 June 2004, 21:53..

Comment #12

Hi,.

But where is the white space?.

I have tryed deleting every space, in every combataion on line 29 but nothing works..

And the only ?> is at the end of general.php but that looks fine..

Help,.

Pompeylad...

Comment #13


This question was taken from a support group/message board and re-posted here so others can learn from it.