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ęć: 5
  • 2b.png (0,02 MB) - ściągnięć: 5
edytowany 3x, ostatnio: kamil21, 2019-06-03 17:38

Pozostało 580 znaków

2019-06-03 17:35
1

najpierw formatowanie posta.

Pozostało 580 znaków

2019-06-03 17:38
1
[mr_jaro ]:

zrobione

edytowany 2x, ostatnio: kamil21, 2019-06-03 17:39

Pozostało 580 znaków

2019-06-03 18:24
1
 WHERE idZamowienia = (SELECT MAX(idZamowienia) FROM zamowienia)

Robisz update zawsze na ostatnim rekordzie w bazie. Obojętnie ile masz elementów w koszyku, to zawsze będzie Ci ostatni z bazy zmieniać. Powinieneś w sesji trzymać ID elementu z koszyka jeszcze i to ID powinno być użyte w where.

Pozostało 580 znaków

2019-06-03 18:38
1

Właśnie nie na ostatnim bo np jak mam 3 rekordy w bazie zamowienia_has_czesci to mi zmienia wartość we wszystkich 3, to max(idZamowienia) from zamowienia to jest żeby mi brało ostatni rekord z tabeli zamówienia i tylko przy kolumnach z tym największym id zmieniało wartości. Mam w sesji id produktu zapisane jako id części co widać na screenach

edytowany 2x, ostatnio: kamil21, 2019-06-03 18:42

Pozostało 580 znaków

2019-06-03 18:48
1

Ok, nie zauważyłem, że update robisz na innej tabelce niż tej użytej w where. Ale problem i tak jest podobny. Cały czas nadpisujesz sobie dane, dlatego widzisz tylko dane z ostatniej części. Musisz w where jeszcze dodać sobie ID elementu z koszyka.

edytowany 1x, ostatnio: serek, 2019-06-03 18:49

Pozostało 580 znaków

2019-06-03 18:58
1

Dopisałem AND idCzesci='{$koszyk[' czesc']} ' i nie działa wgl

Pozostało 580 znaków

2019-06-03 20:18
1

Kurcze pomysł trochę, to co ja piszę nie jest pewnie całkowicie poprawne xD

Aktualnie tyle razy ile masz zamówień w koszyku (w sesji), tyle razy nadpisujesz sobie dane. Musisz w where przy robieniu update dać taki warunek, by zidentyfikować dokładnie rekord, który chcesz zmienić.

I nie kumam tego zdania:

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??

edytowany 2x, ostatnio: serek, 2019-06-03 20:20

Pozostało 580 znaków

2019-06-03 21:02
1

Zamówienie mam jedno, tylko ilość produktów może być większa. Wstawiam do bazy tyle rekordow ile jest produktów ale każdy rekord ma to samo idZamowienia. Chodzi mi w tym o to że jeżeli te wartości wstawiłem za pomocą insert to wszystko działało, w każdym wierszu dopisywalo mi inną wartość w każdej kolumnie a gdy zmieniłem insert na update to do każdego wiersza wstawia dane tylko ostatniego produktu. Przy insert dla 3 produktów wstawialo w 3 wierszach inne wartości do kolumn idCzesci, idKategorii i idMarki. Dla update i 3 produktów w każdym wierszu pojawiaja się dane w kolumnach idCzesci, idKategorii i idMarki takie same-przypisane do ostatniego produktu z koszyka, tak jakby pętla nie działała wgl

edytowany 2x, ostatnio: kamil21, 2019-06-03 21:05

Pozostało 580 znaków

2019-06-03 21:19
1

Przecież Ci tłumaczę, że sobie nadpisujesz dane, gdy robisz update.

1) Robisz insertem 3 wpisy.
2) Za pierwszym przejściem w update update'ujesz wszystkie 3 wpisy.
3) Za pierwszym przejściem w update update'ujesz wszystkie 3 wpisy.
4) Za pierwszym przejściem w update update'ujesz wszystkie 3 wpisy.
5) Więc na końcu masz dane tylko z ostatniego produktu we wszystkich 3 wpisach.

Musisz w jakiś sposób połączyć unikalny wpis z tabeli zamowienia_has_czesci z jej odpowiednikiem w koszyku. Np. za pomocą ID z zamowienia_has_czesci.

edytowany 1x, ostatnio: serek, 2019-06-03 21:20

Pozostało 580 znaków

2019-06-03 21:41
1

Ok, teraz już rozumiem, tylko nie mam pomysłu jak to zrobić. Jest to mój pierwszy program i pierwsza w życiu styczność z php dlatego mało ogarniam.

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