Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Jak przepisać dane z tablicy do sesji w pętli
Forum PHP.pl > Forum > Przedszkole
Kamil21
Witam. Mam pewnie blachy problem ale nie umiem sobie z nim poradzić, pobieram dane z bazy, potrzebuję id z tabeli. Mam na ten moment coś takiego jak Array ([0]->7 [id]->7) Array ([0]->8 [id]->8) Array ([0]->9 [id]->9) , potrzebuję włożyć do sesji te liczby 7,8,9 ponieważ są to id wierszy które muszę potem update'owac. Kod mam taki
  1. require_once"connect.php";
  2. $link = mysqli_connect('localhost','root','','konfigurator2');
  3. if(mysqli_connect_errno()){
  4. printf('nie udalo sie polaczyc:%s',mysqli_connect_error());
  5. exit();
  6. }
  7. if ($wynik = mysqli_query($link, "SELECT id FROM zamowienia_has_czesci WHERE idZamowienia=(SELECT MAX(idZamowienia) FROM zamowienia_has_czesci);"))
  8. {
  9. $iloscRekordow = mysqli_num_rows($wynik);
  10. echo "zapytanie zwróciło $iloscRekordow rekordow.";
  11. }
  12. while ($rekord = mysqli_fetch_array($wynik))
  13. //{
  14. //echo 'Kategoria o nazwie: ' .$wynik["id"] . '<br/>';
  15.  
  16. print_r($rekord);


Jeśli napisze $_SESSION['idproduktu'] =$rekord[0]; to wpisuje mi tam tylko ostatnią wartość czyli 9. Jeśli to samo włożę do pętli to wpisuje mi owszem wszytkie wartości ale ciągiem czyli wychodzi 789 a mi potrzebne żeby w pierwszym 'obrocie' było 7,w drugim 8, w trzecim 9 tak żebym mógł sobie po kolei robić update 7 rekordu, następnie 8 i później 9.$_SESSION['idproduktu '] =$rekord['id'] daje ten sam wynik. Proszę o pomoc i najlepiej jakiś kawałek kodu bo męczę się z tym już 4 dzień. To mój pierwszy program w PHP i styczność z programowaniem i do sukcesu brakuje mi tylko tego właśnie
nospor
Musisz to wlozyc do tablicy

  1. $_SESSION['idproduktu'] = [];
  2. while ($rekord = mysqli_fetch_array($wynik)) {
  3. $_SESSION['idproduktu'][] = $rekord['id']
  4. }


przenosze

Cytat
zamowienia_has_czesc
Juz tak na marginesie, bo zawsze mnie to interesuje:
mozesz mi wyjasnic co oznacza slowo "has" w tej tabeli? Czyzby to bylo z angielskiego "ma" ? Jesli tak to czemu tak bezsensownie laczysz polski i angielski? Bo jesli to lans to raczej to daje -10 do lansu wink.gif
Kamil21
Dziękuję, teraz już mam Array([0]->7 [1]->8) czyli blisko rozwiązania jednak pokazuje mi błąd Array to string conversation w takim updacie
  1. $polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
  2. foreach ($_SESSION['koszyk'] AS $koszyk) {
  3. $zapytanie = "UPDATE `zamowienia_has_czesci` SET idCzesci='{$koszyk['czesc']}', idKategorii ='{$koszyk['kategoria']}', idMarki ='{$koszyk['marka']}' WHERE id = '$_SESSION[idproduktu]' ";
  4. mysqli_query($polaczenie, $zapytanie);
  5. }

Wcześniej taki sam update działał

Nie wiem co znaczy, program sam mi tak zrobił bodajże workbench kiedyś to tak napisałem questionmark.gif
nospor
Nie nie nie. Rozwiazanie masz poprawne. Ino ze ty zle sie do danych dobierasz potem to juz nie moja wina.

Skoro to jest tablica to pozniej masz zrobic FOREACH by poniej przeleciec i wykonac UPDATE dla kazdego ID. Od biedy mozesz zrobic jeden UPDATE poprzedzony poprzez IMPLODE na idproduktu, pod warunkiem rzecz jasna, zze wszystkie te ID maja miec taki sam update
Kamil21
Eeee niewiele mi to mówi, jak już wspominałem, nie znam się na php, sam nie wiem jakim cudem udało mi się już tyle zrobić ale jakoś muszę to odciągnąć do końca więc jakbyś mógł to proszę o kawałek kodu, nie mają mieć do końca takiego samego bo mają być wpisywane inne idKategorii, części i marki ale to już posiadam zrobione w pętli w koszyku stąd te wartości koszyk[cześć] itp
sratatata
  1. <?php
  2.  
  3. $rekord = array(1,2,3,4,5,6);
  4.  
  5. $_SESSION['idproduktu'] = [];
  6. foreach ($rekord as $key) {
  7. $_SESSION['idproduktu'][] = $key;
  8. }
  9.  
  10. foreach($_SESSION['idproduktu'] as $key )
  11. {
  12.  
  13. print $key;
  14.  
  15. }
  16.  
  17. ?>

Widzisz różnicę
Kamil21
Takie coś mi wyświetla tak samo ciągiem 789, takie coś już miałem wcześniej
sratatata
Zle sie dobierasz do tablicy sesji

  1. $_SESSION[idproduktu]

Zawiera tablice. Ty tylko ja wywolujesz nie podajac indeksow.
Kamil21
Teraz mam coś takiego jako wynik 789Array([0]->7 [1]->8 [2]->9)
sratatata
Jesli sesja koszyk zawiera liczby to ma to wygladac tak:

  1. $_SESSION[idproduktu][$koszyk];
Kamil21
Koszyk zawiera liczby ale są tam inne dane, id części, kategorii, marki itp, nie ma tam tego id ze zmiennej idproduktu
sratatata
  1. $polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
  2. $i=0;
  3. foreach ($_SESSION['koszyk'] AS $koszyk) {
  4. $zapytanie = "UPDATE `zamowienia_has_czesci` SET idCzesci='{$koszyk['czesc']}', idKategorii ='{$koszyk['kategoria']}', idMarki ='{$koszyk['marka']}' WHERE id = '$_SESSION[idproduktu][$i]' ";
  5. $i++;
  6. mysqli_query($polaczenie, $zapytanie);
  7. }


A wogole to powinno byc tak:

  1. id = " . $_SESSION['idproduktu'][$i];
Kamil21
Rozumiem że teraz mi będzie szło od zera i się zwiększało o ilość obrotów pętli, np dla 4 to będzie 0 1 2 3, tak nie może być ponieważ to ma się zaczynać od pierwszego pobranego id czyli 7 o ilość pobranych liczb czyli 2(do 9). Mogę napisać coś takiego i=$_SESSION['idproduktu']questionmark.gif Zadziała mi to??

Czyli dobrze myślę
sratatata
  1. UPDATE tabela SET nazwapola ='101'
  2. where id IN(1,2,7,9)
Kamil21
zrobiłem to co napisalem z tym $i i taki błąd-syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) .To co napisałeś tytaj ze sztywno wpisanymi danymi mnie nie ratuje bo te liczby 7 8 9 ssą pobierane z bazy i równie dobrze może to być 21 22 23 więc musi sie to wszystko automatycznie odbywać
sratatata
Cytat(Kamil21 @ 6.06.2019, 14:04:57 ) *
zrobiłem to co napisalem z tym $i i taki błąd-syntax error, unexpected '' (T_ENCAPSED_AND_WHITESPACE), expecting identifier (T_STRING) or variable (T_VARIABLE) or number (T_NUM_STRING) .To co napisałeś tytaj ze sztywno wpisanymi danymi mnie nie ratuje bo te liczby 7 8 9 ssą pobierane z bazy i równie dobrze może to być 21 22 23 więc musi sie to wszystko automatycznie odbywać

Przeciez to przyklad. Przerob to do swoich potrzeb. No juz to to chyba potrafisz skoro wiesz jak to ma byc.
Kamil21
zadziałało w końcu coś takiego
  1. $_SESSION['idproduktu'] = [];
  2. while ($rekord = mysqli_fetch_array($wynik))
  3. {
  4. //echo 'Kategoria o nazwie: ' .$wynik["id"] . '<br/>';
  5. $_SESSION['idproduktu'][] = $rekord['id'];
  6. }
  7.  
  8.  
  9.  
  10. print_r($_SESSION['idproduktu']);
  11. $i=$_SESSION['idproduktu'][0];
  12. print_r($i);
  13.  
  14.  
  15. $polaczenie = new mysqli($host,$db_user,$db_password,$db_name);
  16. foreach ($_SESSION['koszyk'] AS $koszyk) {
  17. $zapytanie = "UPDATE `zamowienia_has_czesci` SET idCzesci='{$koszyk['czesc']}', idKategorii ='{$koszyk['kategoria']}', idMarki ='{$koszyk['marka']}' WHERE id = '$i'";
  18. $i++;
  19. mysqli_query($polaczenie, $zapytanie);
  20. }


Bardzo Wam dziękuję za pomoc
nospor
Przeciez to robi dokladnie to samo co sratata podal ci w poscie nr 12. Ba, jego robi nawet lepiej bo bedzie dzialac nawet jak ID nie sa pokolei.
No ale ty nawet nie raczyles sprawdzic tylko wysnules hipoteze jak to dziala, a rzecz jasna twoja hipoteza byla zla... No nic...
Kamil21
wiem ze ie ten temat ale może ktoś by mi pomógł jeszcze w tym,zrobiłem w rejestracji hashowanie haseł takim kodem i wszytko jest okej,pojawia się w bazie jako hash tylko problem jest przy zalogowaniu,hasło nie działa,muszę wpisać ten hash żeby mnie puściło na konto
  1. $haslo_hash = password_hash($haslo1, PASSWORD_DEFAULT);
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2024 Invision Power Services, Inc.