Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Usuwanie rekordu z tablicy
Skaras
post
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.07.2010

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
H4eX
post
Post #2





Grupa: Zarejestrowani
Postów: 150
Pomógł: 15
Dołączył: 1.07.2010

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Skaras
post
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.07.2010

Ostrzeżenie: (20%)
X----


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.

Ten post edytował Skaras 1.07.2010, 22:48:27
Go to the top of the page
+Quote Post
erix
post
Post #4





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A zaglądałeś kiedyś do unset?
Go to the top of the page
+Quote Post
Skaras
post
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.07.2010

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
muk4
post
Post #6





Grupa: Zarejestrowani
Postów: 309
Pomógł: 56
Dołączył: 3.11.2006
Skąd: Gliwice

Ostrzeżenie: (0%)
-----


  1. unset($tablica[$id][$nazwa][$cena]);

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

i wtedy jest czysto.

Ten post edytował muk4 1.07.2010, 23:17:29
Go to the top of the page
+Quote Post
erix
post
Post #7





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Musiał mu podać na tacy... :/

Po co kursy, skoro tu "jest" helpdesk...
Go to the top of the page
+Quote Post
Skaras
post
Post #8





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.07.2010

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post
phpion
post
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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);
Go to the top of the page
+Quote Post
Skaras
post
Post #10





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 1.07.2010

Ostrzeżenie: (20%)
X----


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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 2.10.2025 - 17:41