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

Делаю (велисипед) корзину небольшую и чтоб обновить количество товара вкорзине обновляется только одна позиция первая а остально не хочет хоть тресни
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 просмотра
Пригласить эксперта
Ответы на вопрос 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]; всегда вернет первый элемент из списка форм, даже если там все будет правильно выбираться по идентификаторам.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы