Jump to content
VJ

Easy Populate & Products Attributes

Recommended Posts

Add me to the list of everyone who is experiencing the dreaded "1136 - Column count doesn't match value count at row 1" error. :'( HOWEVER, I do have a workaround for this problem. :) Unfortunately it took me over 6 hours of playing with this thing before I finally realized there is a simple workaround. Since the problem only happens for NEW products being added, and will actually update the existing ones without a problem, here is the workaround:

 

You will need two copies of easypopulate.php. One will be with the unmodified code which does not include the extra fields code that you added, and the other copy will be the modified version for the extra fields. When you upload new products, use the unmodified easypopulate.php. This will get all of your new products into the database. Now that they are there, replace the unmodified easypopulate.php with the modified version of easypopulate.php, and upload your product listing again. Your products will now update correctly with the extra fields! And don't worry about the extra fields that you created in your products list. You can upload using the same product list even if you are uploading new products using the unmodified easypopulate.php file; it will just ignore those fields until you replace it with the modified easypopulate.php.

 

I hope this helps anyone out there that is experiencing this problem. Let me know if this workaround is successful for you like it is for me. :thumbsup:

 

Best regards,

Paul

Share this post


Link to post
Share on other sites

the products which were duplicated, have you determined what the differences were?

you can either delete the duplicates. if you restore from backup, then the orders customers have made will not match the product id #'s, dont know if that makes a difference. also, do not use any apostrophes what so ever in the categories found out that was giving dup categories and products.


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites

what fields did you add?

here is one of my easypopulate.php files, which is modified, has new fields, froogle changes, etc. i am still working on more of the froogle changes.

 

Search the code, read thru it. I use header tags controller, also use mopics, by uncommenting the lines in this code you can have the fields for them. or change the field names for what you want.

 

<?php

 

// Current EP Version

$curver = '2.8-MS2';

 

/*

 $Id: easypopulate.php,v 2.8 2004/09/20 JAO Exp $

Modified froogle section of ep, commenting out old fields, adding new fields.  Fixed SSL timeout issue.

JAO 9/20/2004 john@oscommerce-host.com

Modified, added two fields, products_issues, products_retail_price

*/

 

//

//*******************************

//*******************************

// C O N F I G U R A T I O N

// V A R I A B L E S

//*******************************

//*******************************

 

// **** Temp directory ****

// if you changed your directory structure from stock and do not have /catalog/temp/, then you'll need to change this accordingly.

//

$tempdir = "/catalog/temp/";

$tempdir2 = "/catalog/temp/";

 

//**** File Splitting Configuration ****

// we attempt to set the timeout limit longer for this script to avoid having to split the files

// NOTE:  If your server is running in safe mode, this setting cannot override the timeout set in php.ini

// uncomment this if you are not on a safe mode server and you are getting timeouts

// set_time_limit(330);

 

// if you are splitting files, this will set the maximum number of records to put in each file.

// if you set your php.ini to a long time, you can make this number bigger

global $maxrecs;

$maxrecs = 300; // default, seems to work for most people.  Reduce if you hit timeouts

//$maxrecs = 4; // for testing

 

//**** Image Defaulting ****

global $default_images, $default_image_manufacturer, $default_image_product, $default_image_category;

 

// set them to your own default "We don't have any picture" gif

//$default_image_manufacturer = 'no_image_manufacturer.gif';

//$default_image_product = 'no_image_product.jpg';

//$default_image_category = 'no_image_category.gif';

 

// or let them get set to nothing

$default_image_manufacturer = '';

$default_image_product = '';

$default_image_category = '';

 

//**** Status Field Setting ****

// Set the v_status field to "Inactive" if you want the status=0 in the system

// Set the v_status field to "Delete" if you want to remove the item from the system <- THIS IS NOT WORKING YET!

// If zero_qty_inactive is true, then items with zero qty will automatically be inactive in the store.

global $active, $inactive, $zero_qty_inactive, $deleteit;

$active = 'Active';

$inactive = 'Inactive';

//$deleteit = 'Delete'; // not functional yet

$zero_qty_inactive = true;

 

//**** Size of products_model in products table ****

// set this to the size of your model number field in the db.  We check to make sure all models are no longer than this value.

// this prevents the database from getting fubared.  Just making this number bigger won't help your database!  They must match!

global $modelsize;

$modelsize = 15;

 

//**** Price includes tax? ****

// Set the v_price_with_tax to

// 0 if you want the price without the tax included

// 1 if you want the price to be defined for import & export including tax.

global $price_with_tax;

$price_with_tax =false;

 

// **** Quote -> Escape character conversion ****

// If you have extensive html in your descriptions and it's getting mangled on upload, turn this off

// set to 1 = replace quotes with escape characters

// set to 0 = no quote replacement

global $replace_quotes;

$replace_quotes = true;

 

// **** 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 = ","; // comma

//$separator = ";"; // semi-colon

//$separator = "~"; // tilde

//$separator = "-"; // dash

//$separator = "*"; // splat

 

// **** Max Category Levels ****

// change this if you need more or fewer categories

global $max_categories;

$max_categories = 1; // 7 is default

 

// VJ product attributes begin

// **** Product Attributes ****

// change this to false, if do not want to download product attributes

global $products_with_attributes;

$products_with_attributes = true;

 

// change this if you want to download selected product options

// this might be handy, if you have a lot of product options, and your output file exceeds 256 columns (which is the max. limit MS Excel is able to handle)

global $attribute_options_select;

//$attribute_options_select = array('Size', 'Model'); // uncomment and fill with product options name you wish to download // comment this line, if you wish to download all product options

// VJ product attributes end

 

 

 

 

// ****************************************

// Froogle configuration variables

// -- YOU MUST CONFIGURE THIS!  IT WON'T WORK OUT OF THE BOX!

// ****************************************

 

// **** Froogle product info page path ****

// We can't use the tep functions to create the link, because the links will point to the admin, since that's where we're at.

// So put the entire path to your product_info.php page here

global $froogle_product_info_path;

$froogle_product_info_path = "http://www.discreetentertainment.com/catalog/product_info.php";

 

// **** Froogle product image path ****

// Set this to the path to your images directory

global $froogle_image_path;

$froogle_image_path = "http://www.discreetentertainment.com/catalog/images/";

 

// **** Froogle - search engine friendly setting

// if your store has SEARCH ENGINE FRIENDLY URLS set, then turn this to true

// I did it this way because I'm having trouble with the code seeing the constants

// that are defined in other places.

global $froogle_SEF_urls;

$froogle_SEF_urls = true;

 

 

// ****************************************

// End Froogle configuration variables

// ****************************************

 

//*******************************

//*******************************

// E N D

// C O N F I G U R A T I O N

// V A R I A B L E S

//*******************************

//*******************************

 

 

//*******************************

//*******************************

// S T A R T

// INITIALIZATION

//*******************************

//*******************************

 

 

require('includes/application_top.php');

require('includes/database_tables.php');

 

//*******************************

// If you are running a pre-Nov1-2002 snapshot of OSC, then we need this include line to avoid

// errors like:

//   undefined function tep_get_uploaded_file

if (!function_exists(tep_get_uploaded_file)){

include ('easypopulate_functions.php');

}

//*******************************

 

// VJ product attributes begin

global $attribute_options_array;

$attribute_options_array = array();

 

if ($products_with_attributes == true) {

if (is_array($attribute_options_select) && (count($attribute_options_select) > 0)) {

 foreach ($attribute_options_select as $value) {

  $attribute_options_query = "select distinct products_options_id from " . TABLE_PRODUCTS_OPTIONS . " where products_options_name = '" . $value . "'";

 

  $attribute_options_values = tep_db_query($attribute_options_query);

 

  if ($attribute_options = tep_db_fetch_array($attribute_options_values)){

   $attribute_options_array[] = array('products_options_id' => $attribute_options['products_options_id']);

  }

 }

} else {

 $attribute_options_query = "select distinct products_options_id from " . TABLE_PRODUCTS_OPTIONS . " order by products_options_id";

 

 $attribute_options_values = tep_db_query($attribute_options_query);

 

 while ($attribute_options = tep_db_fetch_array($attribute_options_values)){

  $attribute_options_array[] = array('products_options_id' => $attribute_options['products_options_id']);

 }

}

}

// VJ product attributes end

 

global $filelayout, $filelayout_count, $filelayout_sql, $langcode, $fileheaders;

 

// these are the fields that will be defaulted to the current values in the database if they are not found in the incoming file

global $default_these;

$default_these = array(

'v_products_image',

#'v_products_mimage',

#'v_products_bimage',

#'v_products_subimage1',

#'v_products_bsubimage1',

#'v_products_subimage2',

#'v_products_bsubimage2',

#'v_products_subimage3',

#'v_products_bsubimage3',

'v_categories_id',

'v_products_price',

'v_products_quantity',

'v_products_weight',

'v_date_avail',

'v_instock',

'v_tax_class_title',

'v_manufacturers_name',

'v_manufacturers_id',

'v_products_dim_type',

'v_products_length',

'v_products_width',

'v_products_height'

);

 

//elari check default language_id from configuration table DEFAULT_LANGUAGE

$epdlanguage_query = tep_db_query("select languages_id, name from " . TABLE_LANGUAGES . " where code = '" . DEFAULT_LANGUAGE . "'");

if (tep_db_num_rows($epdlanguage_query)) {

$epdlanguage = tep_db_fetch_array($epdlanguage_query);

$epdlanguage_id   = $epdlanguage['languages_id'];

$epdlanguage_name = $epdlanguage['name'];

} else {

Echo 'Strange but there is no default language to work... That may not happen, just in case... ';

}

 

$langcode = ep_get_languages();

 

if ( $dltype != '' ){

// if dltype is set, then create the filelayout.  Otherwise it gets read from the uploaded file

ep_create_filelayout($dltype); // get the right filelayout for this download

}

 

//*******************************

//*******************************

// E N D

// INITIALIZATION

//*******************************

//*******************************

 

 

if ( $download == 'stream' or  $download == 'tempfile' ){

//*******************************

//*******************************

// DOWNLOAD FILE

//*******************************

//*******************************

$filestring = ""; // this holds the csv file we want to download

 

if ( $dltype=='froogle' ){

// Froogle no longer accepts this information

 // set the things froogle wants at the top of the file

//  $filestring .= "# html_escaped=YES\n";

//  $filestring .= "# updates_only=NO\n";

//  $filestring .= "# product_type=OTHER\n";

//  $filestring .= "# quoted=YES\n";

}

 

$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 ){

 $filestring .= $key . $separator;

}

// now lop off the trailing tab

$filestring = substr($filestring, 0, strlen($filestring)-1);

 

// set the type

if ( $dltype == 'froogle' ){

 $endofrow = "\n";

} else {

 // default to normal end of row

 $endofrow = $separator . 'EOREOR' . "\n";

}

$filestring .= $endofrow;

 

$num_of_langs = count($langcode);

while ($row){

 

 

 // if the filelayout says we need a products_name, get it

 // build the long full froogle image path

 $row['v_products_fullpath_image'] = $froogle_image_path . $row['v_products_image'];

 // Other froogle defaults go here for now

// Items below may be uncommented, (search the file for other areas too)

//  $row['v_froogle_instock']   = 'Y';

//  $row['v_froogle_shipping']   = '';

//  $row['v_froogle_upc']    = '';

//  $row['v_froogle_color']   = '';

//  $row['v_froogle_size']   = '';

//  $row['v_froogle_quantitylevel']  = '';

//  $row['v_froogle_manufacturer_id'] = '';

//  $row['v_froogle_exp_date']  = '';

 $row['v_froogle_product_type']  = 'OTHER';

//  $row['v_froogle_delete']  = '';

//  $row['v_froogle_currency']  = 'USD';

 $row['v_froogle_offer_id']  = $row['v_products_model'];

 $row['v_froogle_product_id']  = $row['v_products_model'];

 

 // names and descriptions require that we loop thru all languages that are turned on in the store

 foreach ($langcode as $key => $lang){

  $lid = $lang['id'];

 

  // for each language, get the description and set the vals

  $sql2 = "SELECT *

   FROM ".TABLE_PRODUCTS_DESCRIPTION."

   WHERE

    products_id = " . $row['v_products_id'] . " AND

    language_id = '" . $lid . "'

   ";

  $result2 = tep_db_query($sql2);

  $row2 =  tep_db_fetch_array($result2);

 

  // I'm only doing this for the first language, since right now froogle is US only.. Fix later!

  // adding url for froogle, but it should be available no matter what

  if ($froogle_SEF_urls){

   // if only one language

   if ($num_of_langs == 1){

    $row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '/products_id/' . $row['v_products_id'];

   } else {

    $row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '/products_id/' . $row['v_products_id'] . '/language/' . $lid;

   }

  } else {

   if ($num_of_langs == 1){

    $row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '?products_id=' . $row['v_products_id'];

   } else {

    $row['v_froogle_products_url_' . $lid] = $froogle_product_info_path . '?products_id=' . $row['v_products_id'] . '&language=' . $lid;

   }

  }

 

  $row['v_products_name_' . $lid]  = $row2['products_name'];

  $row['v_products_description_' . $lid]  = $row2['products_description'];

  $row['v_products_url_' . $lid]   = $row2['products_url'];

 

  // froogle advanced format needs the quotes around the name and desc

  $row['v_froogle_products_name_' . $lid] = '"' . strip_tags(str_replace('"','""',$row2['products_name'])) . '"';

  $row['v_froogle_products_description_' . $lid] = '"' . strip_tags(str_replace('"','""',$row2['products_description'])) . '"';

 

  // support for Linda's Header Controller 2.0 here

  if(isset($filelayout['v_products_head_title_tag_' . $lid])){

   $row['v_products_head_title_tag_' . $lid]  = $row2['products_head_title_tag'];

   $row['v_products_head_desc_tag_' . $lid]  = $row2['products_head_desc_tag'];

   $row['v_products_head_keywords_tag_' . $lid]  = $row2['products_head_keywords_tag'];

  }

  // end support for Header Controller 2.0

 }

 

 // for the categories, we need to keep looping until we find the root category

 

 // start with v_categories_id

 // Get the category description

 // set the appropriate variable name

 // if parent_id is not null, then follow it up.

 // we'll populate an aray first, then decide where it goes in the

 $thecategory_id = $row['v_categories_id'];

 $fullcategory = ''; // this will have the entire category stack for froogle

 for( $categorylevel=1; $categorylevel<$max_categories+1; $categorylevel++){

  if ($thecategory_id){

   $sql2 = "SELECT categories_name

    FROM ".TABLE_CATEGORIES_DESCRIPTION."

    WHERE

     categories_id = " . $thecategory_id . " AND

     language_id = " . $epdlanguage_id;

 

   $result2 = tep_db_query($sql2);

   $row2 =  tep_db_fetch_array($result2);

   // only set it if we found something

   $temprow['v_categories_name_' . $categorylevel] = $row2['categories_name'];

   // now get the parent ID if there was one

   $sql3 = "SELECT parent_id

    FROM ".TABLE_CATEGORIES."

    WHERE

     categories_id = " . $thecategory_id;

   $result3 = tep_db_query($sql3);

   $row3 =  tep_db_fetch_array($result3);

   $theparent_id = $row3['parent_id'];

   if ($theparent_id != ''){

    // there was a parent ID, lets set thecategoryid to get the next level

    $thecategory_id = $theparent_id;

   } else {

    // we have found the top level category for this item,

    $thecategory_id = false;

   }

   //$fullcategory .= " > " . $row2['categories_name'];

   $fullcategory = $row2['categories_name'] . " > " . $fullcategory;

  } else {

   $temprow['v_categories_name_' . $categorylevel] = '';

  }

 }

 // now trim off the last ">" from the category stack

 $row['v_category_fullpath'] = substr($fullcategory,0,strlen($fullcategory)-3);

 

 // temprow has the old style low to high level categories.

 $newlevel = 1;

 // let's turn them into high to low level categories

 for( $categorylevel=6; $categorylevel>0; $categorylevel--){

  if ($temprow['v_categories_name_' . $categorylevel] != ''){

   $row['v_categories_name_' . $newlevel++] = $temprow['v_categories_name_' . $categorylevel];

  }

 }

 // if the filelayout says we need a manufacturers name, get it

 if (isset($filelayout['v_manufacturers_name'])){

  if ($row['v_manufacturers_id'] != ''){

   $sql2 = "SELECT manufacturers_name

    FROM ".TABLE_MANUFACTURERS."

    WHERE

    manufacturers_id = " . $row['v_manufacturers_id']

   ;

   $result2 = tep_db_query($sql2);

   $row2 =  tep_db_fetch_array($result2);

   $row['v_manufacturers_name'] = $row2['manufacturers_name'];

  }

 }

 

 

 // If you have other modules that need to be available, put them here

 

 // VJ product attribs begin

 if (isset($filelayout['v_attribute_options_id_1'])){

  $languages = tep_get_languages();

 

  $attribute_options_count = 1;

     foreach ($attribute_options_array as $attribute_options) {

   $row['v_attribute_options_id_' . $attribute_options_count]  = $attribute_options['products_options_id'];

 

   for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

    $lid = $languages[$i]['id'];

 

    $attribute_options_languages_query = "select products_options_name from " . TABLE_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$attribute_options['products_options_id'] . "' and language_id = '" . (int)$lid . "'";

 

    $attribute_options_languages_values = tep_db_query($attribute_options_languages_query);

 

    $attribute_options_languages = tep_db_fetch_array($attribute_options_languages_values);

 

    $row['v_attribute_options_name_' . $attribute_options_count . '_' . $lid] = $attribute_options_languages['products_options_name'];

   }

 

   $attribute_values_query = "select products_options_values_id from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$attribute_options['products_options_id'] . "' order by products_options_values_id";

 

   $attribute_values_values = tep_db_query($attribute_values_query);

 

   $attribute_values_count = 1;

   while ($attribute_values = tep_db_fetch_array($attribute_values_values)) {

    $row['v_attribute_values_id_' . $attribute_options_count . '_' . $attribute_values_count]  = $attribute_values['products_options_values_id'];

 

    $attribute_values_price_query = "select options_values_price, price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " where products_id = '" . (int)$row['v_products_id'] . "' and options_id = '" . (int)$attribute_options['products_options_id'] . "' and options_values_id = '" . (int)$attribute_values['products_options_values_id'] . "'";

 

    $attribute_values_price_values = tep_db_query($attribute_values_price_query);

 

    $attribute_values_price = tep_db_fetch_array($attribute_values_price_values);

 

    $row['v_attribute_values_price_' . $attribute_options_count . '_' . $attribute_values_count]  = $attribute_values_price['price_prefix'] . $attribute_values_price['options_values_price'];

 

    for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

     $lid = $languages[$i]['id'];

 

     $attribute_values_languages_query = "select products_options_values_name from " . TABLE_PRODUCTS_OPTIONS_VALUES . " where products_options_values_id = '" . (int)$attribute_values['products_options_values_id'] . "' and language_id = '" . (int)$lid . "'";

 

     $attribute_values_languages_values = tep_db_query($attribute_values_languages_query);

 

     $attribute_values_languages = tep_db_fetch_array($attribute_values_languages_values);

 

     $row['v_attribute_values_name_' . $attribute_options_count . '_' . $attribute_values_count . '_' . $lid] = $attribute_values_languages['products_options_values_name'];

    }

 

    $attribute_values_count++;

   }

 

   $attribute_options_count++;

  }

 }

 // VJ product attribs end

 

 // this is for the separate price per customer module

 if (isset($filelayout['v_customer_price_1'])){

  $sql2 = "SELECT

    customers_group_price,

    customers_group_id

   FROM

    ".TABLE_PRODUCTS_GROUPS."

   WHERE

   products_id = " . $row['v_products_id'] . "

   ORDER BY

   customers_group_id"

  ;

  $result2 = tep_db_query($sql2);

  $ll = 1;

  $row2 =  tep_db_fetch_array($result2);

  while( $row2 ){

   $row['v_customer_group_id_' . $ll]  = $row2['customers_group_id'];

   $row['v_customer_price_' . $ll]  = $row2['customers_group_price'];

   $row2 = tep_db_fetch_array($result2);

   $ll++;

  }

 }

 if ($dltype == 'froogle'){

  // For froogle, we check the specials prices for any applicable specials, and use that price

  // by grabbing the specials id descending, we always get the most recently added special price

  // I'm checking status because I think you can turn off specials

  $sql2 = "SELECT

    specials_new_products_price

   FROM

    ".TABLE_SPECIALS."

   WHERE

   products_id = " . $row['v_products_id'] . " and

   status = 1 and

   expires_date < CURRENT_TIMESTAMP

   ORDER BY

    specials_id DESC"

  ;

  $result2 = tep_db_query($sql2);

  $ll = 1;

  $row2 =  tep_db_fetch_array($result2);

  if( $row2 ){

   // reset the products price to our special price if there is one for this product

   $row['v_products_price']  = $row2['specials_new_products_price'];

  }

 }

 

 //elari -

 //We check the value of tax class and title instead of the id

 //Then we add the tax to price if $price_with_tax is set to 1

 $row_tax_multiplier   = tep_get_tax_class_rate($row['v_tax_class_id']);

 $row['v_tax_class_title']  = tep_get_tax_class_title($row['v_tax_class_id']);

 $row['v_products_price']  = round($row['v_products_price'] +

   ($price_with_tax * $row['v_products_price'] * $row_tax_multiplier / 100),2);

 

 

 // Now set the status to a word the user specd in the config vars

 if ( $row['v_status'] == '1' ){

  $row['v_status'] = $active;

 } else {

  $row['v_status'] = $inactive;

 }

 

 // remove any bad things in the texts that could confuse EasyPopulate

 $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_TIME=time();

$EXPORT_TIME = strftime('%Y%b%d-%H%I');

if ($dltype=="froogle"){

 $EXPORT_TIME = "FroogleEP" . $EXPORT_TIME;

} else {

 $EXPORT_TIME = "EP" . $EXPORT_TIME;

}

 

// now either stream it to them or put it in the temp directory

if ($download == 'stream'){

 //*******************************

 // STREAM FILE

 //*******************************

 header("Content-type: application/vnd.ms-excel");

 header("Content-disposition: attachment; filename=$EXPORT_TIME.txt");

// Changed if using SSL, helps prevent program delay/timeout (add to backup.php also)

// header("Pragma: no-cache");

if ($request_type== 'NONSSL'){

header("Pragma: no-cache");

} else {

header("Pragma: ");

}

 header("Expires: 0");

 echo $filestring;

 die();

} else {

 //*******************************

 // PUT FILE IN TEMP DIR

 //*******************************

 $tmpfname = DIR_FS_DOCUMENT_ROOT . $tempdir . "$EXPORT_TIME.txt";

 //unlink($tmpfname);

 $fp = fopen( $tmpfname, "w+");

 fwrite($fp, $filestring);

 fclose($fp);

 echo "You can get your file in the Tools/Files under " . $tempdir . "EP" . $EXPORT_TIME . ".txt";

 die();

}

}   // *** END *** download section

?>

 

<!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>

<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">

</head>

<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">

<?php require(DIR_WS_INCLUDES . 'header.php'); ?>

 

<table border="0" width="100%" cellspacing="2" cellpadding="2">

<tr>

<td width="<?php echo BOX_WIDTH; ?>" valign="top" height="27">

<table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">

<?php require(DIR_WS_INCLUDES . 'column_left.php');?>

</table></td>

<td class="pageHeading" valign="top"><?php

echo "Easy Populate $curver - Default Language : " . $epdlanguage_name . '(' . $epdlanguage_id .')';

?>

 

<p class="smallText">

 

<?php

 

if ($localfile or (is_uploaded_file($usrfl) && $split==0)) {

//*******************************

//*******************************

// UPLOAD AND INSERT FILE

//*******************************

//*******************************

 

if ($usrfl){

 // move the file to where we can work with it

 $file = tep_get_uploaded_file('usrfl');

 if (is_uploaded_file($file['tmp_name'])) {

  tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

 }

 

 echo "<p class=smallText>";

 echo "File uploaded. <br>";

 echo "Temporary filename: " . $usrfl . "<br>";

 echo "User filename: " . $usrfl_name . "<br>";

 echo "Size: " . $usrfl_size . "<br>";

 

 // get the entire file into an array

 $readed = file(DIR_FS_DOCUMENT_ROOT . $tempdir . $usrfl_name);

}

if ($localfile){

 // move the file to where we can work with it

 $file = tep_get_uploaded_file('usrfl');   $attribute_options_query = "select distinct products_options_id from " . TABLE_PRODUCTS_OPTIONS . " order by products_options_id";

 

  $attribute_options_values = tep_db_query($attribute_options_query);

 

  $attribute_options_count = 1;

  //while ($attribute_options = tep_db_fetch_array($attribute_options_values)){

 if (is_uploaded_file($file['tmp_name'])) {

  tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

 }

 

 echo "<p class=smallText>";

 echo "Filename: " . $localfile . "<br>";

 

 // get the entire file into an array

 $readed = file(DIR_FS_DOCUMENT_ROOT . $tempdir . $localfile);

}

 

// now we string the entire thing together in case there were carriage returns in the data

$newreaded = "";

foreach ($readed as $read){

 $newreaded .= $read;

}

 

// now newreaded has the entire file together without the carriage returns.

// if for some reason excel put qoutes around our EOREOR, remove them then split into rows

$newreaded = str_replace('"EOREOR"', 'EOREOR', $newreaded);

$readed = explode( $separator . 'EOREOR',$newreaded);

 

 

// Now we'll populate the filelayout based on the header row.

$theheaders_array = explode( $separator, $readed[0] ); // explode the first row, it will be our filelayout

$lll = 0;

$filelayout = array();

foreach( $theheaders_array as $header ){

 $cleanheader = str_replace( '"', '', $header);

// echo "Fileheader was $header<br><br><br>";

 $filelayout[ $cleanheader ] = $lll++; //

}

unset($readed[0]); //  we don't want to process the headers with the data

 

// now we've got the array broken into parts by the expicit end-of-row marker.

array_walk($readed, 'walk');

 

}

 

if (is_uploaded_file($usrfl) && $split==1) {

//*******************************

//*******************************

// UPLOAD AND SPLIT FILE

//*******************************

//*******************************

// move the file to where we can work with it

$file = tep_get_uploaded_file('usrfl');

//echo "Trying to move file...";

if (is_uploaded_file($file['tmp_name'])) {

 tep_copy_uploaded_file($file, DIR_FS_DOCUMENT_ROOT . $tempdir);

}

 

$infp = fopen(DIR_FS_DOCUMENT_ROOT . $tempdir . $usrfl_name, "r");

 

//toprow has the field headers

$toprow = fgets($infp,32768);

 

$filecount = 1;

 

echo "Creating file EP_Split" . $filecount . ".txt ...  ";

$tmpfname = DIR_FS_DOCUMENT_ROOT . $tempdir . "EP_Split" . $filecount . ".txt";

$fp = fopen( $tmpfname, "w+");

fwrite($fp, $toprow);

 

$linecount = 0;

$line = fgets($infp,32768);

while ($line){

 // walking the entire file one row at a time

 // but a line is not necessarily a complete row, we need to split on rows that have "EOREOR" at the end

 $line = str_replace('"EOREOR"', 'EOREOR', $line);

 fwrite($fp, $line);

 if (strpos($line, 'EOREOR')){

  // we found the end of a line of data, store it

  $linecount++; // increment our line counter

  if ($linecount >= $maxrecs){

   echo "Added $linecount records and closing file... <Br>";

   $linecount = 0; // reset our line counter

   // close the existing file and open another;

   fclose($fp);

   // increment filecount

   $filecount++;

   echo "Creating file EP_Split" . $filecount . ".txt ...  ";

   $tmpfname = DIR_FS_DOCUMENT_ROOT . $tempdir . "EP_Split" . $filecount . ".txt";

   //Open next file name

   $fp = fopen( $tmpfname, "w+");

   fwrite($fp, $toprow);

  }

 }

 $line=fgets($infp,32768);

}

echo "Added $linecount records and closing file...<br><br> ";

fclose($fp);

fclose($infp);

 

echo "You can download your split files in the Tools/Files under /catalog/temp/";

 

}

 

?>

     </p>

 

     <table width="75%" border="2">

       <tr>

         <td width="75%">

          <FORM ENCTYPE="multipart/form-data" ACTION="easypopulate.php?split=0" METHOD=POST>

             <p>

               <div align = "left">

               <p><b>Upload EP File</b></p>

               <p>

                 <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="100000000">

                 <p></p>

                 <input name="usrfl" type="file" size="50">

                 <input type="submit" name="buttoninsert" value="Insert into db"><br>

               </p>

             </div>

 

             </form>

 

          <FORM ENCTYPE="multipart/form-data" ACTION="easypopulate.php?split=1" METHOD=POST>

             <p>

               <div align = "left">

               <p><b>Split EP File</b></p>

               <p>

                 <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000000">

                 <p></p>

                 <input name="usrfl" type="file" size="50">

                 <input type="submit" name="buttonsplit" value="Split file"><br>

               </p>

             </div>

 

            </form>

 

          <FORM ENCTYPE="multipart/form-data" ACTION="easypopulate.php" METHOD=POST>

             <p>

               <div align = "left">

               <p><b>Import from Temp Dir (<? echo $tempdir; ?>)</b></p>

 <p class="smallText">

 <INPUT TYPE="text" name="localfile" size="50">

                 <input type="submit" name="buttoninsert" value="Insert into db"><br>

               </p>

             </div>

 

            </form>

 

 

 

 

 <p><b>Download EP and Froogle Files</b></p>

 

      <!-- Download file links -  Add your custom fields here -->

  <a href="easypopulate.php?download=stream&dltype=full">Download <b>Complete</b> tab-delimited .txt file to edit</a><br>

  <a href="easypopulate.php?download=stream&dltype=priceqty">Download <b>Model/Price/Qty</b> tab-delimited .txt file to edit</a><br>

  <a href="easypopulate.php?download=stream&dltype=category">Download <b>Model/Category</b> tab-delimited .txt file to edit</a><br>

  <a href="easypopulate.php?download=stream&dltype=froogle">Download <b>Froogle</b> tab-delimited .txt file</a><br>

 

  <!-- VJ product attributes begin //-->

<?php

 if ($products_with_attributes == true) {

?>

  <a href="easypopulate.php?download=stream&dltype=attrib">Download <b>Model/Attributes</b> tab-delimited .txt file</a><br>

<?php

 }

?>

  <!-- VJ product attributes end //-->

 

 <p><b>Create EP and Froogle Files in Temp Dir (<? echo $tempdir; ?>)</b></p>

  <a href="easypopulate.php?download=tempfile&dltype=full">Create Complete tab-delimited .txt file in temp dir</a><br>

         <a href="easypopulate.php?download=tempfile&dltype=priceqty"">Create Model/Price/Qty tab-delimited .txt file in temp dir</a><br>

         <a href="easypopulate.php?download=tempfile&dltype=category">Create Model/Category tab-delimited .txt file in temp dir</a><br>

  <a href="easypopulate.php?download=tempfile&dltype=froogle">Create Froogle tab-delimited .txt file in temp dir</a><br>

 

  <!-- VJ product attributes begin //-->

  <a href="easypopulate.php?download=tempfile&dltype=attrib">Create Model/Attributes tab-delimited .txt file in temp dir</a><br>

  <!-- VJ product attributes end //-->

 

  </td>

</tr>

     </table>

   </td>

</tr>

</table>

 

<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>

 

<p>?</p>

<p>?</p><p><br>

</p></body>

</html>

 

<?php

 

function ep_get_languages() {

$languages_query = tep_db_query("select languages_id, code from " . TABLE_LANGUAGES . " order by sort_order");

// start array at one, the rest of the code expects it that way

$ll =1;

while ($ep_languages = tep_db_fetch_array($languages_query)) {

 //will be used to return language_id en language code to report in product_name_code instead of product_name_id

 $ep_languages_array[$ll++] = array(

    'id' => $ep_languages['languages_id'],

    'code' => $ep_languages['code']

    );

}

return $ep_languages_array;

};

 

function tep_get_tax_class_rate($tax_class_id) {

$tax_multiplier = 0;

$tax_query = tep_db_query("select SUM(tax_rate) as tax_rate from " . TABLE_TAX_RATES . " WHERE  tax_class_id = '" . $tax_class_id . "' GROUP BY tax_priority");

if (tep_db_num_rows($tax_query)) {

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

  $tax_multiplier += $tax['tax_rate'];

 }

}

return $tax_multiplier;

};

 

function tep_get_tax_title_class_id($tax_class_title) {

$classes_query = tep_db_query("select tax_class_id from " . TABLE_TAX_CLASS . " WHERE tax_class_title = '" . $tax_class_title . "'" );

$tax_class_array = tep_db_fetch_array($classes_query);

$tax_class_id = $tax_class_array['tax_class_id'];

return $tax_class_id;

}

 

function print_el( $item2 ) {

echo " | " . substr(strip_tags($item2), 0, 10);

};

 

function print_el1( $item2 ) {

echo sprintf("| %'.4s ", substr(strip_tags($item2), 0, 80));

};

function ep_create_filelayout($dltype){

global $filelayout, $filelayout_count, $filelayout_sql, $langcode, $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.

switch( $dltype ){

case 'full':

 // The file layout is dynamically made depending on the number of languages

 $iii = 0;

 $filelayout = array(

  'v_products_model'  => $iii++,

  'v_products_image'  => $iii++,

  );

 

 foreach ($langcode as $key => $lang){

  $l_id = $lang['id'];

  // uncomment the head_title, head_desc, and head_keywords to use

  // Linda's Header Tag Controller 2.0

  //echo $langcode['id'] . $langcode['code'];

  $filelayout  = array_merge($filelayout , array(

    'v_products_name_' . $l_id  => $iii++,

 

//                                    'v_products_name_' . $l_id  => $iii++,

    'v_products_description_' . $l_id => $iii++,

    'v_products_url_' . $l_id => $iii++,

    'v_products_head_title_tag_'.$l_id => $iii++,

    'v_products_head_desc_tag_'.$l_id => $iii++,

    'v_products_head_keywords_tag_'.$l_id => $iii++,

    ));

 }

 

 

 // uncomment the customer_price and customer_group to support multi-price per product contrib

 

   // VJ product attribs begin

    $header_array = array(

  'v_products_price'  => $iii++,

  'v_products_weight'  => $iii++,

  'v_date_avail'   => $iii++,

  'v_date_added'   => $iii++,

  'v_products_quantity'  => $iii++,

  );

 

  $languages = tep_get_languages();

 

     global $attribute_options_array;

 

     $attribute_options_count = 1;

     foreach ($attribute_options_array as $attribute_options_values) {

   $key1 = 'v_attribute_options_id_' . $attribute_options_count;

   $header_array[$key1] = $iii++;

 

       for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

         $l_id = $languages[$i]['id'];

 

    $key2 = 'v_attribute_options_name_' . $attribute_options_count . '_' . $l_id;

    $header_array[$key2] = $iii++;

   }

 

   $attribute_values_query = "select products_options_values_id  from " . TABLE_PRODUCTS_OPTIONS_VALUES_TO_PRODUCTS_OPTIONS . " where products_options_id = '" . (int)$attribute_options_values['products_options_id'] . "' order by products_options_values_id";

 

   $attribute_values_values = tep_db_query($attribute_values_query);

 

   $attribute_values_count = 1;

   while ($attribute_values = tep_db_fetch_array($attribute_values_values)) {

    $key3 = 'v_attribute_values_id_' . $attribute_options_count . '_' . $attribute_values_count;

    $header_array[$key3] = $iii++;

 

    $key4 = 'v_attribute_values_price_' . $attribute_options_count . '_' . $attribute_values_count;

    $header_array[$key4] = $iii++;

 

    for ($i=0, $n=sizeof($languages); $i<$n; $i++) {

     $l_id = $languages[$i]['id'];

 

     $key5 = 'v_attribute_values_name_' . $attribute_options_count . '_' . $attribute_values_count . '_' . $l_id;

     $header_array[$key5] = $iii++;

    }

 

    $attribute_values_count++;

   }

 

   $attribute_options_count++;

    }

 

   $header_array['v_manufacturers_name'] = $iii++;

 

   $filelayout = array_merge($filelayout, $header_array);

   // VJ product attribs end

 

 // build the categories name section of the array based on the number of categores the user wants to have

 for($i=1;$i<$max_categories+1;$i++){

  $filelayout = array_merge($filelayout, array('v_categories_name_' . $i => $iii++));

 }

 

 $filelayout = array_merge($filelayout, array(

  'v_tax_class_title'  => $iii++,

  'v_status'   => $iii++,

  ));

 

 $filelayout_sql = "SELECT

  p.products_id as v_products_id,

  p.products_model as v_products_model,

  p.products_image as v_products_image,

  p.products_price as v_products_price,

  p.products_weight as v_products_weight,

  p.products_date_available as v_date_avail,

  p.products_date_added as v_date_added,

  p.products_tax_class_id as v_tax_class_id,

  p.products_quantity as v_products_quantity,

  p.manufacturers_id as v_manufacturers_id,

  subc.categories_id as v_categories_id,

  p.products_status as v_status

  FROM

  ".TABLE_PRODUCTS." as p,

  ".TABLE_CATEGORIES." as subc,

  ".TABLE_PRODUCTS_TO_CATEGORIES." as ptoc

  WHERE

  p.products_id = ptoc.products_id AND

  ptoc.categories_id = subc.categories_id

  ";

 

 break;

case 'priceqty':

 $iii = 0;

 // uncomment the customer_price and customer_group to support multi-price per product contrib

 $filelayout = array(

  'v_products_model'  => $iii++,

  'v_products_price'  => $iii++,

  'v_products_quantity'  => $iii++,

  #'v_customer_price_1'  => $iii++,

  #'v_customer_group_id_1'  => $iii++,

  #'v_customer_price_2'  => $iii++,

  #'v_customer_group_id_2'  => $iii++,

  #'v_customer_price_3'  => $iii++,

  #'v_customer_group_id_3'  => $iii++,

  #'v_customer_price_4'  => $iii++,

  #'v_customer_group_id_4'  => $iii++,

   );

 $filelayout_sql = "SELECT

  p.products_id as v_products_id,

  p.products_model as v_products_model,

  p.products_price as v_products_price,

  p.products_tax_class_id as v_tax_class_id,

  p.products_quantity as v_products_quantity

  FROM

  ".TABLE_PRODUCTS." as p

  ";

 

 break;

 

case 'category':

 // The file layout is dynamically made depending on the number of languages

 $iii = 0;

 $filelayout = array(

  'v_products_model'  => $iii++,

 );

 

 // build the categories name section of the array based on the number of categores the user wants to have

 for($i=1;$i<$max_categories+1;$i++){

  $filelayout = array_merge($filelayout, array('v_categories_name_' . $i => $iii++));

 }

 

 

 $filelayout_sql = "SELECT

  p.products_id as v_products_id,

  p.products_model as v_products_model,

  subc.categories_id as v_categories_id

  FROM

  ".TABLE_PRODUCTS." as p,

  ".TABLE_CATEGORIES." as subc,

  ".TABLE_PRODUCTS_TO_CATEGORIES." as ptoc  

  WHERE

  p.products_id = ptoc.products_id AND

  ptoc.categories_id = subc.categories_id

  ";

 break;

 

case 'froogle':

 // this is going to be a little interesting because we need

 // a way to map from internal names to external names

 //

 // Before it didn't matter, but with froogle needing particular headers,

 // The file layout is dynamically made depending on the number of languages

 $iii = 0;

 $filelayout = array(

  'v_froogle_products_url_1'   => $iii++,

  );

 //

 // here we need to get the default language and put

 $l_id = 1; // dummy it in for now.

//  foreach ($langcode as $key => $lang){

//   $l_id = $lang['id'];

  $filelayout  = array_merge($filelayout , array(

    'v_froogle_products_name_' . $l_id  => $iii++,

    'v_froogle_products_description_' . $l_id => $iii++,

    ));

//  }

 $filelayout  = array_merge($filelayout , array(

  'v_products_price'  => $iii++,

  'v_products_fullpath_image' => $iii++,

  'v_category_fullpath'  => $iii++,

  'v_froogle_offer_id'  => $iii++,

//   'v_froogle_instock'  => $iii++,

//   'v_froogle_ shipping'  => $iii++,

//   'v_manufacturers_name'  => $iii++,

//   'v_froogle_ upc'  => $iii++,

//   'v_froogle_color' &n


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites

Greetings,

Having problems uploading file. When I try I get this message.

 

Warning: move_uploaded_file(/var/www/html/temp/EP2004Oct24-1402.txt): failed to open stream: No such file or directory in /var/www/html/catalog/admin/easypopulate_functions.php on line 32

Warning: move_uploaded_file(): Unable to move '/tmp/phpgX872d' to '/var/www/html/temp/EP2004Oct24-1402.txt' in /var/www/html/catalog/admin/easypopulate_functions.php on line 32

File uploaded. 
Temporary filename: /tmp/phpgX872d
User filename: EP2004Oct24-1402.txt
Size: 88852
Warning: file(/var/www/html/temp/EP2004Oct24-1402.txt): failed to open stream: No such file or directory in /var/www/html/catalog/admin/easypopulate.php on line 657

Warning: Invalid argument supplied for foreach() in /var/www/html/catalog/admin/easypopulate.php on line 680

 

The permissions for the temp file are all writable.

Share this post


Link to post
Share on other sites

what do you have setup for your temp file for ep? what are the file permissions?

 

read thru the top of ep for the settings, make sure they match for your system


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites
what do you have setup for your temp file for ep?  what are the file permissions?

 

read thru the top of ep for the settings, make sure they match for your system

 

My temp file is in catalog/temp. Permissions are set to be able to write to. The easypopulate.php file is set at the default ie:

$tempdir = "temp/";
$tempdir2 = "temp/";

 

Anything else I should be looking for?

Share this post


Link to post
Share on other sites
if you access your store via http://www.mydomain.com/catalog then the temp needs to be /catalog/temp/

 

Brillant ! that fixed it. Seems to work now.

 

Also some questions.

1. Im presuming you have to manually delete items? Uploading a EP file would just add and alter items. Correct?

2. You have to create catagories manually?- correct?

3. I was wanting to put up a catalog of items on my site for peolpe to make preorders which I could them order from a distributor and remove and replace the preorder catalog every month. Is their some way to downlaod a txt file of all products ordered and quantity over a time period?

 

thanks

Share this post


Link to post
Share on other sites

1. yes you have to manually delete.

2. no field named v_category_name, default installation of ep has 3 columns, with one the main, and the others are subcategories off the main, ie category1, subcategory1, subcategory1-1

3. not understanding completely, to export data from any of the tables i use mysql odbc from mysql.com and then import the data into excel or into access and then can do anything you want with it.


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites

Can anyone privide any feedback on this?

 

I need to get this resolve before implamenting as a production server.

 

Thanks

 

 

Here is another example:

 

When executing the "Download Model/Price/Qty tab-delimited .txt file to edit

" in the Easy Populate (which runs the priceqty dltype function), I get the pricing for the different groups.

 

Where the problem relies is when I try to update the DB using Easy Populate "Upload EP File". The screen comes back and gives me

File uploaded. 
Temporary filename: /tmp/phpgM0x1y
User filename: priceqty.txt
Size: 1079
| MG200MMS | 299.99 | 32 | 185 | 1 Updated
1062 - Duplicate entry '1' for key 1

INSERT INTO products_groups VALUES ( 1, 185, 1, 299.99 )

[TEP STOP]

 

What does this realy mean?

 

From what I can understand, and I am far from being a PHP wiz, is that there should be some kind of function running during an upload that looks at the "table_products_groups" and looks to see if there is an entry at "v_customer_price_1 and v_customer_group_id_1" and if there is, it should delete it from the table and insert the info in the uploaded file to the table.

 

Am I far away from the actual issue?

Share this post


Link to post
Share on other sites

#1 easy populate DOES NOT DELETE PRODUCT per the documentation.

#2 as you are using a contribution for customer groups, etc you must set the fields in easy populate to match.

easypopulate will do the data from an untouched version of osCommerce, once you add contributions then you must add the respective fields.


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites
#1 easy populate DOES NOT DELETE PRODUCT per the documentation.

#2 as you are using a contribution for customer groups, etc you must set the fields in easy populate to match.

easypopulate will do the data from an untouched version of osCommerce, once you add contributions then you must add the respective fields.

 

Ok, but from my posted easypopulate.php file, can you tell me what is missing? or wrong? I can't for the love of god figure out what is screwed up...

 

 

Thanks

Share this post


Link to post
Share on other sites

yes, this:

INSERT INTO products_groups VALUES ( 1, 185, 1, 299.99 )

 

#2 as you are using a contribution for customer groups, etc you must set the fields in easy populate to match.


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites

Hi Mibble! as per my question here (http://forums.oscommerce.com/index.php?showtopic=118188&st=0entry471349), I'm answering in this thread...

 

In the EP txt file, the v_products_image field contains the filename of my items' photo. Other than eliminating fields I don't use (such as all the German size, color, etc..), I make no other changes to the default EP txt file downloaded from the easypopulate.php page.

 

When I add the photo manually to a new item uploaded without EP, I choose the filename of the photo for the first of the three possible image sizes and it fills in that same filename throughout as soon as I hit "preview" -- i.e. the system resizes that single photo as needed throughout the pages instead of using 3 different photos, whether as a thumbnail on the front page, a medium sized-photo in the product's own page, or the "large" -- full sized, pixel-wise -- "click to enlarge" photo.

 

Thanks in advance for your help!


Shannon Okey

Share this post


Link to post
Share on other sites
yes, this:

INSERT INTO products_groups VALUES ( 1, 185, 1, 299.99 )

 

#2 as you are using a contribution for customer groups, etc you must set the fields in easy populate to match.

 

They are in the file !

 

They may not be at the correct location but thats what i need to know.

Share this post


Link to post
Share on other sites

Greetings from Mozambique!

 

I'm having a problem with this contribution. I am certain it is because I have More-Pics_6.0 installed, but I can't seem to figure out the problem. I am receiving this error:

 

Parse error: parse error, unexpected T_VARIABLE in /home/httpd/vhosts/artmozambique.com/httpdocs/admin/easypopulate.php on line 1733

 

Line 1733 is the first line after the subimages query.

$query .=" '$v_products_price',

 

Here is my code:

 

 	 $query = "INSERT INTO ".TABLE_PRODUCTS." (
  	 products_model,
  	 products_image,
  	 products_subimage1
  	 products_subimage2
  	 products_subimage3
  	 products_subimage4
  	 products_subimage5
  	 products_subimage6,
  	 products_price,
  	 products_status,
  	 products_last_modified,
  	 products_date_added,
  	 products_date_available,
  	 products_tax_class_id,
  	 products_weight,
  	 products_quantity,
  	 manufacturers_id)
     VALUES (
    	 '$v_products_model',
    	 '$v_products_image',";

	 // unmcomment these lines if you are running the image mods

   $query .=  //. $v_products_mimage . '", "'
    	 //. $v_products_bimage . '", "'
       $v_products_subimage1 . '", "'
    	 //. $v_products_bsubimage1 . '", "'
    	 . $v_products_subimage2 . '", "'
    	 //. $v_products_bsubimage2 . '", "'
    	 . $v_products_subimage3 . '", "'
    	 //. $v_products_bsubimage3 . '", "'
    	 . $v_products_subimage4 . '", "'
    	 . $v_products_subimage5 . '", "'
    	 . $v_products_subimage6 . '", "'

	 $query .=" 	 '$v_products_price',
       '$v_db_status',
       CURRENT_TIMESTAMP,
       $v_date_added,
       $v_date_avail,
       '$v_tax_class_id',
       '$v_products_weight',
       '$v_products_quantity',
       '$v_manufacturer_id')
    	 ";

 

I have tried all types of combinations & orders for the query, but am having zero success. It continues to give me problems. Any ideas?


He who joyfully marches in rank and file has already earned my contempt. He has been given a large brain by mistake, since for him the spinal cord would suffice.

- Albert Einstein

Share this post


Link to post
Share on other sites

1062 - Duplicate entry '1' for key 1

 

INSERT INTO products_groups VALUES ( 1, 16, 895, 19.99 )

 

 

 

This is the error I get after downloading the EP file, adding price to the v_customer_price_1 column

and adding group ID # to v_customer_group_id_1 column which in my case, there is only 1 added group which is Dealer and the DB says it's Group ID # 1 so this is what I add to that column and upload the file back to the DB via EP.

 

This is where is fails ! When downloading, it brings the columns for the individual pricing but that's where it crashes !

 

 

PLEASE ! Can't anyone help me on this?

 

This is the only thing that does not work, and updating every single 1500+ items individualy would take me a few weeks!

 

Please someone help a desprate man !

 

This is where ... I THINK .... is screwed up but this is the original code and has not been modified. So was easypopulate actualy tested with the individual pricing MOD?

if (isset($v_customer_price_1)){

                       if (($v_customer_group_id_1 == '') AND ($v_customer_price_1 != ''))  {
                               echo "<font color=red>ERROR - v_customer_group_id and v_customer_price must occur in pairs</font>";
                               die();
                       }
                       // they spec'd some prices, so clear all existing entries
                       $result = tep_db_query('
                                               DELETE
                                               FROM
                                                       '.TABLE_PRODUCTS_GROUPS.'
                                               WHERE
                                                       products_id = ' . $v_products_id
                                               );
                       // and insert the new record
                       if ($v_customer_price_1 != ''){
                               $result = tep_db_query('
                                                       INSERT INTO
                                                               '.TABLE_PRODUCTS_GROUPS.'
                                                       VALUES
                                                       (
                                                               ' . $v_customer_group_id_1 . ',
                                                               ' . $v_customer_price_1 . ',
                                                               ' . $v_products_id . ',
                                                               ' . $v_products_price .'
                                                               )'
                                                       );
                       }

Share this post


Link to post
Share on other sites

if you check your database, the group id's are probably an auto increment value in the field, (the same as product id's are auto increment) thus you can not overwrite a value already there, you will need to modify the code to delete the group id you want to change and then insert the value.

 

i have no idea if the pricing was tested, someone did a mod which said they worked for prices (have to look at the ep download for that) and go from there.


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites

It is not in auto-increment. Again, see the table setup in the DB:

-- 
-- Table structure for table `products_groups`
-- 

CREATE TABLE `products_groups` (
 `customers_group_id` int(11) NOT NULL default '0',
 `customers_group_price` decimal(15,4) NOT NULL default '0.0000',
 `products_id` int(11) NOT NULL default '0',
 `products_price` decimal(15,4) NOT NULL default '0.0000',
 PRIMARY KEY  (`customers_group_id`)
) TYPE=MyISAM;

-- 
-- Dumping data for table `products_groups`
-- 

INSERT INTO `products_groups` VALUES (1, 799.0000, 823, 899.9900);

 

Can you see how to modify the code to have it delete the line and re-add it instead of updating? That would fix the problem in it's entety but I dont know how to acheive or build that code and where to put it.

 

if you check your database, the group id's are probably an auto increment value in the field, (the same as product id's are auto increment) thus you can not overwrite a value already there, you will need to modify the code to delete the group id you want to change and then insert the value.

 

i have no idea if the pricing was tested, someone did a mod which said they worked for prices (have to look at the ep download for that) and go from there.

Share this post


Link to post
Share on other sites

Hello all.

 

I have Mo' Pics 6.0 installed and for some reason I am not getting the products_subimage1, products_subimage2, etc. in my download. I have uncommented all the areas where subimage exists and have added subimage3, 4 and 5 where necessary. Does the download not include these fields?

 

I have this version:

 

/*

$Id: easypopulate.php,v 2.74 2004/05/03 VJ Exp $

*/


He who joyfully marches in rank and file has already earned my contempt. He has been given a large brain by mistake, since for him the spinal cord would suffice.

- Albert Einstein

Share this post


Link to post
Share on other sites

adding code to delete a product is not the easiest thing to do, i dont have the time to do it, as i have lots of other work i am doing.

 

It is not in auto-increment. Again, see the table setup in the DB:

-- 
-- Table structure for table `products_groups`
-- 

CREATE TABLE `products_groups` (
?`customers_group_id` int(11) NOT NULL default '0',
?`customers_group_price` decimal(15,4) NOT NULL default '0.0000',
?`products_id` int(11) NOT NULL default '0',
?`products_price` decimal(15,4) NOT NULL default '0.0000',
?PRIMARY KEY ?(`customers_group_id`)
) TYPE=MyISAM;

-- 
-- Dumping data for table `products_groups`
-- 

INSERT INTO `products_groups` VALUES (1, 799.0000, 823, 899.9900);

 

Can you see how to modify the code to have it delete the line and re-add it instead of updating? That would fix the problem in it's entety but I dont know how to acheive or build that code and where to put it.


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites
use my example at post 901 for your images.  there are additional fields added in there, so you will need to modify to your site.

 

Thanks, John. I used your post in 901, but my download is still not including additional fields from the DB (like subimages). It works fine otherwise, but I'm not having much success with the subimages.

 

Did you know that your post in 901 is not the entire php file? Probably, but I wanted to verify.

 

Cheers,

Jonathan


He who joyfully marches in rank and file has already earned my contempt. He has been given a large brain by mistake, since for him the spinal cord would suffice.

- Albert Einstein

Share this post


Link to post
Share on other sites

i will post portions at a time, by looking in the file you can see where the tables need to be added:

// these are the fields that will be defaulted to the current values in the database if they are not found in the incoming file
global $default_these;
$default_these = array(
'v_products_image',
'v_products_mimage',
'v_products_bimage',
'v_products_subimage1',
'v_products_bsubimage1',
'v_products_subimage2',
'v_products_bsubimage2',
'v_products_subimage3',
'v_products_bsubimage3',
'v_categories_id',
'v_products_price',
'v_products_quantity',
'v_products_weight',
'v_dvd_star',
'v_dvd_director',
'v_dvd_release_date',
'v_dvd_type',
'v_dvd_features',
'v_dvd_studio',
'v_dvd_categories',
'v_dvd_movie_length',
'v_dvd_also_available',
'v_products_bimage',
'v_products_subimage1',
'v_products_bsubimage1',
'v_date_avail',
'v_instock',
'v_tax_class_title',
'v_manufacturers_name',
'v_manufacturers_id',
'v_products_dim_type',
'v_products_length',
'v_products_width',
'v_products_height'
);


John Oligario

 

Knowledge Base Contributions

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×