PHP MySQL Shopping Cart не обновляется в базе данных - PullRequest
0 голосов
/ 16 ноября 2010

Я пытаюсь разрешить пользователю обновлять количества в текстовых полях на странице, а затем обновлять существующие позиции в их корзине в базе данных новыми значениями текстовых полей на странице.

Количества необновляется, но ошибки не генерируются.

Я не вижу никаких проблем с моим кодом, и я просто в полной растерянности относительно того, что может быть причиной того, что это не работает.

Код:

<?php


     // If post is not null, then add selected data to corresponding sessionid in database.
if($_SESSION['last_access'] != null && $_REQUEST["product"] != null)
{
   // Sanitize information.
   $info = new SimpleSanitize('post', 'both');

   $product = $info->get('product');
   $quantity = $info->get('qty');
   $price = $info->get('price');
foreach($_POST['items'] as $p=>$q)
{
 $connection =
        mysql_connect("my01.tadah.com","blah","passsword");

 if($connection)
 {
  mysql_select_db("mysql_9269_dbase", $connection);

  mysql_query(
          "UPDATE mysql_9269_dbase.sessions SET qty='".$q."' WHERE product='".$p."'")
               or die(mysql_error());
  // Assume items added successfully.
  $ItemAddedMessage = "Quantities changed.";

  // Close connection to database.
  mysql_close($connection);
 }
 else
 $ItemAddedMessage = null;
}}

?>
<?php

//Include SimpleSanitize.
include 'simplesanitize.php';

// First attempt at PHP Sessions. Wish me luck.
$ItemAddedMessage = "Adjust your quantities, then click Purchase.";
// Start the session.
session_start();

if( !isset($_SESSION['last_access']) || (time() - $_SESSION['last_access']) > 71200 )
 $_SESSION['last_access'] = time();



// Open the DB connection and select the DB - creates the function getCreativePagerLyte()
include('configurations.php');

// Gets the data
$id=isset($_POST['id']) ? $_POST['id'] : '';
$search=isset($_POST['search']) ? $_POST['search'] : '';
$multiple_search=isset($_POST['multiple_search']) ? $_POST['multiple_search'] : array();
$items_per_page=isset($_POST['items_per_page']) ? $_POST['items_per_page'] : '';
$sort=isset($_POST['sort']) ? $_POST['sort'] : '';
$page=isset($_POST['page']) ? $_POST['page'] : 1;
$extra_cols=isset($_POST['extra_cols']) ? $_POST['extra_cols'] : array();

// Uses the creativeTable to build the table
include('creativeTable.php');

$ct=new CreativeTable();

// Data Gathering
$params['sql_query']           = 'SELECT product, qty, price FROM sessions WHERE sessionid = "'.session_id().'"'; // IMPORTANT: you must specify the fields and not use *
$params['search']              = $search;
$params['multiple_search']     = $multiple_search;
$params['items_per_page']      = $items_per_page;
$params['sort']                = $sort;
$params['page']                = $page;

// Layout Configurations (Most used - the commented lines are the default values)
$params['header']                 = 'Product, Quantity, Price'; // If you need to use the comma use &#44; instead of ,
$params['width']                = ',,';
//$params['search_init']           = true;
//$params['search_html']          = '<span id="#ID#_search_value">Search...</span><a id="#ID#_advanced_search" href="javascript: ctShowAdvancedSearch(\'#ID#\');" title="Advanced Search"><img src="images/advanced_search.png" /></a><div id="#ID#_loader"></div>';
//$params['multiple_search_init']  = 'hide';
$params['items_per_page_init']  = '5000'; // default: '10*$i';
//$params['items_per_page_all']    = '#TOTAL_ITEMS#';
//$params['sort_init']              = true;
//$params['sort_order']              = 'adt';
//$params['ajax_url']              = $_SERVER['PHP_SELF'];

$ct->table($params);
//$product_id = $ct->data[$key][0];

foreach($ct->data as $key => $value){
   $ct->data[$key][0]='<p name="product">'.$ct->data[$key][0].'</p>';
   $ct->data[$key][1]='<input id="quantity" name="items[' . $ct->data[$key][1] . ']" type="text" value="'.$ct->data[$key][1].'" style="background:#FFFFFF url(qty.png) no-repeat 4px 4px;
                        padding:4px 4px 4px 30px;
                        border:1px solid #CCCCCC;
                        width:220px;
                        height:18px;" />';
   $ct->data[$key][2]='<p name="price">'.$ct->data[$key][2].'</p>';
}

// If its an ajax call
if($_POST['ajax_option']!=''){

  if(strpos($_POST['ajax_option'],'items_per_page')!==false)
    $out_ajax['items_per_page']=utf8_encode($ct->draw_items_per_page());

  if(strpos($_POST['ajax_option'],'body')!==false)
    $out_ajax['body']=utf8_encode($ct->draw_body());

  if(strpos($_POST['ajax_option'],'pager')!==false)
    $out_ajax['pager']=utf8_encode(getCreativePagerLite($page,$ct->total_items,$ct->items_per_page));

  echo json_encode($out_ajax);
  exit;

}else{

  // Insert a Pager into the table (I used this CreativePager Lite version because its very easy to use, but you may use any pager system that you like)
  $ct->pager = getCreativePagerLite($page,$ct->total_items,$ct->items_per_page);

  $out = '<form name="ct_form" action="checkout.php" method="post">' . $out;
  $out=$ct->display();

}

?>

<!DOCTYPE xhtml PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN">
<head>



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

<title>Mild Steel Products | One Stop Fasteners</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link href="style.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="js/jquery.js" ></script>
<script type="text/javascript" src="js/jquery.tools.min.js"></script>
<script type="text/javascript" src="js/cufon.js"></script>
<script src="js/Kozuka_Gothic.js" type="text/javascript"></script>
<!-- Fix for Internet Explorer 9 Beta -->
<!--[if gte IE 9]>
<script type="text/javascript">
Cufon.set('engine', 'canvas');
</script>
<![endif]-->
<script type="text/javascript" charset="utf-8">
// <![CDATA[
$(document).ready(function(){
Cufon.replace('h1,h2,h3',  {    
});

        $(function() { 
                     $("h3.message").delay(3000).fadeOut(); 
        });

});
// ]]>
</script>
<script type="text/javascript" src="js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="js/creative_table.min.js"></script>
<script type="text/javascript" src="js/creative_table_ajax.min.js"></script>

</head>
<body>
<script language="javascript" type="text/javascript">
        function submit() {
                 document.getElementById('ct_form').submit();
                 }
</script>
<div class="main">
 <div class="header">
     <div class="logo"><a href="index.php"><img src="images/logo.png" border="0" alt="logo" /></a></div>
      <div class="menu">
        <ul>
<li><a href="index.php">Home</a></li>
<li><a href="products.php">Order Online</a></li>
<li><a href="products.php" class="active">Products</a></li>
<li><a href="about.php">About us</a></li>
<li><a href="contact.php">Contact us</a></li>
</ul>
      </div>
      <div class="clr"></div>
    </div>
    <div class="header_text2">
      <h2> Checkout</h2>
      <p>Adjust your quantities, then click purchase. </p>
      <div class="clr"></div>
    </div>
  <div class="clr"></div>
    <div class="top_sup_resize">
    <div class="menu2">
        <ul>
          <!--<li><a href="mildsteel_allthread.php" style="font-size:x-small; color:white;">Allthread</a></li>
          <li><a href="mildsteel_hexnuts.php" style="font-size:x-small; color:white;">Hex Nuts</a></li>
          <li><a href="mildsteel_washers.php" style="font-size:x-small; color:white;">Washers</a></li>
          <li><a href="mildsteel_hnbkss.php" style="font-size:x-small; color:white;">Hex Bolt &amp; Nut Kits, Setscrews</a></li>
          <li><a href="mildsteel_screws.php" style="font-size:x-small; color:white;">Screws</a></li>
          <li><a href="mildsteel_last.php" style="font-size:x-small; color:white;">Cup Head Bolts &amp; Nuts</a></li>-->
        </ul>
      </div>
      <div class="clr"></div>
    </div>
    <div class="clr"></div>
  <div class="body">
   <div class="body_left">
   <h2><?php echo '<a href="javascript:submit();">Purchase</a>'; ?></form></h2>
   <h3 class="message"><?php echo $ItemAddedMessage . $_REQUEST["quantity"]; ?></h3>
   <p></p>
   <div id="container">
  <?php echo $out;?>
</div>

   <p>&nbsp;</p></div>
     <div class="clr"></div>
  </div>
</div>
<div class="footer">
  <div class="footer_resize">
    <ul>
      <li><a href="index.php">home</a></li>
      <li><a href="products.php">order online</a></li>
      <li><a href="products.php">products</a></li>
      <li><a href="about.php">about</a></li>
      <li><a href="contact.php">contact</a></li>
    </ul>
    <p>Copyright © 2010, <a href="http://www.onestopfasteners.com.au/">One Stop Fasteners&reg;</a>. All Rights Reserved</p>
    <div class="clr"></div>
  </div>
</div>
</body>
</html>

Может кто-нибудь сказать мне, что я делаю неправильно?

Любая помощь очень ценится.

Спасибо!

Ответы [ 4 ]

1 голос
/ 16 ноября 2010

Поскольку вы не получаете никаких сообщений об ошибках, у вас есть три варианта:

Ваш $_SESSION["last_action"] или $_REQUEST["product"] равен нулю (используйте is_null () для проверки на нулевые значения)

Ваш $_POST["items"] пуст, вероятно, потому что в вашем коде нет проверки до того, как он будет выполнен.

OR

Ваш $connection неверен.

Эти три варианта являются наиболее логичными. Но это очень трудно определить с помощью этого вида кода.

Помимо этих возможностей, я полностью понимаю, что вы не можете выяснить, почему это не работает. Код действительно неясен, и вы должны рассмотреть возможность использования любого шаблона проектирования. Этот код будет кошмаром для поддержания.

Только мои два цента.

Удачи!

1 голос
/ 16 ноября 2010

Это не ваш ответ, но вы должны взглянуть, правда ...

http://en.wikipedia.org/wiki/SQL_injection

0 голосов
/ 16 ноября 2010

Стилистический совет: абсолютно не нужно создавать / закрывать дескрипторы mysql внутри цикла, как вы.Одно соединение можно использовать для выполнения нескольких запросов, и вы сэкономите на повторных подключениях / отключениях.Таким образом, вместо

while(...) {
   $con = msyql_connect(...);
   if (!$con) {
      ...
   }
   ... do stuff
   mysql_close($con);
}

измените на

$con = mysql_connect(...);
if (!$con) {
   ...
}
while(...) {
    ... do stuff
}
mysql_close($con);
0 голосов
/ 16 ноября 2010

Этот код представляет собой процедурный спагетти беспорядок. Я понятия не имею, с чего начать, и мне нужно будет запустить код на моей машине, чтобы отладить его. Я думаю, вам нужно вставить несколько var_dump здесь и там, чтобы выяснить, где данные не соответствуют ожидаемым.

Однако похоже, что проблема может быть в foreach($_POST['items'] as $p=>$q), и я подозреваю, что это должно быть что-то вроде:

foreach($_POST['items'] as $item) {
    $q = $item['q'];
    $p = $item['p'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...