Задать вопрос

Не могу сделать чтоб обновлять количество товара в корзине?

Делаю (велисипед) корзину небольшую и чтоб обновить количество товара вкорзине обновляется только одна позиция первая а остально не хочет хоть тресни
63731ff53a909347400214.png
файл типа
1<|>Аднесан<|>1<|>120<|>
2<|>Аднесан<|>10<|>120<|>
3<|>Аднесан<|>1<|>120<|>


$cart = file("./data/tmp_cart/" . @$ip . ".dat");

$quantity = 0;

$summa = 0;

  echo ('<div id="result"></div>');
  
  echo ('<div id="counts">');

   echo '<table align="center" border="0" cellpadding="5" cellspacing="5" width="100%" height="100%">';
   
   echo '<tr>
   <td class="mem_par" width="5%"><b>Id</b></td>
   <td class="mem_par" width="25%"><b>Имя</b></td>  
   <td class="mem_par" width="20%"><b>Количество</b></td>
   <td class="mem_par" width="5%"></td> 
   <td class="mem_par" width="20%"><b>Цена</b></td>    
   <td class="mem_par" width="20%"><b>Сумма</b></td> 
   <td class="mem_par" width="5%"></td>   
   </tr>';
   
foreach($cart as $line)
{
    if(!strripos($line, "<|>")) continue;
	
    $elem = explode("<|>",$line);
	 
  echo '<tr>
   <td class="mem_par" align="left">'.$elem[0].'</td>
   <td class="mem_par" align="left">'.$elem[1].'</td>  
   <td class="mem_par" align="left">
   <form name="forma" id="callbacks" enctype="multipart/form-data" action="" method="POST">
   <input type="hidden" name="id" value="'.$elem[0].'"/>
   <input type="hidden" name="name" value="'.$elem[1].'"/>
   <input type="text" size = "1" name="quantity" id="quantity" value="'.$elem[2].'">
   <input type="hidden" name="price" value="'.$elem[3].'"/>
   <input class="validator" type="text" name="validator"></td>
   <td class="mem_par" align="center">
   <input type="image" name="submit" id="btncontcall" src="./modules/widgets/readd.jpg" border="0" alt="Submit" style="width: 16px;" /></form></td>  
   <td class="mem_par" align="left">'.$elem[3].'</td>
   <td class="mem_par" align="left">'.$elem[2] * $elem[3].'</td>  
   <td class="mem_par" align="center"><a href="./cart.html?action=delete&id='.$elem[0].'" onclick="return confirmDelete();"><img src="modules/widgets/drop.png" title="Удалить?" ></a></td>   
   </tr>';
   
     $quantity += $elem[2];
	 
	 $summa += $elem[2] * $elem[3];
}

  echo '<tr>
  <td class="mem_par"></td>
  <td class="mem_par"></td>
  <td class="mem_par">'.$quantity.'</td>
  <td class="mem_par"></td>
  <td class="mem_par"></td>
  <td class="mem_par">'.$summa.'</td>
  <td class="mem_par"></td>
  </tr>';
   
  echo ('<tr>
  <td colspan="7" align="right"><br>В корзине <b>'.$quantity.'</b> единиц на сумму <b>'.$summa.'  ₴</b>.</td>
  </tr>');
  
  echo ('<tr>
  <td colspan="7"  align="right"><br><a href="./alphabetic.html" >Продолжить покупки</a></td>
  </tr>');
  
  echo '</table>';

  echo ('</div>');


/*$(document).ready(function () {
   $('#btncontcall').click(function () {
      $.ajax({
         type: "POST",
         url: "./modules/cart_add.php", // Адрес обработчика
         data: $('#callbacks').serialize(),
         error: function () {
            $("#result").html("Произошла ошибка!");
         },
         beforeSend: function () {
            $("#result").html("Обновлено...");
         },
         success: function (result) {
            $('#callbacks')[0].reset();
            $('#result').html(result);
            checkThis();
         }
      });
      return false;
   });
});




	        $(function(){
		  $("#btncontcall").click(function(){
		  $.ajax({
		  type: "POST",
		  url: "./modules/cart_add.php",
		  data: $("#callbacks").serialize(),
		  success: function(data)
		  {
			$("#callbacks")[0].reset();
		  }
		  });
		  return false;
		  });
	        });
*/

$(document).ready(function () {

    $("#btncontcall").click(function (event) {

        //stop submit the form, we will post it manually.
        event.preventDefault();

        // Get form
        var form = $('#callbacks')[0];

		// Create an FormData object 
        var data = new FormData(form);

		// disabled the submit button
        $("#btncontcall").prop("disabled", true);

        $.ajax({
            type: "POST",
            enctype: 'multipart/form-data',
            url: "./modules/cart_add.php",
            data: data,
            processData: false,
            contentType: false,
            cache: false,
            timeout: 600000,
            success: function (data) {
            //$("#btncontcall").append(data.item);
                $("#result").text(data);
                console.log("Обновлено... : ", data);
                $("#btncontcall").prop("disabled", false);

            },
            error: function (e) {

                $("#result").text(e.responseText);
                console.log("Произошла ошибка! : ", e);
                $("#btncontcall").prop("disabled", false);

            }
        });

    });

});


обработчик

if ($_SERVER["REQUEST_METHOD"] == "POST") {
	
//------------------------- start
// Если скрытое поле заполнили
if ($_POST['validator']!=''){
	
  die('Ботам ходу нет!');
  
}else{
	//var_dump($ip);
	
	$id = $_POST['id'];
	
	$name = $_POST['name'];
	
    $quantity = $_POST['quantity'];
	
    $price = $_POST['price'];
	
		$content = '';
		
		$file = file("../data/tmp_cart/" . $ip . ".dat");
		
		$zap = false;
		
		foreach($file as $line)
		{
		if(!strripos($line, "<|>")) continue;
		
			$elem = explode("<|>",$line);
			
			if ( $elem[0] == $id)
			{
				$content = $content . $id . "<|>" . $name . "<|>" . $quantity . "<|>" . $price . "<|>\n";
				
				$zap = true;
			}
			else $content = $content.$line;
		}
		if ( !$zap ) $content .= $id . "<|>" . $name . "<|>" . $quantity . "<|>" . $price . "<|>\n";
		
			if(!file_put_contents("../data/tmp_cart/" . $ip . ".dat",$content))
	        {
		       echo("Ошибка записи.");
	         }
	          else
	        {	 
               chmod( "../data/tmp_cart/" . $ip . ".dat", 0666 );
             //var_dump($ip);
             echo("Корзина обновлена!");			
	         }	
			  //echo "<script type='text/javascript'>setTimeout(\"location.replace('./cart.html')\", 1);</script>";


//------------------------- end
  }
}
  • Вопрос задан
  • 92 просмотра
Подписаться 1 Простой 3 комментария
Пригласить эксперта
Ответы на вопрос 2
sslion
@sslion
а ничего что формируешь свою форму с инпутами с одинаковыми id в каждой строчке...
Ответ написан
Комментировать
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
1) id="btncontcall" у вас повторяется в каждом выведенном элементе. По стандарту (да и чисто по логике), id - уникальный идентификатор (где уникальный - ключевое слово). На странице должен быть только один элемент с таким значением. Что легко проверить, заглянув в консоль и увидев кучу предупреждений о дублирующихся идентификаторах.
2) Не надо вешать обработчик на кнопку, вешайте на форм.субмит. Естественно айди формы тоже должно быть уникальным. Хотя в вашем случае айди вообще использовать не нужно, используйте либо класс, либо, что в данном случае гораздо логичнее, собственно тег form - $('form').on('submit', function(e){...});, в этом контексте this внутри функции будет сразу целевой формой, не надо выкрутасов с поиском текущей формы.

Тем более что ищете вы всегда первую, даже в неправильном коде: var form = $('#callbacks')[0]; всегда вернет первый элемент из списка форм, даже если там все будет правильно выбираться по идентификаторам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы