$arr = array(1 => $_POST['data'], 2 => $_POST['cena'], 3 => $_POST['col']);
$_SESSION['tovars'][] =" " . $arr[1] . " цена " . $arr[2] . " грн. количество " . $arr[3] . " шт. <br>";
Ну я присваивал $_SESSION['tovars'] = Arrey
$i = isset ( $_SESSION['i'] ) ? $_SESSION['i'] : 0;
...
$_SESSION['products'][$i]['data'] = $_POST['data'];
$_SESSION['products'][$i]['cena'] = $_POST['cena'];
$_SESSION['products'][$i]['col'] = $_POST['col'];
$_SESSION['i'] = ++$i;
...
Это тоже совсем не нужно. Вот так всё будет работать., плюс сохрани дополнительную переменную для кол-во позиций в корзине (для индекса текущего добавления)
$_SESSION['products'][] = array(1 => $_POST['data'], 2 => $_POST['cena'], 3 => $_POST['col']);
Это тоже совсем не нужно