Witam. Tworze taki mini sklep. Mam problem przy napisaniu koszyka. A konkretnie chodzi mi o sama edycje ilosci zamawianych sztuk. Po dodaniu produktu do koszyka, obok kazdego z nich wyswietla mi sie pole textowe do ktorego wpisuje ilosc sztuk. Problem polega na tym ze nie do konca wiem jak pobrac te dane z formularza, dodac do obliczen wyswietlajacych sume oraz calkowita ilosc. Prosze o pomoc.
Zapisz sobie cały koszyk w tablicy z elementami typu: id produktu, nazwa produktu, ilość i to aktualizuj. W formularzu też możesz używać tablic.
Ilość: <input type="text" name="produkt[3]" value="5">
Wtedy wartość takiej zmiennej odczytasz z PHP:
$_POST['produkt'][3] // = 5
Napisalem to w ten sposob. Doda tylko ze pisze w Code Igniterze.
widok:
<?php
if($data->num_rows() > 0)
{
foreach($data->result() as $item)
{
echo '<tr><td>'.$pozycja.'</td><td>'.$item->BOOK_Title.'</td><td><input type="text" name="produkt['.$pozycja.']" "value="'.$licznik.'"></td><td><td>'.form_submit('zmien', 'Zmien').'</td>'.number_format($price,2, '.', '').'zł</td><td>'.$this->input->post('il_szt').'</td><td>'.anchor('koszyk/deleteCards/'.$item->BOOK_ID,'X').'</td></tr>';
//echo '<tr><td>'.$ilosc.'</td><td>'.$data['name'].'</td><td>'.form_input('il_szt',$data['qty']).'</td><td>'.$data['price'].'</td><td>'.$data['subtotal'].'</td><td>'.anchor('site/deleteCards/'.$data['rowid'],'X').'</td></tr>';
}
}
?>
a to funkcje liczace:
function get_ilosc()
{
$nr = 0;
if(isset($_COOKIE['cookie']))
{
foreach($_COOKIE['cookie'] as $value)
{
$nr++;
$ilosc = $_POST['produkt'][$nr];
$zm = $ilosc;
}
return $zm;
}
else
{
$zm = 1;
return $zm;
}
redirect($_SERVER['HTTP_REFFERER']);
}
function sum_all()
{
$suma = 0;
if(isset($_COOKIE['cookie']))
{
$ilosc = $this->get_ilosc();
foreach($_COOKIE['cookie'] as $value)
{
if(isset($ilosc) && $ilosc>1)
{
$suma +=$value*$ilosc;
}
else
{
$suma+=$value;
}
}
return number_format($suma,2, '.', '');
}
else
return 0;
}
function counter()
{
$licznik = 0;
$var=0;
if(isset($_COOKIE['cookie']))
{
$ilosc = $this->get_ilosc();
foreach($_COOKIE['cookie'] as $value)
{
if(isset($ilosc) && $ilosc > 1)
{
$licznik++;
$var+=($licznik*$ilosc);
}
else
{
$var++;
}
}
return $var;
}
else
return 0;
}
i funkcja ktora wyswietla zawartosc
function order_product()
{
$widok['center'] = '';
$widok['left'] = $this->get_category();
$widok['right'] = $this->get_bestseller();
$widok['zakupy'] = $this->sum_all();
$widok['licznik'] = $this->counter();
$widok['tytul'] = 'Twoj koszyk';
//$licznik = $this->session->userdata('licznik') ? $this->session->userdata('licznik') : 0;
$pozycja = 0;
$ilosc = 0;
if(isset($_COOKIE['cookie']))
{
$widok['center'] = form_open('site/get_ilosc').'<table class="basket">
<tr><th>Pozycja</th><th style="text-align: center;">Nazwa</th><th>Ilość</th><th>Cena brutto</th><th>Wartość</th><th>Usuń</th></tr>';
foreach($_COOKIE['cookie'] as $name => $value)
{
$ilosc = $this->get_ilosc();
++$pozycja;
$widok['center'] .= $this->load->view('Ksiegarnia/order_product_view',array('data' =>$this->Kategorie_model->get_books_by_ID($name),'price' => $value, 'pozycja' => $pozycja, 'licznik' => $this->get_ilosc()), True);
}
$widok['center'] .= '</table>'.form_close();
$this->load->view('Ksiegarnia/index_logged', $widok);
}
else
{
$ilosc = 0;
$widok['center'] = form_open('site/change_value').'<table class="basket">
<tr><th>Pozycja</th><th style="text-align: center;">Nazwa</th><th>Ilość</th><th>Cena brutto</th><th>Wartość</th><th>Usuń</th></tr>';
$widok['center'] .= $this->load->view('Ksiegarnia/order_product_view_empty',array('data' =>'brak','ilosc'=>$ilosc), True);
$widok['center'] .= '</table>';
$this->load->view('Ksiegarnia/index_logged', $widok);
}
}
ale nie dziala, nie ropoznaje mi nawet tablicy $_POST
Z tego, co pamiętam, to w CodeIgniter nie ma dostępu do tablicy $_POST, tylko trzeba używać $this->input->post()
.
to nic nie daje, efekt jest ten sam, A co do $this->input->post() nie tyle co trzeba, ale mozna, jezeli kozystasz z helpera forms. Ale standardowe tablice $_POST i $_GET powinny dzialac, bo zapis form_open('contr/fun') to nic innego jak przeslanie metoda post formularza o action = "adres/contr/fun"