Solved

Update a SQL DB field onchange with either onchange or ajax

Posted on 2009-05-16
7
3,729 Views
Last Modified: 2013-12-12
Here is my question, the code below is everything however here is the important part:

          case 'PRODUCT_LIST_COST':
            $lc_align = '';
            $lc_text = ' ' . tep_draw_input_field('products_cost', $currencies->format($listing['products_cost']), 'style="width: 60px"') . ' ';
            break;


what i need to do is make this text box automatically update the associated table value, in this case products_cost, with the inputted value, what is the best/easiest way to achieve this, any help would be much appreciated.

Thanks
<?php

/*

  $Id: margin_report.php,v 3.00 2008/03/15  Exp $

  

  osCommerce, Open Source E-Commerce Solutions

  http://www.oscommerce.com
 

  Copyright (c) 2003 osCommerce

  

  percentage margin per order & order status filter by mr_absinthe 2008/03/15
 

  Released under the GNU General Public License

*/
 

  require('includes/application_top.php');
 

  require(DIR_WS_CLASSES . 'currencies.php');

  $currencies = new currencies();
 

  class tableBox {

    var $table_border = '0';

    var $table_width = '100%';

    var $table_cellspacing = '0';

    var $table_cellpadding = '2';

    var $table_parameters = '';

    var $table_row_parameters = '';

    var $table_data_parameters = '';
 

// class constructor

    function tableBox($contents, $direct_output = false) {

      $tableBox_string = '<table border="' . tep_output_string($this->table_border) . '" width="' . tep_output_string($this->table_width) . '" cellspacing="' . tep_output_string($this->table_cellspacing) . '" cellpadding="' . tep_output_string($this->table_cellpadding) . '"';

      if (tep_not_null($this->table_parameters)) $tableBox_string .= ' ' . $this->table_parameters;

      $tableBox_string .= '>' . "\n";
 

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

        if (isset($contents[$i]['form']) && tep_not_null($contents[$i]['form'])) $tableBox_string .= $contents[$i]['form'] . "\n";

		if ($i == '0') {

          $tableBox_string .= '  <tr class="dataTableHeadingRow"';

          if (tep_not_null($this->table_row_parameters)) $tableBox_string .= ' ' . $this->table_row_parameters;

          $tableBox_string .= '>' . "\n";

		} else {

          $tableBox_string .= '  <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)">';

		}
 

        if (isset($contents[$i][0]) && is_array($contents[$i][0])) {

          for ($x=0, $n2=sizeof($contents[$i]); $x<$n2; $x++) {

if ($i != '0') {

            if (isset($contents[$i][$x]['text']) && tep_not_null($contents[$i][$x]['text'])) {

              $tableBox_string .= '    <td class="dataTableContent"';

              if (isset($contents[$i][$x]['align']) && tep_not_null($contents[$i][$x]['align'])) $tableBox_string .= ' align="' . tep_output_string($contents[$i][$x]['align']) . '"';

			  $tableBox_string .= '>';

              if (isset($contents[$i][$x]['form']) && tep_not_null($contents[$i][$x]['form'])) $tableBox_string .= $contents[$i][$x]['form'];

              $tableBox_string .= $contents[$i][$x]['text'];

              if (isset($contents[$i][$x]['form']) && tep_not_null($contents[$i][$x]['form'])) $tableBox_string .= '</form>';

              $tableBox_string .= '</td>' . "\n";

            }

} else {

            if (isset($contents[$i][$x]['text']) && tep_not_null($contents[$i][$x]['text'])) {

              $tableBox_string .= '    <td class="dataTableHeadingContent"';

              if (isset($contents[$i][$x]['align']) && tep_not_null($contents[$i][$x]['align'])) $tableBox_string .= ' align="' . tep_output_string($contents[$i][$x]['align']) . '"';

              $tableBox_string .= '>';

              if (isset($contents[$i][$x]['form']) && tep_not_null($contents[$i][$x]['form'])) $tableBox_string .= $contents[$i][$x]['form'];

              $tableBox_string .= $contents[$i][$x]['text'];

              if (isset($contents[$i][$x]['form']) && tep_not_null($contents[$i][$x]['form'])) $tableBox_string .= '</form>';

              $tableBox_string .= '</td>' . "\n";

            }

}

          }

        } else {

if ($i != '0') {

          $tableBox_string .= '    <td class="dataTableContent">' . $contents[$i]['text'] . '</td>' . "\n";

} else {

          $tableBox_string .= '    <td';

          if (isset($contents[$i]['align']) && tep_not_null($contents[$i]['align'])) $tableBox_string .= ' align="' . tep_output_string($contents[$i]['align']) . '"';

          if (isset($contents[$i]['params']) && tep_not_null($contents[$i]['params'])) {

            $tableBox_string .= ' ' . $contents[$i]['params'];

          } elseif (tep_not_null($this->table_data_parameters)) {

            $tableBox_string .= ' ' . $this->table_data_parameters;

          }

          $tableBox_string .= '>' . $contents[$i]['text'] . '</td>' . "\n";

}

        }
 

        $tableBox_string .= '  </tr>' . "\n";

        if (isset($contents[$i]['form']) && tep_not_null($contents[$i]['form'])) $tableBox_string .= '</form>' . "\n";

      }
 

      $tableBox_string .= '</table>' . "\n";
 

      if ($direct_output == true) echo $tableBox_string;
 

      return $tableBox_string;

    }

  }
 

  class productListingBox extends tableBox {

    function productListingBox($contents) {

      $this->tableBox($contents, true);

    }

  }
 

  class splitPageResults2 {

    var $sql_query, $number_of_rows, $current_page_number, $number_of_pages, $number_of_rows_per_page, $page_name;
 

/* class constructor */

    function splitPageResults2($query, $max_rows, $count_key = '*', $page_holder = 'page') {

      global $_GET, $HTTP_POST_VARS;
 

      $this->sql_query = $query;

      $this->page_name = $page_holder;
 

      if (isset($_GET[$page_holder])) {

        $page = $_GET[$page_holder];

      } elseif (isset($HTTP_POST_VARS[$page_holder])) {

        $page = $HTTP_POST_VARS[$page_holder];

      } else {

        $page = '';

      }
 

      if (empty($page) || !is_numeric($page)) $page = 1;

      $this->current_page_number = $page;
 

      $this->number_of_rows_per_page = $max_rows;
 

      $pos_to = strlen($this->sql_query);

      $pos_from = strpos($this->sql_query, ' from', 0);
 

      $pos_group_by = strpos($this->sql_query, ' group by', $pos_from);

      if (($pos_group_by < $pos_to) && ($pos_group_by != false)) $pos_to = $pos_group_by;
 

      $pos_having = strpos($this->sql_query, ' having', $pos_from);

      if (($pos_having < $pos_to) && ($pos_having != false)) $pos_to = $pos_having;
 

      $pos_order_by = strpos($this->sql_query, ' order by', $pos_from);

      if (($pos_order_by < $pos_to) && ($pos_order_by != false)) $pos_to = $pos_order_by;
 

      if (strpos($this->sql_query, 'distinct') || strpos($this->sql_query, 'group by')) {

        $count_string = 'distinct ' . tep_db_input($count_key);

      } else {

        $count_string = tep_db_input($count_key);

      }
 

      $count_query = tep_db_query("select count(" . $count_string . ") as total " . substr($this->sql_query, $pos_from, ($pos_to - $pos_from)));

      $count = tep_db_fetch_array($count_query);
 

      $this->number_of_rows = $count['total'];
 

      $this->number_of_pages = ceil($this->number_of_rows / $this->number_of_rows_per_page);
 

      if ($this->current_page_number > $this->number_of_pages) {

        $this->current_page_number = $this->number_of_pages;

      }
 

      $offset = ($this->number_of_rows_per_page * ($this->current_page_number - 1));
 

      $this->sql_query .= " limit " . $offset . ", " . $this->number_of_rows_per_page;

    }
 

// display split-page-number-links

    function display_links2($max_page_links, $parameters = '') {

      global $PHP_SELF, $request_type;

	  $request_type='NONSSL';
 

      $display_links_string = '';
 

      $class = 'class="pageResults"';
 

      if (tep_not_null($parameters) && (substr($parameters, -1) != '&')) $parameters .= '&';
 

// previous button - not displayed on first page

      if ($this->current_page_number > 1) $display_links_string .= '<a href="' . tep_href_link(basename($PHP_SELF), $parameters . $this->page_name . '=' . ($this->current_page_number - 1), $request_type) . '" class="pageResults" title=" ' . PREVNEXT_TITLE_PREVIOUS_PAGE . ' "><u>' . PREVNEXT_BUTTON_PREV . '</u></a>&nbsp;&nbsp;';
 

// check if number_of_pages > $max_page_links

      $cur_window_num = intval($this->current_page_number / $max_page_links);

      if ($this->current_page_number % $max_page_links) $cur_window_num++;
 

      $max_window_num = intval($this->number_of_pages / $max_page_links);

      if ($this->number_of_pages % $max_page_links) $max_window_num++;
 

// previous window of pages

      if ($cur_window_num > 1) $display_links_string .= '<a href="' . tep_href_link(basename($PHP_SELF), $parameters . $this->page_name . '=' . (($cur_window_num - 1) * $max_page_links), $request_type) . '" class="pageResults" title=" ' . sprintf(PREVNEXT_TITLE_PREV_SET_OF_NO_PAGE, $max_page_links) . ' ">...</a>';
 

// page nn button

      for ($jump_to_page = 1 + (($cur_window_num - 1) * $max_page_links); ($jump_to_page <= ($cur_window_num * $max_page_links)) && ($jump_to_page <= $this->number_of_pages); $jump_to_page++) {

        if ($jump_to_page == $this->current_page_number) {

          $display_links_string .= '&nbsp;<b>' . $jump_to_page . '</b>&nbsp;';

        } else {

          $display_links_string .= '&nbsp;<a href="' . tep_href_link(basename($PHP_SELF), $parameters . $this->page_name . '=' . $jump_to_page, $request_type) . '" class="pageResults" title=" ' . sprintf(PREVNEXT_TITLE_PAGE_NO, $jump_to_page) . ' "><u>' . $jump_to_page . '</u></a>&nbsp;';

        }

      }
 

// next window of pages

      if ($cur_window_num < $max_window_num) $display_links_string .= '<a href="' . tep_href_link(basename($PHP_SELF), $parameters . $this->page_name . '=' . (($cur_window_num) * $max_page_links + 1), $request_type) . '" class="pageResults" title=" ' . sprintf(PREVNEXT_TITLE_NEXT_SET_OF_NO_PAGE, $max_page_links) . ' ">...</a>&nbsp;';
 

// next button

      if (($this->current_page_number < $this->number_of_pages) && ($this->number_of_pages != 1)) $display_links_string .= '&nbsp;<a href="' . tep_href_link(basename($PHP_SELF), $parameters . 'page=' . ($this->current_page_number + 1), $request_type) . '" class="pageResults" title=" ' . PREVNEXT_TITLE_NEXT_PAGE . ' "><u>' . PREVNEXT_BUTTON_NEXT . '</u></a>&nbsp;';
 

      return $display_links_string;

    }
 

    function display_count2($text_output) {

      $to_num = ($this->number_of_rows_per_page * $this->current_page_number);

      if ($to_num > $this->number_of_rows) $to_num = $this->number_of_rows;
 

      $from_num = ($this->number_of_rows_per_page * ($this->current_page_number - 1));
 

      if ($to_num == 0) {

        $from_num = 0;

      } else {

        $from_num++;

      }
 

      return sprintf($text_output, $from_num, $to_num, $this->number_of_rows);

    }

  }
 

// Return table heading with sorting capabilities

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

    global $PHP_SELF;
 

    $sort_prefix = '';

    $sort_suffix = '';
 

    if ($sortby) {

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

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

    }
 

    return $sort_prefix . $heading . $sort_suffix;

  }
 

  if ((isset($_GET['action'])) && ($_GET['action'] == 'export')) {
 

	if (isset($_GET['manufacturers_id']) && ($_GET['manufacturers_id'] != '') && (!isset($_GET['filter_id']))) {

	  $manufacturer_query = tep_db_query("select manufacturers_name as name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . $_GET['manufacturers_id'] . "'");

	  $manufacturer = tep_db_query($manufacturer_query);

	  $xls_header = 'Margin Report: ' . $manufacturer['name'];

	} elseif (isset($_GET['manufacturers_id']) && ($_GET['manufacturers_id'] != '') && (isset($_GET['filter_id']) && ($_GET['filter_id'] != ''))) {

	  $manufacturer_query = tep_db_query("select manufacturers_name as name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . $_GET['manufacturers_id'] . "'");

	  $manufacturer = tep_db_fetch_array($manufacturer_query);

	  $category_query = tep_db_query("select categories_name as name from " . TABLE_CATEGORIES_DESCRIPTION . " where categories_id = '" . $_GET['filter_id'] . "'");

	  $category = tep_db_fetch_array($category_query);

	  $xls_header = 'Margin Report: ' . $manufacturer['name'] . ' - ' . $category['name'];

	} else {

	  $xls_header = 'Margin Report: All Products';

	  }
 

	$sql = stripslashes($_GET['sql']);

	//echo $sql;

	$csv_query = mysql_query($sql);
 

$xls .= '<table width="1050" border="1" cellspacing="0" cellpadding="2">

  <tr align="center">

    <td colspan="6" width="1050" bgcolor="#FFFF00">

      <font face="Arial, Helvetica, sans-serif"><strong>' . $xls_header. '

        </strong> </font>    

    </td>

  </tr>

  <tr>

    <td colspan="6"> </td>

  </tr>

  <tr>

    <td width="250" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_PRODUCTS_NAME .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_PRODUCTS_COST .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_PRODUCTS_COST2 .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_PRODUCTS_COST3 .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_PRODUCTS_COST4 .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_PRODUCTS_COST5 .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_PRODUCTS_COST6 .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_PRODUCTS_PRICE .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_SPECIAL_PRICE .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_MARGIN_MONEY .'</em></font>    

    </td>

    <td width="160" align="right" bgcolor="#00CCFF">

    <font size="4" face="Times New Roman, Times, serif"><em>'. TEXT_MARGIN_PERCENTAGE .'</em></font>    

    </td>

  </tr>';
 

$a = '1';

while ($csv_results = tep_db_fetch_array($csv_query)) {

  if ($a == '1') {

	if ($csv_results['specials_price'] == '' || $csv_results['specials_price'] == 'NULL') {

	  $xls .= '<tr><td bgcolor="#C0C0C0">' . tep_get_products_name($csv_results['products_id']) . '</td><td bgcolor="#C0C0C0">' .$currencies->format($csv_results['products_cost']) . '</td><td bgcolor="#C0C0C0">' . $currencies->format($csv_results['products_price']) . '</td><td bgcolor="#C0C0C0"> </td><td bgcolor="#C0C0C0">' . $currencies->format($csv_results['margin_dollars']) . '</td><td bgcolor="#C0C0C0">' . number_format($csv_results['margin_percentage'], '2', '.', ',') . '</td></tr>';

	} else {

	  $xls .= '<tr><td bgcolor="#C0C0C0">' . tep_get_products_name($csv_results['products_id']) . '</td><td bgcolor="#C0C0C0">' .$currencies->format($csv_results['products_cost']) . '</td><td bgcolor="#C0C0C0">' . $currencies->format($csv_results['products_price']) . '</td><td bgcolor="#C0C0C0">' . $currencies->format($csv_results['specials_price']) . '</td><td bgcolor="#C0C0C0">' . $currencies->format($csv_results['margin_dollars']) . '</td><td bgcolor="#C0C0C0">' . number_format($csv_results['margin_percentage'], '2', '.', ',') . '</td></tr>';

	}

	$a='0';

  } else {

	if ($csv_results['specials_price'] == '' || $csv_results['specials_price'] == 'NULL') {

	  $xls .= '<tr><td bgcolor="#969696">' . tep_get_products_name($csv_results['products_id']) . '</td><td bgcolor="#969696">' .$currencies->format($csv_results['products_cost']) . '</td><td bgcolor="#969696">' . $currencies->format($csv_results['products_price']) . '</td><td bgcolor="#969696"> </td><td bgcolor="#969696">' . $currencies->format($csv_results['margin_dollars']) . '</td><td bgcolor="#969696">' . number_format($csv_results['margin_percentage'], '2', '.', ',') . '</td></tr>';

	} else {

	  $xls .= '<tr><td bgcolor="#969696">' . tep_get_products_name($csv_results['products_id']) . '</td><td bgcolor="#969696">' .$currencies->format($csv_results['products_cost']) . '</td><td bgcolor="#969696">' . $currencies->format($csv_results['products_price']) . '</td><td bgcolor="#969696">' . $currencies->format($csv_results['specials_price']) . '</td><td bgcolor="#969696">' . $currencies->format($csv_results['margin_dollars']) . '</td><td bgcolor="#969696">' . number_format($csv_results['margin_percentage'], '2', '.', ',') . '</td></tr>';

	}

	$a='1';

  }

}

$xls .= '<tr>

    <td colspan="6"> </td>

  </tr>

  <tr>

    <td colspan="6" align="center"><font size="4" face="Times New Roman, Times, serif">This report was generated by Margin Report. An <a href="http://www.eclyptiq.com">Eclyptiq</a> contribution for osCommerce ms2.2.</font></td>

  </tr>

</table>';

/////////////////////////////////////////////////////////////////////////////////
 

if ((isset($_GET['file'])) && ($_GET['file'] != '') && ($_GET['file'] != 'example_filename')) {

//////////////////////////////////////////////////////////////

// Please change this to the folder you want to use.

$extension = '.xls';

//////////////////////////////////////////////////////////////

$filename = $_GET['file'] . $extension;
 

header("Content-type: application/octet-stream");

header("Content-Disposition: attachment; filename=" . $filename);

header("Pragma: no-cache");

header("Expires: 0");

print "$xls";

exit();
 

} else {

echo 'Please enter a valid filename and check your location.';

}

}

//////////////////////////////////////////////////////////////////////////////////

?>

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

<!-- 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"><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 HEADING_TITLE; ?></td>

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

<?php

      if (isset($_GET['manufacturers_id'])) {

        $filterlist_sql = "select distinct c.categories_id as id, cd.categories_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where p.products_status = '1' and p.products_id = p2c.products_id and p2c.categories_id = c.categories_id and p2c.categories_id = cd.categories_id and cd.language_id = '" . (int)$languages_id . "' and p.manufacturers_id = '" . (int)$_GET['manufacturers_id'] . "' order by cd.categories_name";

	  } else {

        $filterlist_sql= "select distinct m.manufacturers_id as id, m.manufacturers_name as name from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_MANUFACTURERS . " m where p.products_status = '1' and p.manufacturers_id = m.manufacturers_id and p.products_id = p2c.products_id order by m.manufacturers_name";

      }

      $filterlist_query = tep_db_query($filterlist_sql);

  

      if (tep_db_num_rows($filterlist_query) > 1) {

        echo '            <td align="right" class="main">' . tep_draw_form('filter', FILENAME_MARGIN_REPORT, '', 'get') . TEXT_SHOW . '&nbsp;';

        if (isset($_GET['manufacturers_id'])) {

          echo tep_draw_hidden_field('manufacturers_id', $_GET['manufacturers_id']);

          $options = array(array('id' => '', 'text' => TEXT_ALL_CATEGORIES_BY_MANUFACTURER));

        } else {

          echo tep_draw_hidden_field('cPath', $cPath);

          $options = array(array('id' => '', 'text' => TEXT_ALL_MANUFACTURERS));

        }

        echo tep_draw_hidden_field('sort', $_GET['sort']);

        while ($filterlist = tep_db_fetch_array($filterlist_query)) {

          $options[] = array('id' => $filterlist['id'], 'text' => $filterlist['name']);

        }

        if (!isset($_GET['manufacturers_id'])) echo tep_draw_pull_down_menu('manufacturers_id', $options, (isset($_GET['filter_id']) ? $_GET['filter_id'] : ''), 'onchange="this.form.submit()"');

        if (isset($_GET['manufacturers_id'])) echo tep_draw_pull_down_menu('filter_id', $options, (isset($_GET['filter_id']) ? $_GET['filter_id'] : ''), 'onchange="this.form.submit()"');

        echo '</form></td>' . "\n";

      }

?>

          </tr>

        </table></td>

      </tr>

      <tr>

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

          <tr>

            <td valign="top">

<?php

    $define_list = array('PRODUCT_LIST_PRODUCT' => '1',

                         'PRODUCT_LIST_COST' => '2',

                         'PRODUCT_LIST_COST2' => '3',

                         'PRODUCT_LIST_COST3' => '4',

                         'PRODUCT_LIST_COST4' => '5',

                         'PRODUCT_LIST_COST5' => '6',

                         'PRODUCT_LIST_COST6' => '7',

                         'PRODUCT_LIST_PRICE' => '8',

                         'PRODUCT_LIST_SPECIAL_PRICE' => '9',

                         'PRODUCT_LIST_MARGIN_DOLLARS' => '10',

                         'PRODUCT_LIST_MARGIN_PERCENTAGE' => '11');
 

    asort($define_list);

    $column_list = array();

    reset($define_list);

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

      if ($value > 0) $column_list[] = $key;

    }

	

// show the products of a specified manufacturer

    if (isset($_GET['manufacturers_id'])) {

      if (isset($_GET['filter_id']) && tep_not_null($_GET['filter_id'])) {

// We are asked to show only a specific category

        $listing_sql = "select p.products_id, p.products_price as products_price, p.products_cost, p.products_cost2, p.products_cost3, p.products_cost4, p.products_cost5, p.products_cost6, p.products_model, IF(s.status, s.specials_new_products_price, NULL) as specials_price, if(s.status, s.specials_new_products_price-p.products_cost, p.products_price-p.products_cost) as margin_dollars, if(s.status, (s.specials_new_products_price-p.products_cost)/s.specials_new_products_price*100, (p.products_price-p.products_cost)/p.products_price*100) as margin_percentage, p2c.categories_id as category, c.parent_id as parent from (" . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_DESCRIPTION . " pd) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where pd.language_id = '" . (int)$languages_id . "' and p.products_id = pd.products_id and p2c.products_id = p.products_id and c.categories_id = p2c.categories_id and p2c.categories_id = '" . (int)$_GET['filter_id'] . "' and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$_GET['manufacturers_id'] . "'";

      } else {

// We show them all

        $listing_sql = "select p.products_id, p.products_price as products_price, p.products_cost, p.products_cost2, p.products_cost3, p.products_cost4, p.products_cost5, p.products_cost6, p.products_model, IF(s.status, s.specials_new_products_price, NULL) as specials_price, if(s.status, s.specials_new_products_price-p.products_cost, p.products_price-p.products_cost) as margin_dollars, if(s.status, (s.specials_new_products_price-p.products_cost)/s.specials_new_products_price*100, (p.products_price-p.products_cost)/p.products_price*100) as margin_percentage, p2c.categories_id as category, c.parent_id as parent from (" . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_MANUFACTURERS . " m, " . TABLE_PRODUCTS_DESCRIPTION . " pd) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where pd.language_id = '" . (int)$languages_id . "' and p.products_id = pd.products_id and p2c.products_id = p.products_id and c.categories_id = p2c.categories_id and p.manufacturers_id = m.manufacturers_id and m.manufacturers_id = '" . (int)$_GET['manufacturers_id'] . "'";

      }

    } elseif (isset($_GET['filter_id']) && tep_not_null($_GET['filter_id'])) {

// show the products in a given category

// We are asked to show only specific category

        $listing_sql = "select p.products_id, p.products_price as products_price, p.products_cost, p.products_cost2, p.products_cost3, p.products_cost4, p.products_cost5, p.products_cost6, p.products_model, IF(s.status, s.specials_new_products_price, NULL) as specials_price, if(s.status, s.specials_new_products_price-p.products_cost, p.products_price-p.products_cost) as margin_dollars, if(s.status, (s.specials_new_products_price-p.products_cost)/s.specials_new_products_price*100, (p.products_price-p.products_cost)/p.products_price*100) as margin_percentage, p2c.categories_id as category, c.parent_id as parent from (" . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_DESCRIPTION . " pd) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where pd.language_id = '" . (int)$languages_id . "' and p.products_id = pd.products_id and p2c.products_id = p.products_id and c.categories_id = p2c.categories_id and p2c.categories_id = '" . (int)$_GET['filter_id'] . "'";

    } elseif (isset($_GET['report_id']) && tep_not_null($_GET['report_id'])) {

// Show the products from the time frame defined by the report variable.

      $listing_sql = "select p.products_id, p.products_price as products_price, p.products_cost, p.products_cost2, p.products_cost3, p.products_cost4, p.products_cost5, p.products_cost6, p.products_model, IF(s.status, s.specials_new_products_price, NULL) as specials_price, if(s.status, s.specials_new_products_price-p.products_cost, p.products_price-p.products_cost) as margin_dollars, if(s.status, (s.specials_new_products_price-p.products_cost)/s.specials_new_products_price*100, (p.products_price-p.products_cost)/p.products_price*100) as margin_percentage, p2c.categories_id as category, c.parent_id as parent from (" . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_DESCRIPTION . " pd) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where pd.language_id = '" . (int)$languages_id . "' and p.products_id = pd.products_id and p2c.products_id = p.products_id and c.categories_id = p2c.categories_id and p2c.categories_id = '" . (int)$_GET['filter_id'] . "'";

    } else {

// We show them all

        $listing_sql = "select " . $select_column_list . " p.products_id, p.products_price as products_price, p.products_cost, p.products_cost2, p.products_cost3, p.products_cost4, p.products_cost5, p.products_cost6, p.products_model, IF(s.status, s.specials_new_products_price, NULL) as specials_price, if(s.status, s.specials_new_products_price-p.products_cost, p.products_price-p.products_cost) as margin_dollars, if(s.status, (s.specials_new_products_price-p.products_cost)/s.specials_new_products_price*100, (p.products_price-p.products_cost)/p.products_price*100) as margin_percentage, p2c.categories_id as category, c.parent_id as parent from (" . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c, " . TABLE_CATEGORIES . " c, " . TABLE_PRODUCTS_DESCRIPTION . " pd) left join " . TABLE_SPECIALS . " s on p.products_id = s.products_id where pd.language_id = '" . (int)$languages_id . "' and p.products_id = pd.products_id and p2c.products_id = p.products_id and c.categories_id = p2c.categories_id";

}	
 

    if ( (!isset($_GET['sort'])) || (!ereg('[1-8][ad]', $_GET['sort'])) || (substr($_GET['sort'], 0, 1) > sizeof($column_list)) ) {

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

        if ($column_list[$i] == 'PRODUCT_LIST_PRODUCT') {

          $_GET['sort'] = $i+1 . 'a';

          $listing_sql .= " order by p.products_model";

          break;

        }

      }

    } else {

      $sort_col = substr($_GET['sort'], 0 , 1);

      $sort_order = substr($_GET['sort'], 1);

      $listing_sql .= ' order by ';

      switch ($column_list[$sort_col-1]) {

        case 'PRODUCT_LIST_PRODUCT':

          $listing_sql .= "p.products_model " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_COST':

          $listing_sql .= "p.products_cost " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_COST2':

          $listing_sql .= "p.products_cost2 " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_COST3':

          $listing_sql .= "p.products_cost3 " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_COST4':

          $listing_sql .= "p.products_cost4 " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_COST5':

          $listing_sql .= "p.products_cost5 " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_COST6':

          $listing_sql .= "p.products_cost6 " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_PRICE':

          $listing_sql .= "p.products_price " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_SPECIAL_PRICE':

          $listing_sql .= "specials_price " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_MARGIN_DOLLARS':

          $listing_sql .= "margin_dollars " . ($sort_order == 'd' ? 'desc' : '');

          break;

        case 'PRODUCT_LIST_MARGIN_PERCENTAGE':

          $listing_sql .= "margin_percentage " . ($sort_order == 'd' ? 'desc' : '');

          break;

      }

    }
 
 

  $listing_split = new splitPageResults2($listing_sql, MAX_DISPLAY_SEARCH_RESULTS);
 

  if (($listing_split->number_of_rows > 0) && ( (PREV_NEXT_BAR_LOCATION == '1') || (PREV_NEXT_BAR_LOCATION == '3') ) ) {
 

?>

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

  <tr>

    <td class="smallText"><?php echo $listing_split->display_count2(TEXT_DISPLAY_NUMBER_OF_PRODUCTS); ?></td>

    <td class="smallText" align="right"><?php echo TEXT_RESULT_PAGES . ' ' . $listing_split->display_links2(MAX_DISPLAY_PAGE_LINKS, tep_get_all_get_params(array('info', 'x', 'y'))); ?></td>

  </tr>

</table>

<?php

  }
 

  $list_box_contents = array();
 

  for ($col=0, $n=sizeof($column_list); $col<$n; $col++) {

    switch ($column_list[$col]) {

      case 'PRODUCT_LIST_PRODUCT':

        $lc_text = TABLE_HEADING_PRODUCT;

        $lc_align = '';

        break;

      case 'PRODUCT_LIST_COST':

        $lc_text = TABLE_HEADING_COST;

        $lc_align = '';

        break;

      case 'PRODUCT_LIST_COST2':

        $lc_text = TABLE_HEADING_COST2;

        $lc_align = '';

        break;

      case 'PRODUCT_LIST_COST3':

        $lc_text = TABLE_HEADING_COST3;

        $lc_align = '';

        break;

      case 'PRODUCT_LIST_COST4':

        $lc_text = TABLE_HEADING_COST4;

        $lc_align = '';

        break;

      case 'PRODUCT_LIST_COST5':

        $lc_text = TABLE_HEADING_COST5;

        $lc_align = '';

        break;

      case 'PRODUCT_LIST_COST6':

        $lc_text = TABLE_HEADING_COST6;

        $lc_align = '';

        break;

      case 'PRODUCT_LIST_PRICE':

        $lc_text = TABLE_HEADING_PRICE;

        $lc_align = '';

        break;

      case 'PRODUCT_LIST_SPECIAL_PRICE':

        $lc_text = TABLE_HEADING_SPECIAL_PRICE;

        $lc_align = 'right';

        break;

      case 'PRODUCT_LIST_MARGIN_DOLLARS':

        $lc_text = TABLE_HEADING_MARGIN_DOLLARS;

        $lc_align = 'right';

        break;

      case 'PRODUCT_LIST_MARGIN_PERCENTAGE':

        $lc_text = TABLE_HEADING_MARGIN_PERCENTAGE;

        $lc_align = 'right';

        break;

    }
 

      $lc_text = tep_create_sort_heading($_GET['sort'], $col+1, $lc_text);
 
 

    $list_box_contents[0][] = array('align' => $lc_align,

                                    'params' => 'class="dataTableHeadingRow"',

                                    'text' => '&nbsp;' . $lc_text . '&nbsp;');

  }
 

  if ($listing_split->number_of_rows > 0) {

    $rows = 0;

    $listing_query = tep_db_query($listing_split->sql_query);

    while ($listing = tep_db_fetch_array($listing_query)) {

      $rows++;
 

      if (($rows/2) == floor($rows/2)) {

        $list_box_contents[] = array('params' => 'class="dataTableContent"');

      } else {

        $list_box_contents[] = array('params' => 'class="dataTableContent"');

      }
 

      $cur_row = sizeof($list_box_contents) - 1;
 

      for ($col=0, $n=sizeof($column_list); $col<$n; $col++) {

        $lc_align = '';
 

        switch ($column_list[$col]) {

          case 'PRODUCT_LIST_PRODUCT':

            $lc_align = '';

            if ($listing['parent'] == '0') {

			$lc_text = '&nbsp;<a href="' . tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $listing['category'] . '&pID=' . $listing['products_id'] . '&action=new_product') . '">' . $listing['products_model'] . '</a>&nbsp;';

			} else {

			$lc_text = '&nbsp;<a href="' . tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $listing['parent'] . '_' . $listing['category'] . '&pID=' . $listing['products_id'] . '&action=new_product') . '">' . $listing['products_model'] . '</a>&nbsp;';

			}

            break;
 

          case 'PRODUCT_LIST_COST':

            $lc_align = '';

            $lc_text = '&nbsp;' . tep_draw_input_field('products_cost', $currencies->format($listing['products_cost']), 'style="width: 60px"') . '&nbsp;';

            break;

          case 'PRODUCT_LIST_COST2':

            $lc_align = '';

            $lc_text = '&nbsp;' . tep_draw_input_field('products_cost2', $currencies->format($listing['products_cost2']), 'style="width: 60px"') . '&nbsp;';

            break;

          case 'PRODUCT_LIST_COST3':

            $lc_align = '';

            $lc_text = '&nbsp;' . tep_draw_input_field('products_cost3', $currencies->format($listing['products_cost3']), 'style="width: 60px"') . '&nbsp;';

            break;

          case 'PRODUCT_LIST_COST4':

            $lc_align = '';

            $lc_text = '&nbsp;' . tep_draw_input_field('products_cost4', $currencies->format($listing['products_cost4']), 'style="width: 60px"') . '&nbsp;';

            break;

          case 'PRODUCT_LIST_COST5':

            $lc_align = '';

            $lc_text = '&nbsp;' . tep_draw_input_field('products_cost5', $currencies->format($listing['products_cost5']), 'style="width: 60px"') . '&nbsp;';

            break;

          case 'PRODUCT_LIST_COST6':

            $lc_align = '';

            $lc_text = '&nbsp;' . tep_draw_input_field('products_cost6', $currencies->format($listing['products_cost6']), 'style="width: 60px"') . '&nbsp;';

            break;

          case 'PRODUCT_LIST_PRICE':

            $lc_align = '';

            if (tep_not_null($listing['specials_price'])) {

              $lc_text = '&nbsp;<s>' . $currencies->format($listing['products_price']) . '&nbsp;';

            } else {

              $lc_text = '&nbsp;' . $currencies->format($listing['products_price']) . '&nbsp;';

            }

            break;

          case 'PRODUCT_LIST_SPECIAL_PRICE':

            $lc_align = 'right';

            if (tep_not_null($listing['specials_price'])) {

              $lc_text = '&nbsp;' . '<span class="specialprice">' . $currencies->format($listing['specials_price']) . '</span>&nbsp;';

            } else {

              $lc_text = '&nbsp;' . ' ' . '&nbsp;';

            }

            break;

          case 'PRODUCT_LIST_MARGIN_DOLLARS':

            $lc_align = 'right';

			if ($listing['products_price'] > $listing['products_cost']) {

			$lc_text = '&nbsp;' . $currencies->format($listing['margin_dollars']) . '&nbsp;';

			} else {

			$lc_text = '&nbsp;' . '<span class="belowCost">' . $currencies->format($listing['margin_dollars']) . '</span>' . '&nbsp;';

			}

            break;

          case 'PRODUCT_LIST_MARGIN_PERCENTAGE':

            $lc_align = 'right';

			if ($listing['products_price'] > $listing['products_cost']) {

            $lc_text = '&nbsp;' . number_format($listing['margin_percentage'], '2', '.', ',') . '%' . '&nbsp;';

			} else {

			$lc_text = '&nbsp;' . '<span class="belowCost">' . number_format($listing['margin_percentage'], '2', '.', ',') . '%</span>' . '&nbsp;';

			}

            break;

        }
 

        $list_box_contents[$cur_row][] = array('align' => $lc_align,

                                               'params' => 'class="dataTableRow"',

                                               'text'  => $lc_text);

      }

    }
 

    new productListingBox($list_box_contents);

  } else {

    $list_box_contents = array();
 

    $list_box_contents[0] = array('params' => 'class="productListing-odd"');

    $list_box_contents[0][] = array('params' => 'class="productListing-data"',

                                   'text' => TEXT_NO_PRODUCTS);

                                   

    new productListingBox($list_box_contents);

  }
 

  if ( ($listing_split->number_of_rows > 0) && ((PREV_NEXT_BAR_LOCATION == '2') || (PREV_NEXT_BAR_LOCATION == '3')) ) {

?>

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

  <tr>

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

  </tr>

  <tr>

    <td class="smallText"><?php echo $listing_split->display_count2(TEXT_DISPLAY_NUMBER_OF_PRODUCTS); ?></td>

    <td class="smallText" align="right"><?php echo TEXT_RESULT_PAGES . ' ' . $listing_split->display_links2(MAX_DISPLAY_PAGE_LINKS, tep_get_all_get_params(array('info', 'x', 'y'))); ?></td>

  </tr>

</table>

<?php

  }

?>

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

  <tr>

       		  <?php if (isset($_GET['manufacturers_id'])) { ?>

				<td align="left"><?php echo '<a href="' . tep_href_link(FILENAME_MARGIN_REPORT, '', 'NONSSL') . '">' . tep_image_button('button_back.gif', BUTTON_BACK_TO_MAIN) . '</a>'; ?></td>

			  <?php } else { 
 

        echo '<td align="left" class="main">' . tep_draw_form('report', FILENAME_MARGIN_REPORT2, '', 'get') . TEXT_SHOW . '&nbsp;';

          $options = array();

	    $options[] = array('id' => 'all', 'text' => TEXT_SELECT_REPORT);

          $options[] = array('id' => 'daily', 'text' => TEXT_SELECT_REPORT_DAILY);

          $options[] = array('id' => 'yesterday', 'text' => TEXT_SELECT_REPORT_YESTERDAY);

          $options[] = array('id' => 'weekly', 'text' => TEXT_SELECT_REPORT_WEEKLY);

          $options[] = array('id' => 'lastweek', 'text' => TEXT_SELECT_REPORT_LASTWEEK);

          $options[] = array('id' => 'monthly', 'text' => TEXT_SELECT_REPORT_MONTHLY);

          $options[] = array('id' => 'lastmonth', 'text' => TEXT_SELECT_REPORT_LASTMONTH);

          $options[] = array('id' => 'quarterly', 'text' => TEXT_SELECT_REPORT_QUARTERLY);

          $options[] = array('id' => 'semiannually', 'text' => TEXT_SELECT_REPORT_SEMIANNUALLY);

          $options[] = array('id' => 'annually', 'text' => TEXT_SELECT_REPORT_ANNUALLY);

        echo tep_draw_pull_down_menu('report_id', $options, (isset($_GET['report_id']) ? $_GET['report_id'] : '1'), 'onchange="this.form.submit()"');

        echo '</form></td>' . "\n";

      }
 

  if (isset($_GET['manufacturers_id']) && ($_GET['manufacturers_id'] != '') && (!isset($_GET['filter_id']))) {

	$get_vars = tep_draw_hidden_field('manufacturers_id', $_GET['manufacturers_id']);

  } elseif (isset($_GET['manufacturers_id']) && ($_GET['manufacturers_id'] != '') && (isset($_GET['filter_id']) && ($_GET['filter_id'] != ''))) {

	$get_vars = tep_draw_hidden_field('manufacturers_id', $_GET['manufacturers_id']) . tep_draw_hidden_field('filter_id', $_GET['filter_id']);

  } else {

	$get_vars = '';

	}
 

?>

		      <td align="right"><table><tr><td><?php echo tep_draw_form('export_to_file', FILENAME_MARGIN_REPORT, 'get', '') . tep_draw_hidden_field('action', 'export') . $get_vars . tep_draw_hidden_field('sql', $listing_sql); ?><input type="text" name="file" value="example_filename" onfocus="javascript:if(this.value=='example_filename') {this.value='';}" onblur="javascript:if(this.value=='') {this.value='example_filename'}"></td><td><?php echo '<input type="image" name="submit" src="' . DIR_WS_LANGUAGES . $language . '/images/buttons/button_export.gif" alt="' . TEXT_EXPORT_BUTTON . '" width="65" height="22"></form>'; ?></td></tr></table></td>

		  </tr>

        </table>

		</td>

      </tr>

    </table></td>

<!-- body_text_eof //-->

  </tr>

</table>

<!-- body_eof //-->
 

<!-- footer //-->

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

<!-- footer_eof //-->

<br>

</body>

</html>

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

Open in new window

0
Comment
Question by:EliteViper
  • 4
  • 3
7 Comments
 
LVL 108

Expert Comment

by:Ray Paseur
ID: 24404035
Wow! 734 lines of code?  It looks like the "important part" is near line 597.

Is it possible to tell us a little more?  When you say, "make this text box automatically update the associated table value" - are you talking about an HTML table or a database table?  Where does the inputted value come from?
0
 

Author Comment

by:EliteViper
ID: 24404348
lol yes i know a little too many lines but well whats happening is as you might be able to tell its actually very simple, the value comes from the table in the database and well as far as its origin, it will originate from this page however technically its created when a product is created however employees are making the products and will not have access to the costs so when the product is created then product_cost, product_cost2, product_cost3... will all have a default value of 0.00 and well then the point of this page will be to actually give these fields real cost values for example... heres what the page looks like and its perfect the way it looks..(see attached file) however changing the values does nothing and well i would like to have it when i enter the first value then press tab going to the next box that the value i just evtered updates accordingly in the DB.

hope that helps

Thanks :)
example.jpg
0
 
LVL 108

Accepted Solution

by:
Ray Paseur earned 500 total points
ID: 24407123
OK, if you want to update the data base every time the tab is depressed, you will need an AJAX-type application.  This code snippet teaches the general principles of AJAX.  I do not know where i got it originally but since it is signed "Rasmus" it might be "Lerdorf" of PHP fame.  It shows how to send the AJAX request when a link is clicked.  I will look for something that shows how to recognize a tab key.
I find a lot of this AJAX stuff a bit of a hype.  Lots of people have

been using similar things long before it became "AJAX".  And it really

isn't as complicated as a lot of people make it out to be.  Here is a

simple example from one of my apps.  
 

/* THE JAVASCRIPT TO CREATE THE AJAX INFRASTRUCTURE */

/* FUNCTION TO CREATE THE BROWSER-DEPENDENT REQUEST OBJECT */

function createRequestObject() 

{

    var ro;

    var browser = navigator.appName;

    if(browser == "Microsoft Internet Explorer")

    {

        ro = new ActiveXObject("Microsoft.XMLHTTP");

    }else

    {

        ro = new XMLHttpRequest();

    }

    return ro;

}
 
 

/* FUNCTION TO SEND THE REQUEST */

function sendReq(action) 

{

    http.open('get', 'ajaxprocessor.php?action='+action);

    http.onreadystatechange = handleResponse;

    http.send(null);

}
 
 

/* FUNCTION TO HANDLE THE RESPONSE */

function handleResponse()

{

    if(http.readyState == 4)

    {

        var response = http.responseText;

        var update = new Array();
 

        if(response.indexOf('|' != -1))

        {

            update = response.split('|');

            document.getElementById(update[0]).innerHTML = update[1];

        }

    }

}
 
 

/* CREATE THE OBJECT */

var http = createRequestObject();
 

/* END OF THE JAVASCRIPT */
 

This creates a request object along with a send request and handle

response function.  So to actually use it, you could include this js in

your page.  Then to make one of these backend requests you would tie it

to something.  Like an onclick event or a straight href like this:
 

<a href="javascript:sendReq('foo')">[Foo]</a>
 

That means that when someone clicks on that link what actually happens

is that a backend request to ajaxprocessor.php?action=foo will be sent.
 

In ajaxprocessor.php you might have something like this:
 

/* THE PHP TO HANDLE THE REQUEST FROM THE FRONT-END SCRIPT */

switch($_GET['action']) 

{

    case 'foo':

      // DO WHATEVER PROCESSING IS APPROPRIATE

      // THEN RETURN A RESPONSE STRING TO handleResponse()

      echo "foo|Foo done";

      break;

      // ETC...

}
 

Now, look at handleResponse.  It parses the "foo|Foo done" string and

splits it on the '|' and uses whatever is before the '|' as the dom

element id in your page and the part after as the new innerHTML of that

element.  That means if you have a div tag like this in your page:
 

<div id="foo">Waiting for Foo</div>
 

Once you click on that link, that will dynamically be changed to:
 

<div id="foo">Foo done</div>
 

That's all there is to it.  Everything else is just building on top of

this.  Replacing my simple response "id|text" syntax with a richer XML

format and making the request much more complicated as well.  Before you

blindly install large "AJAX" libraries, have a go at rolling your own

functionality so you know exactly how it works and you only make it as

complicated as you need.  Often you do not need much more than what I

have shown here.
 

Expanding this approach a bit to send multiple parameters in the

request, for example, would be really simple.  Something like:
 

function sendReqArg(action,arg) 

{

    http.open('get', 'ajaxprocessor.php?action='+action+'&arg='+arg);

    http.onreadystatechange = handleResponse;

    http.send(null);

}
 

And your handleResponse can easily be expanded to do more interesting 

things than just replacing the contents of a div.
 

-Rasmus (Lerdorf?)

Open in new window

0
Microsoft Certification Exam 74-409

Veeam® is happy to provide the Microsoft community with a study guide prepared by MVP and MCT, Orin Thomas. This guide will take you through each of the exam objectives, helping you to prepare for and pass the examination.

 
LVL 108

Expert Comment

by:Ray Paseur
ID: 24407197
Reading some of the literature, I think you want to fire your AJAX request when the field loses focus.  There are many ways that can happen, not just the tab key.  Some possibly useful links here:

http://www.codeproject.com/KB/dialog/TabKeyIntercept.aspx
http://www.yaldex.com/FSForms/TabKeyEmulation.htm
http://www.cs.tut.fi/~jkorpela/forms/tabbing.html

Best of luck with it, ~Ray
0
 

Author Closing Comment

by:EliteViper
ID: 31582264
Though im not using this exact solution it gave me the tools needed to figure out exactly what i needed :) thanks and i have a few more which im sure answers will be able to be found here :)
0
 

Author Comment

by:EliteViper
ID: 24410595
So now the update works in 1 place perfectly however ... i now need to convert this:

              <td class="dataTableContent" valign="top"><input name="<?php echo "update_products[" . $orders_products_id . "][cost]"; ?>" size="7" <?php if (ORDER_EDITOR_USE_AJAX == 'true') { ?>onChange="updateProductsField('update', '<?php echo $orders_products_id; ?>', 'products_cost', encodeURIComponent(this.value))"<?php } ?> value="<?php echo $order->products[$i]['cost']; ?>"></td>

to be used in this:

          case 'PRODUCT_LIST_COST':
            $lc_align = '';
            $lc_text = '&nbsp;' . tep_draw_input_field('products_cost', $currencies->format($listing['products_cost']), 'style="width: 60px"') . '&nbsp;';
            break;


i hate case things and $lc_text because i honestly don't know how to use them correctly.
0
 

Author Comment

by:EliteViper
ID: 24410671
I think i need something like this:

            $lc_text = '&nbsp;' . tep_draw_input_field('update_products[products_cost]', $currencies->format($listing['products_cost']), 'style="width: 60px"') . 'onChange=("updateProductsField('update', ' . $listing['products_id'] . 'products_cost', encodeURIComponent(this.value))")';

however obviously that doesn't work
0

Featured Post

Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

Join & Write a Comment

Entity Framework is a powerful tool to help you interact with the DataBase but still doesn't help much when we have a Stored Procedure that returns more than one resultset. The solution takes some of out-of-the-box thinking; read on!
Nothing in an HTTP request can be trusted, including HTTP headers and form data.  A form token is a tool that can be used to guard against request forgeries (CSRF).  This article shows an improved approach to form tokens, making it more difficult to…
The viewer will learn how to count occurrences of each item in an array.
Polish reports in Access so they look terrific. Take yourself to another level. Equations, Back Color, Alternate Back Color. Write easy VBA Code. Tighten space to use less pages. Launch report from a menu, considering criteria only when it is filled…

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now