pętla w php nie widzi obiektów z sesii

Odpowiedz Nowy wątek
2019-06-03 17:33
1

Witam. Mam problem z pętlą,chcę aktualizować wartości w tabeli jednak mi to nie wychodzi taki kod ```

$polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
            foreach ($_SESSION['koszyk'] AS $koszyk) {
            $zapytanie = "UPDATE `zamowienia_has_czesci` SET idCzesci='{$koszyk['czesc']}', idKategorii ='{$koszyk['kategoria']}', idMarki ='{$koszyk['marka']}' WHERE idZamowienia = (SELECT MAX(idZamowienia) FROM zamowienia)";
            mysqli_query($polaczenie, $zapytanie);
            }

wstawia mi owszem do bazy kilka rekordów zależnie od tego ile mam produktów natomiast widzi tak jakby tylko ostatnie wartośći ze zmiennej $koszyk[czesc] itd
na 1 screenie pokazane jest które wartosci są wstawiane
a za to taki kod ```

$polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
            foreach ($_SESSION['koszyk'] AS $koszyk) {
            $zapytanie = "INSERT INTO `zamowienia_has_czesci`(`idZamowienia`, `idCzesci`, `idKategorii`, `idMarki`) VALUES ('', '{$koszyk['czesc']}', '{$koszyk['kategoria']}', '{$koszyk['marka']}')";
            mysqli_query($polaczenie, $zapytanie);
            }```

wstawia to co jest zaznaczone na 2 screenie czyli dokładnie to co mi potrzeba jednak zamiast wstawiania muszę robić aktualizację bo wczesniej są wstawiane wartosci do innej kolumny w tej tabeli.
Jak zrobić zeby ten kod z update wstawiał mi tak samo wartosci bo bazy jak insert czyli żeby widział poprzednie wartośći wyciągane z $koszyk a nie tylko przypisane do ostatniego produktu??

  • 1b.png (0,01 MB) - ściągnięć: 6
  • 2b.png (0,02 MB) - ściągnięć: 6
edytowany 3x, ostatnio: kamil21, 2019-06-03 17:38

Pozostało 580 znaków

2019-06-03 21:44
1

Na początek, to po zrobieniu każdego insert możesz sobie do sesji wpisać dodatkowo ID z zamowienia_has_czesci. Potem tego użyjesz przy update.

Pozostało 580 znaków

2019-06-04 06:50
1

Tylko ze u mnie dla danego zamówienia id w tabeli zamowienia_has_czesci jest takie samo w zależności od ilości produktów, może być nawet 100 z tym samym idZamowienia

Pozostało 580 znaków

2019-06-04 14:24
1

Ale ja nie mówię od IdZamówienia, tylko o unikalnym ID dla rekordu w zamowienia_has_czesci

Pozostało 580 znaków

2019-06-04 16:26
1

Id w tabeli zamowienia_has_czesci bez problemu mogę zrobić i ustawiać przy insercie unikalne wartości tylko co później, jak wpisze we where AND id=MAX(id) FROM zamowienia_has_czesci to mi i tak zmieni tylko ostatni rekord więc będzie to samo, musiałbym jakoś zaczynać np od 10 i do 13 update'owac jeśli będą 3 nowe rekordy dodane wcześniej insertem, nie wiem jak dać jeszcze ten warunek żeby pętla wykonała się tyle razy ile jest produktów w koszyku i zaczynała od rekordu np o 3 mniejszego niż ostatni i szła do ostatniego.

Pozostało 580 znaków

2019-06-04 16:37
1

Chyba że jest możliwość do tego inserta ```

 $polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
            foreach ($_SESSION['koszyk'] AS $koszyk) {
            $zapytanie = "INSERT INTO `zamowienia_has_czesci`(idZamowienia) SELECT idZamowienia FROM zamowienia ORDER BY idZamowienia DESC LIMIT 1";
            mysqli_query($polaczenie, $zapytanie);
            } ```

wkleić jakoś te dane idCzesci='{$koszyk['czesc']}', idKategorii ='{$koszyk['kategoria']}', idMarki ='{$koszyk['marka']}' żeby mi od razu wstawiało wszystko bo bazy,wtedy UPDATE by mi już nie był potrzebny. Ale chyba nie skoro w tym insercie kopiuje już wartości z tabeli zamowienia

edytowany 2x, ostatnio: kamil21, 2019-06-04 16:40

Pozostało 580 znaków

2019-06-04 17:08
1

Ale czemu robisz id=MAX(id) FROM zamowienia_has_czesci?? To jest bez sensu. Masz tam przypisać ID, które pobierzesz do produktu w koszyku po odpaleniu insert. Wstawiasz je do sesji, a potem przypisujesz w where.

foreach ($_SESSION['koszyk'] AS $koszyk) {
     $zapytanie = "UPDATE `zamowienia_has_czesci` SET idCzesci='{$koszyk['czesc']}', idKategorii ='{$koszyk['kategoria']}', idMarki ='{$koszyk['marka']}' WHERE id = '{$koszyk['id']}'";
     mysqli_query($polaczenie, $zapytanie);
}
edytowany 3x, ostatnio: serek, 2019-06-04 17:11

Pozostało 580 znaków

2019-06-04 17:28
0

A o coś takiego chodziło, teraz to ma sens przyznaję, ale mam jeszcze jedno pytanie, insert robię w innym pliku php niż mam tworzone zmienne w koszyku. Zamówienie jest wysyłane później, gdy już wszystkie zmienne w koszyku są ustawione. Więc jak pobrać to id z bazy i wrzucić do zmiennych w koszyku skoro ten plik nie ma podglądu do pliku w którym tworzę koszyk?

Pozostało 580 znaków

2019-06-04 21:16
0

A i jeszcze pozostaje problem taki ze musiałbym jakoś zaliczać ile rekordów dodaje do bazy insertem i tyle samo potem pobierać i wrzucać do sesji

Pozostało 580 znaków

2019-06-04 21:44
0

Okej, udało mi się coś takiego zrobić, dodałem w tabeli zamowienia_has_czesci kolumnę gdzie każdy wiersz ma swoje unikalne id, stworzyłem także zapytanie które mi pokazuje te wiersze, tyle ile razy były dodane więc już blisko sukcesu, pozostało teraz tylko stworzyć kod który mi to pobierze z bazy i wstawi do zmiennych sesyjnych ale nie potrafię tego zrobić. Mógłby mi ktoś pomóc stworzyć taki KOD razem z pętla , będę bardzo wdzięczny, moje zapytanie które pobiera odpowiednie rekordy jest takie SELECT Id FROM zamowienia_has_czesci WHERE idZamowienia=(SELECT MAX(idZamowienia) FROM zamowienia_has_czesci) ;. Dla ułatwienia zrobił bym to w osobnym pliku PHP i przeniósł do niego ten kod z UPDATE.

Pozostało 580 znaków

2019-06-04 22:16
0

tyle udało mi się samemu zrobić,prosiłbym o pomoc w dokończeniu```

<?php
session_start();
print_r($_SESSION);

require_once"connect.php";
$polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
            foreach ($_SESSION['koszyk2'] AS $koszyk) {
            $zapytanie = "Select id FROM zamowienia_has_czesci WHERE idZamowienia=(SELECT MAX(idZamowienia) FROM zamowienia_has_czesci)";
            mysqli_query($polaczenie, $zapytanie);
            }

        if(!isset($_SESSION['koszyk2'])) $_SESSION['koszyk2']=array();
        if(isset($_SESSION['koszyk2'])) echo 'Istnieje już koszyk2'.'<br>';
        //$tmp=array('idproduktu'=>$_SESSION['idprodukru']);
            //else $_SESSION['koszyk2']=$tmp;

        echo '<form action="" method="POST">';
        foreach ($_SESSION['koszyk2'] as $sub => $key)
        echo 'idproduktu: '.$key['idproduktu'];

        foreach ($_SESSION['koszyk2'] as $sub => $key)
        'idproduktu: '.$key['idproduktu'];

        echo '</form>';

        $polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
            foreach ($_SESSION['koszyk'] AS $koszyk) {
            $zapytanie = "UPDATE `zamowienia_has_czesci` SET idCzesci='{$koszyk['czesc']}', idKategorii ='{$koszyk['kategoria']}', idMarki ='{$koszyk['marka']}' WHERE id = '{$koszyk2['idproduktu']}'";
            mysqli_query($polaczenie, $zapytanie);
        }

?>

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0