Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

Images not uploading


dmcpont

Recommended Posts

This worked before, both for people who were uploading products to a subdirectory using the product edit/new product page and for people who were ftp'ing the image to the server after specifying that location on the screen. The sample osCommerce database has its images in subdirectories of the images directory so I have to assume that what we are doing is supported. Do you have any idea why this would stop working all of a sudden.

 

Also, do you know what variable is holding the name of the image that you type into the screen (so we can at least try to come up with a workaround to this until it is resolved)? So far in our debugging, nothing we echo out to the screen shows the value we have typed into the screen.

 

Thanks!

Link to comment
Share on other sites

  • Replies 52
  • Created
  • Last Reply

Technically what I described above is how it is meant to work.

 

Here is the code in admin/categories.php that handles the file upload:

 

 ? ? ? ?$products_image = new upload('products_image');
? ? ? ?$products_image->set_destination(DIR_FS_CATALOG_IMAGES);
? ? ? ?if ($products_image->parse() && $products_image->save()) {
? ? ? ? ?$products_image_name = $products_image->filename;
? ? ? ?} else {
? ? ? ? ?$products_image_name = (isset($HTTP_POST_VARS['products_previous_image']) ? $HTTP_POST_VARS['products_previous_image'] : '');
? ? ? ?}

 

The form element for the product image is of type FILE, not of type INPUT, and is the reason why there is a button next to it so that a file can be selected for upload. This form field element is called "products_image" and is available in the $HTTP_POST_FILES variable as $HTTP_POST_FILES["products_image"].

 

The osCommerce file upload class takes care of managing the uploaded file, and sets the destination directory to DIR_FS_CATALOG_IMAGES, which is normally the catalog/images/ directory.

 

Technically it should not be possible to provide a sub directory, as the file upload class takes the name of the uploaded file and appends it to the defined destination, so it becomes something like this:

 

DIR_FS_CATALOG_IMAGES + $products_image->filename

 

($products_image is the instance of the file upload class)

 

Here is some documentation on the file upload class:

 

http://www.oscommerce.info/kb/osCommerce/D...opers/Classes/9

:heart:, osCommerce

Link to comment
Share on other sites

Currently, the only place where the destination can be selected is when editing or creating a new banner. There you have the option of uploading a new banner, defining its destination, or defining an already existing image on the server.

 

Whereas on the product edit page, you currently only have the option to upload an image which gets stored in DIR_FS_CATALOG_IMAGES.

 

This is also in regard to a stock osCommerce installation with no contributions installed. (Paul, your installation didn't look like it had contributions installed)

:heart:, osCommerce

Link to comment
Share on other sites

I just checked the PHP 4.3.7 changelog and came across the following bug fix:

 

http://bugs.php.net/bug.php?id=28456

 

If that plays a role, then yes, defining a subdirectory on the product edit page has been a fluke :)

 

Here is the 4.3.7 changelog, though no other changes seem to be of interest to this problem:

 

http://www.php.net/ChangeLog-4.php#4.3.7

:heart:, osCommerce

Link to comment
Share on other sites

Ok, now that we know it was a fluke, I have a couple of questions:

 

1. The sample database came with images in subdirectories - how was this accomplished - is there a contribution?

 

2. Assuming there is not a contribution, how would you suggest we alter the admin side to allow the use of subdirectories while not affecting the catalog side (meaning that we keep the data stored the same way it is now with both the subdir and image name in the products_image field)?

 

Thanks!

Link to comment
Share on other sites

Hi Harold

 

Thanks for the investigation :)

 

Well two things , yes I do have contributions,

HTML area, CVV, NZ Bank deposit , Center Shop are some of them.

 

So with regards to PHP, and OSC is there a way you can impliment being able to specify a subdirectory in the future.

I have over 6000 items and dont want all my images in one folder called images.

 

Will you please add the option to do this your already huge work load :)

 

I am sure it will be a huge help to many.

 

Kind regards

Paul Fahey

Link to comment
Share on other sites

It is possible to define subdirectories for product images - but so far only manually when editing the products.products_image field value (which is why there are products in subdirectories as standard).

 

There is no way to do it in the Administration Tool though and is a current limitation that will be fixed in the next release.

 

Here are some code changes for admin/categories.php that will allow you to define a subdirectory. It is untested though should work if my mighty powers still function at 3AM in the morning correctly, and hope someone can spice it up and forward it to the Tips and Tricks forum channel :)

 

Line 315, change from:

 

$products_image->set_destination(DIR_FS_CATALOG_IMAGES);

 

to:

 

$products_image->set_destination(DIR_FS_CATALOG_IMAGES . $HTTP_POST_VARS['products_image_destination']);

 

Line 317, change from:

 

$products_image_name = $products_image->filename;

 

to:

 

$products_image_name = $HTTP_POST_VARS['products_image_destination'] . $products_image->filename;

 

After lines 562-565, add:

 

 ? ? ? ? ?<tr>
? ? ? ? ? ?<td class="main">Image Destination Directory</td>
? ? ? ? ? ?<td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . DIR_FS_CATALOG_IMAGES . tep_draw_input_field('products_image_destination'); ?></td>
? ? ? ? ?</tr>

 

Please note that this is only for uploading new images, not for defining existing images, and that the directory must be writeable (there is no error checking here for the subcategory). The subdirectory value must also end with a /

 

Hope that helps!

 

[Edited post to reflect line 317]

:heart:, osCommerce

Link to comment
Share on other sites

My version of categories.php is a little different than that (version 1.14) but I changed the product image upload code to be similar to the category image upload code (which looks like what you have in your suggested changes below) so the changes would work. Now I am again able to enter an image name and directory and either upload it using the product edit screen OR ftp it over after specifying the directory and filename.

 

Much appreciated!!!

Link to comment
Share on other sites

Harold,

 

I'm somewhat confused, as the problem I described that began roughly the first week or two in June (coinciding with PHP 4.3.7 upgrade) has nothing to do with subdirectories as I don't use them for images. No changes had been made in the osC code on that site for months, and it was working properly a week prior. My earlier posts in this thread describe it in detail. I'm at a dead end debugging this (perhaps at least for my skills). Something has definitely changed but since I don't know what for sure, I'm not able to fix it with any assurance. Thanks for any input.

 

David

Link to comment
Share on other sites

I've been having the same problem for months (if I understand correctly). I cannot specify/upload an image from the add product page in admin. It doesn't get stored. When trying to "change" an image for an existing product, it either does nothing to the record (old image) or if it is an existing image that I'm adding, it changes the image to a blank file with 0k and naturally any product using that same image shows up with red x images.

 

I've become used to adding the product through admin without an image and then going to the database and entering the image there. Don't have time to fuss with it. Easy populate works okay when adding images, but for some reason the admin add/edit product pages just don't work for me.

Link to comment
Share on other sites

Yes, there is definitely something to this. I wonder if people who don't do a lot of product edits/adds should go try to upload a pic and see what happens. This might show it is more widespread still.

 

David

Link to comment
Share on other sites

Have you tried deleting the image file on the server first before uploading your new one.

That has worked for me in the past when I couldnt over write the existing file 0k

 

Cheers

Paul

Link to comment
Share on other sites

  • 2 weeks later...

:(

Hi all, I am having the same problem. It just happened, I am sure of it.

I Cannot change or insert new images.

I have tried all the suggestions above. Still stuck.

If I cant fix this, my boss will go nuts. His business relies on it.

 

I have emailed my tech support crew where the site is hosted aswell. I am panicking a bit.

 

My site is at: www.lambley.com.au/catalog

 

Thanks,

Josh.

Link to comment
Share on other sites

  • 5 weeks later...

:o So it's a fluke in the latest release....

How do I get the existing product images to show.

 

There is way too many to do manually.

 

The code patch that you give for new images is fine? But is there a fix for the existing images...

 

Last Tuesday, Sept 1, my isp move my sites to another site... the database connection didn't work and something went south with the isp auto installer...bottom line the store opening... has been on hold for a week now.

 

At this point my name is on the owner's list in pencil...

 

Help!

 

How do I get these 500 plus images to show?

 

thanks in advance

Link to comment
Share on other sites

whats the url?

 

did you do a back up of the database?

did they actually move all the jpg files into the new site directory and have you set the permissions to 777?

 

tell me what the url is for one of the images?

 

cheers

Paul

Link to comment
Share on other sites

Hi Paul,

 

thank you for replying...

 

the answers is yes, yes, yes,

 

 

however, it is not working...

 

I even tried indexing the product images in the database... I can see them... in the base that is...

 

What's up... I've been searching the forum and all the community resources for a quick fix to this problem...

 

Only to find that a number of people are all having a very similar problem, images not appear on an update or new install.

 

This may simply be a configuration problem... new server, new bulid, and a myrid of unknowns.... :unsure:

Link to comment
Share on other sites

  • 3 weeks later...

Hi,

 

Thanks Harold i've been wondering if this problem is as part of a change i've made, but have now found it to definately be a problem caused by php >4.3.7 (my host is on 4.3.8).

 

Although it's a bit more hassle to write in the sub-dirs rather than just changing the \ to a / at least it now works again!

 

I'd just like to mention that as some of my changes to admin/categories.php were over 100 lines out the final code change is to insert:

 

<tr>

<td class="main">Image Destination Directory</td>

<td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . DIR_FS_CATALOG_IMAGES . tep_draw_input_field('products_image_destination'); ?></td>

</tr>

 

above:

 

<tr>

<td class="main"><?php echo TEXT_PRODUCTS_IMAGE; ?></td>

 

Also, when specifying the destination path you need to include a trailing / otherwise you end up with the image being uploaded as subdirimagename.jpg instead of subdir/imagename.jpg!

 

Thanks

 

Also, how far off is the next version with this among many other features? :-)

Link to comment
Share on other sites

  • 2 weeks later...

I don't know much when it come to php. I have the same problem with sub_directory and looking at your post it's look greek to me. Here is my code, I change as suggested but the problem is still there. PHP Version: 4.3.8 (Zend: 1.3.0). Any help would be appreciated. Thanks.

 

 

 

 

<?php

/*

 $Id: categories.php,v 1.146 2003/07/11 14:40:27 hpdl Exp $

 

 osCommerce, Open Source E-Commerce Solutions

 http://www.oscommerce.com

 

 Copyright (c) 2003 osCommerce

 

 Released under the GNU General Public License

*/

 

 require('includes/application_top.php');

 

 require(DIR_WS_CLASSES . 'currencies.php');

 $currencies = new currencies();

 

 $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : '');

 

 if (tep_not_null($action)) {

   switch ($action) {

     case 'setflag':

       if ( ($HTTP_GET_VARS['flag'] == '0') || ($HTTP_GET_VARS['flag'] == '1') ) {

         if (isset($HTTP_GET_VARS['pID'])) {

           tep_set_product_status($HTTP_GET_VARS['pID'], $HTTP_GET_VARS['flag']);

         }

 

         if (USE_CACHE == 'true') {

           tep_reset_cache_block('categories');

           tep_reset_cache_block('also_purchased');

         }

       }

 

       tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $HTTP_GET_VARS['cPath'] . '&pID=' . $HTTP_GET_VARS['pID']));

       break;

     case 'insert_category':

     case 'update_category':

       if (isset($HTTP_POST_VARS['categories_id'])) $categories_id = tep_db_prepare_input($HTTP_POST_VARS['categories_id']);

       $sort_order = tep_db_prepare_input($HTTP_POST_VARS['sort_order']);

 

       $sql_data_array = array('sort_order' => $sort_order);

 

       if ($action == 'insert_category') {

         $insert_sql_data = array('parent_id' => $current_category_id,

                                  'date_added' => 'now()');

 

         $sql_data_array = array_merge($sql_data_array, $insert_sql_data);

 

         tep_db_perform(TABLE_CATEGORIES, $sql_data_array);

 

         $categories_id = tep_db_insert_id();

       } elseif ($action == 'update_category') {

         $update_sql_data = array('last_modified' => 'now()');

 

         $sql_data_array = array_merge($sql_data_array, $update_sql_data);

 

         tep_db_perform(TABLE_CATEGORIES, $sql_data_array, 'update', "categories_id = '" . (int)$categories_id . "'");

       }

 

       $languages = tep_get_languages();

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

         $categories_name_array = $HTTP_POST_VARS['categories_name'];

 

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

 

         $sql_data_array = array('categories_name' => tep_db_prepare_input($categories_name_array[$language_id]));

 

         if ($action == 'insert_category') {

           $insert_sql_data = array('categories_id' => $categories_id,

                                    'language_id' => $languages[$i]['id']);

 

           $sql_data_array = array_merge($sql_data_array, $insert_sql_data);

 

           tep_db_perform(TABLE_CATEGORIES_DESCRIPTION, $sql_data_array);

         } elseif ($action == 'update_category') {

           tep_db_perform(TABLE_CATEGORIES_DESCRIPTION, $sql_data_array, 'update', "categories_id = '" . (int)$categories_id . "' and language_id = '" . (int)$languages[$i]['id'] . "'");

         }

       }

 

       if ($categories_image = new upload('categories_image', DIR_FS_CATALOG_IMAGES)) {

         tep_db_query("update " . TABLE_CATEGORIES . " set categories_image = '" . tep_db_input($categories_image->filename) . "' where categories_id = '" . (int)$categories_id . "'");

       }

 

       if (USE_CACHE == 'true') {

         tep_reset_cache_block('categories');

         tep_reset_cache_block('also_purchased');

       }

 

       tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath . '&cID=' . $categories_id));

       break;

     case 'delete_category_confirm':

       if (isset($HTTP_POST_VARS['categories_id'])) {

         $categories_id = tep_db_prepare_input($HTTP_POST_VARS['categories_id']);

 

         $categories = tep_get_category_tree($categories_id, '', '0', '', true);

         $products = array();

         $products_delete = array();

 

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

           $product_ids_query = tep_db_query("select products_id from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" . (int)$categories[$i]['id'] . "'");

 

           while ($product_ids = tep_db_fetch_array($product_ids_query)) {

             $products[$product_ids['products_id']]['categories'][] = $categories[$i]['id'];

           }

         }

 

         reset($products);

         while (list($key, $value) = each($products)) {

           $category_ids = '';

 

           for ($i=0, $n=sizeof($value['categories']); $i<$n; $i++) {

             $category_ids .= "'" . (int)$value['categories'][$i] . "', ";

           }

           $category_ids = substr($category_ids, 0, -2);

 

           $check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$key . "' and categories_id not in (" . $category_ids . ")");

           $check = tep_db_fetch_array($check_query);

           if ($check['total'] < '1') {

             $products_delete[$key] = $key;

           }

         }

 

// removing categories can be a lengthy process

         tep_set_time_limit(0);

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

           tep_remove_category($categories[$i]['id']);

         }

 

         reset($products_delete);

         while (list($key) = each($products_delete)) {

           tep_remove_product($key);

         }

       }

 

       if (USE_CACHE == 'true') {

         tep_reset_cache_block('categories');

         tep_reset_cache_block('also_purchased');

       }

 

       tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath));

       break;

     case 'delete_product_confirm':

       if (isset($HTTP_POST_VARS['products_id']) && isset($HTTP_POST_VARS['product_categories']) && is_array($HTTP_POST_VARS['product_categories'])) {

         $product_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']);

         $product_categories = $HTTP_POST_VARS['product_categories'];

 

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

           tep_db_query("delete from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$product_id . "' and categories_id = '" . (int)$product_categories[$i] . "'");

         }

 

         $product_categories_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$product_id . "'");

         $product_categories = tep_db_fetch_array($product_categories_query);

 

         if ($product_categories['total'] == '0') {

           tep_remove_product($product_id);

         }

       }

 

       if (USE_CACHE == 'true') {

         tep_reset_cache_block('categories');

         tep_reset_cache_block('also_purchased');

       }

 

       tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath));

       break;

     case 'move_category_confirm':

       if (isset($HTTP_POST_VARS['categories_id']) && ($HTTP_POST_VARS['categories_id'] != $HTTP_POST_VARS['move_to_category_id'])) {

         $categories_id = tep_db_prepare_input($HTTP_POST_VARS['categories_id']);

         $new_parent_id = tep_db_prepare_input($HTTP_POST_VARS['move_to_category_id']);

 

         $path = explode('_', tep_get_generated_category_path_ids($new_parent_id));

 

         if (in_array($categories_id, $path)) {

           $messageStack->add_session(ERROR_CANNOT_MOVE_CATEGORY_TO_PARENT, 'error');

 

           tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath . '&cID=' . $categories_id));

         } else {

           tep_db_query("update " . TABLE_CATEGORIES . " set parent_id = '" . (int)$new_parent_id . "', last_modified = now() where categories_id = '" . (int)$categories_id . "'");

 

           if (USE_CACHE == 'true') {

             tep_reset_cache_block('categories');

             tep_reset_cache_block('also_purchased');

           }

 

           tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $new_parent_id . '&cID=' . $categories_id));

         }

       }

 

       break;

     case 'move_product_confirm':

       $products_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']);

       $new_parent_id = tep_db_prepare_input($HTTP_POST_VARS['move_to_category_id']);

 

       $duplicate_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$products_id . "' and categories_id = '" . (int)$new_parent_id . "'");

       $duplicate_check = tep_db_fetch_array($duplicate_check_query);

       if ($duplicate_check['total'] < 1) tep_db_query("update " . TABLE_PRODUCTS_TO_CATEGORIES . " set categories_id = '" . (int)$new_parent_id . "' where products_id = '" . (int)$products_id . "' and categories_id = '" . (int)$current_category_id . "'");

 

       if (USE_CACHE == 'true') {

         tep_reset_cache_block('categories');

         tep_reset_cache_block('also_purchased');

       }

 

       tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $new_parent_id . '&pID=' . $products_id));

       break;

     case 'insert_product':

     case 'update_product':

       if (isset($HTTP_POST_VARS['edit_x']) || isset($HTTP_POST_VARS['edit_y'])) {

         $action = 'new_product';

       } else {

         if (isset($HTTP_GET_VARS['pID'])) $products_id = tep_db_prepare_input($HTTP_GET_VARS['pID']);

         $products_date_available = tep_db_prepare_input($HTTP_POST_VARS['products_date_available']);

 

         $products_date_available = (date('Y-m-d') < $products_date_available) ? $products_date_available : 'null';

 

         $sql_data_array = array('products_quantity' => tep_db_prepare_input($HTTP_POST_VARS['products_quantity']),

                                 'products_model' => tep_db_prepare_input($HTTP_POST_VARS['products_model']),

                                 'products_price' => tep_db_prepare_input($HTTP_POST_VARS['products_price']),

                                 'products_date_available' => $products_date_available,

                                 'products_weight' => tep_db_prepare_input($HTTP_POST_VARS['products_weight']),

                                 'products_status' => tep_db_prepare_input($HTTP_POST_VARS['products_status']),

                                 'products_tax_class_id' => tep_db_prepare_input($HTTP_POST_VARS['products_tax_class_id']),

                                 'manufacturers_id' => tep_db_prepare_input($HTTP_POST_VARS['manufacturers_id']));

 

         if (isset($HTTP_POST_VARS['products_image']) && tep_not_null($HTTP_POST_VARS['products_image']) && ($HTTP_POST_VARS['products_image'] != 'none')) {

           $sql_data_array['products_image'] = tep_db_prepare_input($HTTP_POST_VARS['products_image']);

         }

 

         if ($action == 'insert_product') {

           $insert_sql_data = array('products_date_added' => 'now()');

 

           $sql_data_array = array_merge($sql_data_array, $insert_sql_data);

 

           tep_db_perform(TABLE_PRODUCTS, $sql_data_array);

           $products_id = tep_db_insert_id();

 

           tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$products_id . "', '" . (int)$current_category_id . "')");

         } elseif ($action == 'update_product') {

           $update_sql_data = array('products_last_modified' => 'now()');

 

           $sql_data_array = array_merge($sql_data_array, $update_sql_data);

 

           tep_db_perform(TABLE_PRODUCTS, $sql_data_array, 'update', "products_id = '" . (int)$products_id . "'");

         }

 

         $languages = tep_get_languages();

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

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

 

           $sql_data_array = array('products_name' => tep_db_prepare_input($HTTP_POST_VARS['products_name'][$language_id]),

                                   'products_description' => tep_db_prepare_input($HTTP_POST_VARS['products_description'][$language_id]),

                                   'products_url' => tep_db_prepare_input($HTTP_POST_VARS['products_url'][$language_id]));

 

           if ($action == 'insert_product') {

             $insert_sql_data = array('products_id' => $products_id,

                                      'language_id' => $language_id);

 

             $sql_data_array = array_merge($sql_data_array, $insert_sql_data);

 

             tep_db_perform(TABLE_PRODUCTS_DESCRIPTION, $sql_data_array);

           } elseif ($action == 'update_product') {

             tep_db_perform(TABLE_PRODUCTS_DESCRIPTION, $sql_data_array, 'update', "products_id = '" . (int)$products_id . "' and language_id = '" . (int)$language_id . "'");

           }

         }

 

         if (USE_CACHE == 'true') {

           tep_reset_cache_block('categories');

           tep_reset_cache_block('also_purchased');

         }

 

         tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath . '&pID=' . $products_id));

       }

       break;

     case 'copy_to_confirm':

       if (isset($HTTP_POST_VARS['products_id']) && isset($HTTP_POST_VARS['categories_id'])) {

         $products_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']);

         $categories_id = tep_db_prepare_input($HTTP_POST_VARS['categories_id']);

 

         if ($HTTP_POST_VARS['copy_as'] == 'link') {

           if ($categories_id != $current_category_id) {

             $check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$products_id . "' and categories_id = '" . (int)$categories_id . "'");

             $check = tep_db_fetch_array($check_query);

             if ($check['total'] < '1') {

               tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$products_id . "', '" . (int)$categories_id . "')");

             }

           } else {

             $messageStack->add_session(ERROR_CANNOT_LINK_TO_SAME_CATEGORY, 'error');

           }

         } elseif ($HTTP_POST_VARS['copy_as'] == 'duplicate') {

           $product_query = tep_db_query("select products_quantity, products_model, products_image, products_price, products_date_available, products_weight, products_tax_class_id, manufacturers_id from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'");

           $product = tep_db_fetch_array($product_query);

 

           tep_db_query("insert into " . TABLE_PRODUCTS . " (products_quantity, products_model,products_image, products_price, products_date_added, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id) values ('" . tep_db_input($product['products_quantity']) . "', '" . tep_db_input($product['products_model']) . "', '" . tep_db_input($product['products_image']) . "', '" . tep_db_input($product['products_price']) . "',  now(), '" . tep_db_input($product['products_date_available']) . "', '" . tep_db_input($product['products_weight']) . "', '0', '" . (int)$product['products_tax_class_id'] . "', '" . (int)$product['manufacturers_id'] . "')");

           $dup_products_id = tep_db_insert_id();

 

           $description_query = tep_db_query("select language_id, products_name, products_description, products_url from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$products_id . "'");

           while ($description = tep_db_fetch_array($description_query)) {

             tep_db_query("insert into " . TABLE_PRODUCTS_DESCRIPTION . " (products_id, language_id, products_name, products_description, products_url, products_viewed) values ('" . (int)$dup_products_id . "', '" . (int)$description['language_id'] . "', '" . tep_db_input($description['products_name']) . "', '" . tep_db_input($description['products_description']) . "', '" . tep_db_input($description['products_url']) . "', '0')");

           }

 

           tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$dup_products_id . "', '" . (int)$categories_id . "')");

           $products_id = $dup_products_id;

         }

 

         if (USE_CACHE == 'true') {

           tep_reset_cache_block('categories');

           tep_reset_cache_block('also_purchased');

         }

       }

 

       tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $categories_id . '&pID=' . $products_id));

       break;

     case 'new_product_preview':

// copy image only if modified

       $products_image = new upload('products_image');

       $products_image->set_destination(DIR_FS_CATALOG_IMAGES . $HTTP_POST_VARS['products_image_destination']);        if ($products_image->parse() && $products_image->save()) {

         $products_image_name = $HTTP_POST_VARS['products_image_destination'] . $products_image->filename;

       } else {

         $products_image_name = (isset($HTTP_POST_VARS['products_previous_image']) ? $HTTP_POST_VARS['products_previous_image'] : '');

       }

       break;

   }

 }

 

// check if the catalog image directory exists

 if (is_dir(DIR_FS_CATALOG_IMAGES)) {

   if (!is_writeable(DIR_FS_CATALOG_IMAGES)) $messageStack->add(ERROR_CATALOG_IMAGE_DIRECTORY_NOT_WRITEABLE, 'error');

 } else {

   $messageStack->add(ERROR_CATALOG_IMAGE_DIRECTORY_DOES_NOT_EXIST, 'error');

 }

?>

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

<script language="javascript" src="includes/general.js"></script>

</head>

<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF" onload="SetFocus();">

<div id="spiffycalendar" class="text"></div>

<!-- header //-->

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

<!-- header_eof //-->

 

<!-- body //-->

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

 <tr>

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

<!-- left_navigation //-->

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

<!-- left_navigation_eof //-->

   </table></td>

<!-- body_text //-->

   <td width="100%" valign="top">

<?php

 if ($action == 'new_product') {

   $parameters = array('products_name' => '',

                      'products_description' => '',

                      'products_url' => '',

                      'products_id' => '',

                      'products_quantity' => '',

                      'products_model' => '',

                      'products_image' => '',

                      'products_price' => '',

                      'products_weight' => '',

                      'products_date_added' => '',

                      'products_last_modified' => '',

                      'products_date_available' => '',

                      'products_status' => '',

                          'products_tax_class_id' => '',

                      'manufacturers_id' => '');

 

   $pInfo = new objectInfo($parameters);

 

   if (isset($HTTP_GET_VARS['pID']) && empty($HTTP_POST_VARS)) {

     $product_query = tep_db_query("select pd.products_name, pd.products_description, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "'");

     $product = tep_db_fetch_array($product_query);

 

     $pInfo->objectInfo($product);

   } elseif (tep_not_null($HTTP_POST_VARS)) {

     $pInfo->objectInfo($HTTP_POST_VARS);

     $products_name = $HTTP_POST_VARS['products_name'];

     $products_description = $HTTP_POST_VARS['products_description'];

     $products_url = $HTTP_POST_VARS['products_url'];

   }

 

   $manufacturers_array = array(array('id' => '', 'text' => TEXT_NONE));

   $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']);

   }

 

   $tax_class_array = array(array('id' => '0', 'text' => TEXT_NONE));

   $tax_class_query = tep_db_query("select tax_class_id, tax_class_title from " . TABLE_TAX_CLASS . " order by tax_class_title");

   while ($tax_class = tep_db_fetch_array($tax_class_query)) {

     $tax_class_array[] = array('id' => $tax_class['tax_class_id'],

                                'text' => $tax_class['tax_class_title']);

   }

 

   $languages = tep_get_languages();

 

   if (!isset($pInfo->products_status)) $pInfo->products_status = '1';

   switch ($pInfo->products_status) {

     case '0': $in_status = false; $out_status = true; break;

     case '1':

     default: $in_status = true; $out_status = false;

   }

?>

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

<script language="JavaScript" src="includes/javascript/spiffyCal/spiffyCal_v2_1.js"></script>

<script language="javascript"><!--

 var dateAvailable = new ctlSpiffyCalendarBox("dateAvailable", "new_product", "products_date_available","btnDate1","<?php echo $pInfo->products_date_available; ?>",scBTNMODE_CUSTOMBLUE);

//--></script>

<script language="javascript"><!--

var tax_rates = new Array();

<?php

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

     if ($tax_class_array[$i]['id'] > 0) {

       echo 'tax_rates["' . $tax_class_array[$i]['id'] . '"] = ' . tep_get_tax_rate_value($tax_class_array[$i]['id']) . ';' . "\n";

     }

   }

?>

 

function doRound(x, places) {

 return Math.round(x * Math.pow(10, places)) / Math.pow(10, places);

}

 

function getTaxRate() {

 var selected_value = document.forms["new_product"].products_tax_class_id.selectedIndex;

 var parameterVal = document.forms["new_product"].products_tax_class_id[selected_value].value;

 

 if ( (parameterVal > 0) && (tax_rates[parameterVal] > 0) ) {

   return tax_rates[parameterVal];

 } else {

   return 0;

 }

}

 

function updateGross() {

 var taxRate = getTaxRate();

 var grossValue = document.forms["new_product"].products_price.value;

 

 if (taxRate > 0) {

   grossValue = grossValue * ((taxRate / 100) + 1);

 }

 

 document.forms["new_product"].products_price_gross.value = doRound(grossValue, 4);

}

 

function updateNet() {

 var taxRate = getTaxRate();

 var netValue = document.forms["new_product"].products_price_gross.value;

 

 if (taxRate > 0) {

   netValue = netValue / ((taxRate / 100) + 1);

 }

 

 document.forms["new_product"].products_price.value = doRound(netValue, 4);

}

//--></script>

   <?php echo tep_draw_form('new_product', FILENAME_CATEGORIES, 'cPath=' . $cPath . (isset($HTTP_GET_VARS['pID']) ? '&pID=' . $HTTP_GET_VARS['pID'] : '') . '&action=new_product_preview', 'post', 'enctype="multipart/form-data"'); ?>

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

     <tr>

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

         <tr>

           <td class="pageHeading"><?php echo sprintf(TEXT_NEW_PRODUCT, tep_output_generated_category_path($current_category_id)); ?></td>

           <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>

         </tr>

       </table></td>

     </tr>

     <tr>

       <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

     </tr>

     <tr>

       <td><table border="0" cellspacing="0" cellpadding="2">

 

         <tr>

           <td class="main"><?php echo TEXT_PRODUCTS_STATUS; ?></td>

 

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_radio_field('products_status', '1', $in_status) . ' ' . TEXT_PRODUCT_AVAILABLE . ' ' . tep_draw_radio_field('products_status', '0', $out_status) . ' ' . TEXT_PRODUCT_NOT_AVAILABLE; ?></td>

         </tr>

 

<tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

         <tr>

           <td class="main"><?php echo TEXT_PRODUCTS_DATE_AVAILABLE; ?><br><small>(YYYY-MM-DD)</small></td>

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' '; ?><script language="javascript">dateAvailable.writeControl(); dateAvailable.dateFormat="yyyy-MM-dd";</script></td>

         </tr>

         <tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

         <tr>

           <td class="main"><?php echo TEXT_PRODUCTS_MANUFACTURER; ?></td>

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_pull_down_menu('manufacturers_id', $manufacturers_array, $pInfo->manufacturers_id); ?></td>

         </tr>

         <tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

<?php

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

?>

         <tr>

           <td class="main"><?php if ($i == 0) echo TEXT_PRODUCTS_NAME; ?></td>

           <td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('products_name[' . $languages[$i]['id'] . ']', (isset($products_name[$languages[$i]['id']]) ? $products_name[$languages[$i]['id']] : tep_get_products_name($pInfo->products_id, $languages[$i]['id']))); ?></td>

         </tr>

<?php

   }

?>

         <tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

         <tr bgcolor="#ebebff">

           <td class="main"><?php echo TEXT_PRODUCTS_TAX_CLASS; ?></td>

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_pull_down_menu('products_tax_class_id', $tax_class_array, $pInfo->products_tax_class_id, 'onchange="updateGross()"'); ?></td>

         </tr>

         <tr bgcolor="#ebebff">

           <td class="main"><?php echo TEXT_PRODUCTS_PRICE_NET; ?></td>

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_price', $pInfo->products_price, 'onKeyUp="updateGross()"'); ?></td>

         </tr>

         <tr bgcolor="#ebebff">

           <td class="main"><?php echo TEXT_PRODUCTS_PRICE_GROSS; ?></td>

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_price_gross', $pInfo->products_price, 'OnKeyUp="updateNet()"'); ?></td>

         </tr>

         <tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

<script language="javascript"><!--

updateGross();

//--></script>

<?php

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

?>

         <tr>

           <td class="main" valign="top"><?php if ($i == 0) echo TEXT_PRODUCTS_DESCRIPTION; ?></td>

           <td><table border="0" cellspacing="0" cellpadding="0">

             <tr>

               <td class="main" valign="top"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']); ?> </td>

               <td class="main"><?php echo tep_draw_textarea_field('products_description[' . $languages[$i]['id'] . ']', 'soft', '70', '15', (isset($products_description[$languages[$i]['id']]) ? $products_description[$languages[$i]['id']] : tep_get_products_description($pInfo->products_id, $languages[$i]['id']))); ?></td>

             </tr>

           </table></td>

         </tr>

<?php

   }

?>

         <tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

         <tr>

           <td class="main"><?php echo TEXT_PRODUCTS_QUANTITY; ?></td>

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_quantity', $pInfo->products_quantity); ?></td>

         </tr>

         <tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

         <tr>

           <td class="main"><?php echo TEXT_PRODUCTS_MODEL; ?></td>

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_model', $pInfo->products_model); ?></td>

         </tr>

         <tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

 

 

 

 

<tr>

          <td class="main">Image Destination Directory</td>

          <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . DIR_FS_CATALOG_IMAGES . tep_draw_input_field('products_image_destination'); ?></td>

        </tr>

 

 

 

 

 

         <tr>

           <td class="main"><?php echo TEXT_PRODUCTS_IMAGE; ?></td>

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_file_field('products_image') . '<br>' . tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . $pInfo->products_image . tep_draw_hidden_field('products_previous_image', $pInfo->products_image); ?></td>

         </tr>

 

 

 

 

 

         <tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

<?php

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

?>

         <tr>

           <td class="main"><?php if ($i == 0) echo TEXT_PRODUCTS_URL . '<br><small>' . TEXT_PRODUCTS_URL_WITHOUT_HTTP . '</small>'; ?></td>

           <td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('products_url[' . $languages[$i]['id'] . ']', (isset($products_url[$languages[$i]['id']]) ? $products_url[$languages[$i]['id']] : tep_get_products_url($pInfo->products_id, $languages[$i]['id']))); ?></td>

         </tr>

<?php

   }

?>

         <tr>

           <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

         </tr>

         <tr>

           <td class="main"><?php echo TEXT_PRODUCTS_WEIGHT; ?></td>

           <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_weight', $pInfo->products_weight); ?></td>

         </tr>

       </table></td>

     </tr>

     <tr>

       <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td>

     </tr>

     <tr>

       <td class="main" align="right"><?php echo tep_draw_hidden_field('products_date_added', (tep_not_null($pInfo->products_date_added) ? $pInfo->products_date_added : date('Y-m-d'))) . tep_image_submit('button_preview.gif', IMAGE_PREVIEW) . '  <a href="' . tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath . (isset($HTTP_GET_VARS['pID']) ? '&pID=' . $HTTP_GET_VARS['pID'] : '')) . '">' . tep_image_button('button_cancel.gif', IMAGE_CANCEL) . '</a>'; ?></td>

     </tr>

   </table></form>

<?php

 } elseif ($action == 'new_product_preview') {

   if (tep_not_null($HTTP_POST_VARS)) {

     $pInfo = new objectInfo($HTTP_POST_VARS);

     $products_name = $HTTP_POST_VARS['products_name'];

     $products_description = $HTTP_POST_VARS['products_description'];

     $products_url = $HTTP_POST_VARS['products_url'];

   } else {

     $product_query = tep_db_query("select p.products_id, pd.language_id, pd.products_name, pd.products_description, pd.products_url, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.manufacturers_id  from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = pd.products_id and p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "'");

     $product = tep_db_fetch_array($product_query);

 

     $pInfo = new objectInfo($product);

     $products_image_name = $pInfo->products_image;

   }

 

   $form_action = (isset($HTTP_GET_VARS['pID'])) ? 'update_product' : 'insert_product';

 

   echo tep_draw_form($form_action, FILENAME_CATEGORIES, 'cPath=' . $cPath . (isset($HTTP_GET_VARS['pID']) ? '&pID=' . $HTTP_GET_VARS['pID'] : '') . '&action=' . $form_action, 'post', 'enctype="multipart/form-data"');

 

   $languages = tep_get_languages();

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

     if (isset($HTTP_GET_VARS['read']) && ($HTTP_GET_VARS['read'] == 'only')) {

       $pInfo->products_name = tep_get_products_name($pInfo->products_id, $languages[$i]['id']);

       $pInfo->products_description = tep_get_products_description($pInfo->products_id, $languages[$i]['id']);

       $pInfo->products_url = tep_get_products_url($pInfo->products_id, $languages[$i]['id']);

     } else {

       $pInfo->products_name = tep_db_prepare_input($products_name[$languages[$i]['id']]);

     

Link to comment
Share on other sites

  • 2 weeks later...

Greetings all.

 

I am having a similar problem, but I'm not certain it's exactly the same. I am also using More Pics 6.0. About 50% of the time, I am able to upload a file normally and it will appear in my catalog. However, the other 50% it gives me the OK message in the admin, but then my directory only contains a 0kb file when my image is 30kb or more. Of course, the image then fails to appear in my catalog. If I replace the 0k image with my FTP program, it functions fine, but this defeats the purpose of having the admin tool upload the images (and it's tedious).

 

Because I have More Pics installed, I'm a little hesitant to add the Directory mod fix above. To be honest, I'm not sure that that is my problem to begin with anyway so it likely won't help me.

 

Has anyone had this 0kb file problem? Have you been able to fix it?

 

Cheers,

 

Jonathan

Link to comment
Share on other sites

  • 2 months later...

Im having the same problem as evryone else here but I changed the code like you said it it still doesnt work....

 

Here is whatis in my admin panel

c:/hosting/**********/member/****/catalog/images/

And this is what I want to add

Model_Car_Journal/modelcarjourn_apr92.jpg/

Comes up blank

 

 

 

Have you tried deleting the image file on the server first before uploading your new one.

That has worked for me in the past when I couldnt  over write the existing file 0k

 

Cheers

Paul

The Hobby Undergound..."For The Pure Hobbyist"

Link to comment
Share on other sites

  • 1 year later...

Anyone has an update to this?

I'm using php 4.3.10 and the only way to keep on using oscommerce is to put ALL images into /images dir ...not much ordered...when working with 1000 products.Also tried Harald's mod but with no luck :((

The "old fluke" wasn't that bad wasn't it? ;P

Thanks for the great work btw :D

Advice on forum are Free, Email or Pm to fix your site is work...which I charge for :)

-------------------

Link to comment
Share on other sites

  • 6 months later...
It is possible to define subdirectories for product images - but so far only manually when editing the products.products_image field value (which is why there are products in subdirectories as standard).

 

There is no way to do it in the Administration Tool though and is a current limitation that will be fixed in the next release.

 

Here are some code changes for admin/categories.php that will allow you to define a subdirectory. It is untested though should work if my mighty powers still function at 3AM in the morning correctly, and hope someone can spice it up and forward it to the Tips and Tricks forum channel :)

 

Line 315, change from:

 

$products_image->set_destination(DIR_FS_CATALOG_IMAGES);

 

to:

 

$products_image->set_destination(DIR_FS_CATALOG_IMAGES . $HTTP_POST_VARS['products_image_destination']);

 

Line 317, change from:

 

$products_image_name = $products_image->filename;

 

to:

 

$products_image_name = $HTTP_POST_VARS['products_image_destination'] . $products_image->filename;

 

After lines 562-565, add:

 

 � � � � �<tr>
� � � � � �<td class="main">Image Destination Directory</td>
� � � � � �<td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . DIR_FS_CATALOG_IMAGES . tep_draw_input_field('products_image_destination'); ?></td>
� � � � �</tr>

 

Please note that this is only for uploading new images, not for defining existing images, and that the directory must be writeable (there is no error checking here for the subcategory). The subdirectory value must also end with a /

 

Hope that helps!

 

[Edited post to reflect line 317]

 

 

I'm trying this code and the resulting path has two backslashes before the images folder: path//images/

 

Any ideas where I can fix this?

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...