2010-11-16 3 views
0

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

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

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

Код:

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

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

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

Спасибо!

ответ

1

Это не ваш ответ, но вы должны смотреть, на самом деле ...

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

+0

Чувак, я уже обрабатывать SQL-инъекции с помощью дезинфицирующего все входные данные перед его отправкой в ​​качестве wuery в базу данных. Но спасибо. – 2010-11-16 13:03:38

+0

Нет, вы не видите 'foreach ($ _ POST ['items'] as $ p => $ q)', ​​который не подвергается санитарной обработке и не переходит прямо в запрос. Я думаю, вам нужно будет использовать 'foreach ($ info-> get ('items') как $ p => $ q)', ​​но я никогда не использовал класс, который вы используете для санитарии, и я основываю это просто на том, что окружающий код. – Treffynnon

+0

@Treffynnon, я был, но прежде чем я разместил здесь код, я внес небольшое изменение в имена переменных. Я еще не изменил их в разделе санитарии. – 2010-11-16 13:09:57

0

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

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

foreach($_POST['items'] as $item) { 
    $q = $item['q']; 
    $p = $item['p']; 
} 
1

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

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

вашего $_POST["items"] пуст, скорее всего, потому что нет никакой проверки в коде, прежде чем это выполнить д.

ИЛИ

Ваш $connection не является правильным.

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

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

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

Удачи вам!

0

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

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

Изменение к

$con = mysql_connect(...); 
if (!$con) { 
    ... 
} 
while(...) { 
    ... do stuff 
} 
mysql_close($con); 
Смежные вопросы