Adaugare produs nou in $_SESSION (cos de cumparaturi)

Secţiune dedicată începatorilor.

Moderatori: Moderatori, Start Moderator

mmscm
New Member
Mesaje: 3
Membru din: Joi Sep 15, 2016 2:04 pm

Adaugare produs nou in $_SESSION (cos de cumparaturi)

Mesajde mmscm » Joi Mar 23, 2017 8:10 pm

Salut,

Incerc de cateva zile sa rezolv o problema cu privire la adaugare unui nou element in array.

In pagina

- daca se adauga acelasi produs in cos, crestem cantiatea cu x (rezolvat);
- daca se adauga acelasi produs in cos, iar marimea ($_POST['marime']) este diferita atunci, dublam produsul si adaugam noua Marime (problema).

Problema este aici:

Cod: Selectaţi tot

elseif($values['idProdus'] == $_POST['sesiuneID'] && $values['NumeMarime'] != $NumeMarime)
                                                {

                                                  echo "Dubleaza";
                                                //Dubeaza produsul cu acelasi id si marime diferita
                                                $count = count($_SESSION['CosCumparaturi'])+1;

                                                $produse_array = array(
                                                                'ssid'      =>  $_POST['ssid'],
                                                                'idProdus'      =>  $_POST['sesiuneID'],
                                                                'TitluProdus'   =>  $rowFromProduse['TitluProdus'],
                                                                'Cantiate'      =>  $_POST['cantitate'],
                                                                'PretTotal'     =>  $rowFromProduse['pret_total'],
                                                                'idUniq'        =>  $idUniq,
                                                                'NumeMarime'    =>  $NumeMarime
                                                                    );

                                                $_SESSION['CosCumparaturi'][$count] = $produse_array;


                                                }



__________________________________________________________
codul complet
__________________________________________________________


Cod: Selectaţi tot

    function AdaugaInCos()
    {
        global $link;

        if(isset($_POST['btnAdaugainCos']) && isset($_POST['cantitate']) && is_numeric($_POST['cantitate']) && isset($_POST['ssid']) && isset($_POST['marime']) && isset($_POST['sesiuneID']) && is_numeric($_POST['sesiuneID']))
            {
                $sesiuneID = mysqli_real_escape_string($link, $_POST['sesiuneID']); // sesiuneID este idProduse din tabelul `produse`
                $cantitate = mysqli_real_escape_string($link, $_POST['cantitate']); // cantitatea obtinuta din detalii produs

                $qCheckisValidID = mysqli_query($link, "SELECT * FROM produse WHERE idProduse='$sesiuneID'");
                $rowFromProduse = mysqli_fetch_array($qCheckisValidID);

                //obtinem ID Marime si idUniq
                $idUniqidMarime = mysqli_real_escape_string($link, $_POST['marime']);
                $explode = explode("|",$idUniqidMarime);
                $NumeMarime = mysqli_real_escape_string($link, $explode[0]);
                $idUniq = mysqli_real_escape_string($link, $explode[1]);

                    if(mysqli_num_rows($qCheckisValidID)>0) // verificam daca produsul din cos exista in db
                        {
                            if(isset($_SESSION['CosCumparaturi'])) // verificam daca sesiunea este setata
                                {
                                    //punem produsul in cos
                                    $item_array_id = array_column($_SESSION["CosCumparaturi"], "idProdus");
                                    if(!in_array($_POST['sesiuneID'], $item_array_id))
                                        {
                                            $count = count($_SESSION['CosCumparaturi']);

                                            $produse_array = array(
                                                            'ssid'      =>  $_POST['ssid'],
                                                            'idProdus'      =>  $_POST['sesiuneID'],
                                                            'TitluProdus'   =>  $rowFromProduse['TitluProdus'],
                                                            'Cantiate'      =>  $_POST['cantitate'],
                                                            'PretTotal'     =>  $rowFromProduse['pret_total'],
                                                            'idUniq'        =>  $idUniq,
                                                            'NumeMarime'    =>  $NumeMarime
                                                                );
                                            $_SESSION['CosCumparaturi'][$count] = $produse_array;

                                        }
                                        else
                                        {
                                            // daca produsul este deja adaugat in cos, atunci crestem cantiatea cu + 1
                                            foreach($_SESSION["CosCumparaturi"] as $keys => $values)
                                            {

                                             if($values['idProdus'] == $_POST['sesiuneID'] && $values['NumeMarime'] == $NumeMarime)
                                                {

                                                $_SESSION['CosCumparaturi'][$keys]['Cantiate']  =  $_SESSION['CosCumparaturi'][$keys]['Cantiate'] + $_POST['cantitate'];

                                                }
                                                elseif($values['idProdus'] == $_POST['sesiuneID'] && $values['NumeMarime'] != $NumeMarime)
                                                {

                                                  echo "Dubleaza";
                                                //Dubeaza produsul cu acelasi id si marime diferita
                                                $count = count($_SESSION['CosCumparaturi'])+1;

                                                $produse_array = array(
                                                                'ssid'      =>  $_POST['ssid'],
                                                                'idProdus'      =>  $_POST['sesiuneID'],
                                                                'TitluProdus'   =>  $rowFromProduse['TitluProdus'],
                                                                'Cantiate'      =>  $_POST['cantitate'],
                                                                'PretTotal'     =>  $rowFromProduse['pret_total'],
                                                                'idUniq'        =>  $idUniq,
                                                                'NumeMarime'    =>  $NumeMarime
                                                                    );

                                                $_SESSION['CosCumparaturi'][$count] = $produse_array;


                                                }


                                            }

                                        }




                                }
                                else
                                {
                                    //daca sesiunea nu este setata, o setam!
                                    $produse_array = array(
                                                    'ssid'          =>  $_POST['ssid'],
                                                    'idProdus'      =>  $_POST['sesiuneID'],
                                                    'TitluProdus'   =>  $rowFromProduse['TitluProdus'],
                                                    'Cantiate'      =>  $_POST['cantitate'],
                                                    'PretTotal'     =>  $rowFromProduse['pret_total'],
                                                    'idUniq'        =>  $idUniq,
                                                    'NumeMarime'    =>  $NumeMarime
                                                         );
                                    $_SESSION['CosCumparaturi'][0] = $produse_array;

                                }


                        }

            }

    }


Am atasat si cateva fotografii:

1: https://ibb.co/e9wCYv
prima actiune: https://ibb.co/kULH0a
a doua actiune: https://ibb.co/nNzXYv
a treia actiune: https://ibb.co/dGT4fa
a patra actiune: https://ibb.co/hzTgRF

Va multumesc si astept sugestiile voastre!



takedown
Average Member
Mesaje: 153
Membru din: Joi Feb 07, 2013 8:50 pm
Contact:

Re: Adaugare produs nou in $_SESSION (cos de cumparaturi)

Mesajde takedown » Joi Mar 23, 2017 9:53 pm

Ai foarte multe structuri de control imbracate in alte structuri de control, nu ceva de bine.In cazul in care ceva nu merge bine si nu iti dai sema imediat despre ce-i vorba, e tare posibil sa verifici tot codul, incerca pe cat posibil sa nu ai structuri de control imbracate in alte structuri de control.

Foarte buna ideea de a folosi o sesiune pentru cosul de cumparaturi, in sesiune stochezi ID-ul produsului si alte detalii tehnice despre produs, insa observ ca tu stochezi totul despre produs.

Eu ti-as sugera sa folosesti o structura de genul pentru cosul de cumparaturi:

Cod: Selectaţi tot

$_SESSION['cos_de_cumparaturi'] = [
    [
         'id' => 1,
         'variatii' => [
             ['cantitate' => 2, 'culoare' => 'verde'],
             ['cantitate' => 3, 'culoare' => 'roz'],
         ],
    ],
   
    [
         'id' => 2,
         'variatii' => [
             ['cantitate' => 5, 'culoare' => 'verde'],
             ['cantitate' => 9, 'culoare' => 'roz'],
         ],
    ],
];

mmscm
New Member
Mesaje: 3
Membru din: Joi Sep 15, 2016 2:04 pm

Re: Adaugare produs nou in $_SESSION (cos de cumparaturi)

Mesajde mmscm » Sâm Mar 25, 2017 12:04 am

Multumesc pentru sugestie.

Conform zicalei "drumul cel mai scurt este cel pe care il cunosti", am hotarat sa raman tot la varianta mea. :)

Intre timp am rezolvat problema mea, eliminand:

Cod: Selectaţi tot

 elseif($values['idProdus'] == $_POST['sesiuneID'] && $values['NumeMarime'] != $NumeMarime)
                                                {

                                                  echo "Dubleaza";
                                                //Dubeaza produsul cu acelasi id si marime diferita
                                                $count = count($_SESSION['CosCumparaturi'])+1;

                                                $produse_array = array(
                                                                'ssid'      =>  $_POST['ssid'],
                                                                'idProdus'      =>  $_POST['sesiuneID'],
                                                                'TitluProdus'   =>  $rowFromProduse['TitluProdus'],
                                                                'Cantiate'      =>  $_POST['cantitate'],
                                                                'PretTotal'     =>  $rowFromProduse['pret_total'],
                                                                'idUniq'        =>  $idUniq,
                                                                'NumeMarime'    =>  $NumeMarime
                                                                    );

                                                $_SESSION['CosCumparaturi'][$count] = $produse_array;


                                                }


Ganduri bune!


Înapoi la “PHP Incepători”

Cine este conectat

Utilizatori ce ce navighează pe acest forum: Niciun utilizator înregistrat și 104 vizitatori