Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Usuwanie rekordu z tablicy
Forum PHP.pl > Forum > Przedszkole
Skaras
Witam

Mam pewną funkcję, która dodaje do tabeli nowy rekord (złożony z trzech pól) przy każdym wywołaniu:

  1. public function dodaj_do_koszyka($iv_id_produktu)
  2. {
  3. $sql = "SELECT nazwa, cena FROM produkty WHERE id_produktu='$iv_id_produktu'";
  4. $a_produkt = $this->o_db->GetRow($sql);
  5. $this->a_produkty[] = array(
  6. "id_produktu"=>$iv_id_produktu,
  7. "nazwa"=> $a_produkt['nazwa'],
  8. "cena"=>$a_produkt['cena'],
  9. );
  10. }


No i teraz chciałbym napisać funkcję, która usuwa rekord po podanym id_produktu:

  1. public function usun_z_koszyka($iv_id_produktu)
  2. {
  3. Usuń ten rekord z tabeli a_produkty, w którym id produktu=$iv_id_produktu;
  4. }


Czytałem że array_slice i array_merge może pomóc, ale nie bardzo wiem jak ich użyć.

Druga zagadka jaką mam do rozwiązania to jak przenieść zawartość tej tablicy do tabeli SQLowej o strukturze: id (primary key), id_produktu, nazwa, cena. Pewnie trzeba będzie użyć foreacha.

Błagam o pomoc.
H4eX
Funkcja dodaj_do_koszyka() nie jest od dodawania, ale od wyznaczania (wybierania).

Nie powiesz mi chyba, że na google nie było usuwania rekordu z bazy.
http://webmade.org/kursy-online/usuwanie-r...-kurs-mysql.php
Skaras
Cytat(H4eX @ 1.07.2010, 19:27:15 ) *
Funkcja dodaj_do_koszyka() nie jest od dodawania, ale od wyznaczania (wybierania).

Nie powiesz mi chyba, że na google nie było usuwania rekordu z bazy.
http://webmade.org/kursy-online/usuwanie-r...-kurs-mysql.php


Heh, trochę źle mnie zrozumiałeś. Mi nie chodzi o usuwanie rekordu z tabeli w bazie MySQL tylko o usunięcie rekordu ze zwykłej, phpowej tablicy. Dodajmy, że z tablicy, która przechowuje inne tablice o 3ch polach (id, nazwa, cena). I pytanie jak usunąć ten rekord, którego znamy id.
erix
A zaglądałeś kiedyś do unset?
Skaras
A mógłbyś pomóc z tym unsetem po danym id? Jestem raczej noga z tablic phpowych i na unset patrzyłem, ale nie bardzo wiem jak użyć tego w przypadku, gdy chcemy coś usunąć z tablicy tablic.
muk4
  1. unset($tablica[$id][$nazwa][$cena]);

albo
  1. $tablica[$id]='';

i wtedy jest czysto.
erix
Musiał mu podać na tacy... :/

Po co kursy, skoro tu "jest" helpdesk...
Skaras
Cytat(muk4 @ 2.07.2010, 00:16:03 ) *
  1. unset($tablica[$id][$nazwa][$cena]);

albo
  1. $tablica[$id]='';

i wtedy jest czysto.


Przecież te sposoby nie mogą zadziałać.

Pisałem, że mam tablicę tablic, np:

$tablica= [

(id_produktu=>1, nazwa=>rower, cena=>150),
(id_produktu=>5, nazwa=>komputer, cena=>1300),
(id_produktu=>12, nazwa=>kask, cena=>90),
(id_produktu=>7, nazwa=>laptop, cena=>2700)

]

I chcę napisać funkcję, w której usuwana jest dana podtablica po wybranym id_produktu

Po za tym zostaje druga część pytania, jak przenieść te wszystkie rekordy do tabeli w MySQL.
phpion
Na obecnej strukturze nie pójdzie tak prosto. Musisz polecieć pętlą (foreach) i usunąć (unset) element tablicy, który ma wskazany ID ($element['id_produktu] == $id_do_usuniecia). Mógłbyś ustalić, że kluczem tablicy jest właśnie $id_do_usunięcia i wówczas nie potrzebujesz pętli - robisz sam unset (+ isset() żeby nie waliło ostrzeżeniem). Podczas dodawania elementu do tablicy zamiast:
  1. $this->a_produkty[]

robisz:
  1. $this->a_produkty[$iv_id_produktu]

i jesteś w domu. Tyle tylko, że wówczas 1 produkt może wystąpić w tablic 1 raz.

Do do drugiego pytania: tak, pętla (foreach) i wpisanie danych do bazy (INSERT). Polecam tzn. multi insert czyli dodawanie kilku rekordów za jednym zamachem:
  1. INSERT INTO tabela (pole_1, pole_2) VALUES (11, 12), (21, 22);
Skaras
Cytat(phpion @ 2.07.2010, 09:37:41 ) *
Na obecnej strukturze nie pójdzie tak prosto. Musisz polecieć pętlą (foreach) i usunąć (unset) element tablicy, który ma wskazany ID ($element['id_produktu] == $id_do_usuniecia). Mógłbyś ustalić, że kluczem tablicy jest właśnie $id_do_usunięcia i wówczas nie potrzebujesz pętli - robisz sam unset (+ isset() żeby nie waliło ostrzeżeniem). Podczas dodawania elementu do tablicy zamiast:
  1. $this->a_produkty[]

robisz:
  1. $this->a_produkty[$iv_id_produktu]

i jesteś w domu. Tyle tylko, że wówczas 1 produkt może wystąpić w tablic 1 raz.

Do do drugiego pytania: tak, pętla (foreach) i wpisanie danych do bazy (INSERT). Polecam tzn. multi insert czyli dodawanie kilku rekordów za jednym zamachem:
  1. INSERT INTO tabela (pole_1, pole_2) VALUES (11, 12), (21, 22);


Dzięki. Zastosowałem się do Twoich rad. Skorzystałem z drugiej metody i ustaliłem, że kluczem jest id_produktu.
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-2025 Invision Power Services, Inc.