Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php]Bez użycia konstrukcji warunkowych
sadistic_son
post
Post #1





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Cześć, zmagam się z pewnym zadaniem, ze z góry narzuconymi regułami. W skrócie to mały, prosty sklepik internetowy, który w całości ma powstać obiektowo. Programowanie proceduralne dozwolone jest tylko do zainicjowania klas. I jedno z wymagań mówi aby unikać konstrukcji warunkowych (if-else oraz switch) do radzenia sobie z różnicami w produktach. Jako że obiektowo programować dopiero się uczę, to nie wiem czy jest może jakieś oczywiste rozwiązanie pozwalające na nieużywanie warunków.

Załózmy, że mam w bazie tabelę PRODUKT z takimi kolumnami oraz danymi:
Kod
ID | name | typ|  MB | ilosc_stron | szerokosc | wysokosc | glebokosc

1 | tetris | dvd | 128 | 0 | 0 | 0 | 0
2 | bilbia | ksiazka | 0 | 1256 | 0 | 0 | 0
3 | stol | mebel | 0 | 0 | 90 | 200 | 60

Jak wdać mam 3 typy produktów (DVD, ksiazka, mebel) i w zależności od tego jaki to typ to odpowiednie kolumny są wypełnione - MB dla dvd, ilosc_stron dla ksiazki i wymiary dla mebli. Zresztą w oddzielnym temacie pytam czy dobrze rozumuję, że tak właśnie powinna baza pod ten cel wyglądać.
W każdym razie jak teraz rozróżnić inne akcje do działania na książce, dvd czy meblu kiedy nie mogę zastosować if-else czy switch ?

Dzięki.

Ten post edytował sadistic_son 15.12.2022, 10:36:08
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
sadistic_son
post
Post #2





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

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


Dobra, a więc uaktualniając temat, to baza wygląda tak:
Kod
products:
id | name | type
1 | Krzyzacy | book
2 | Rambo | dvd
3 | Table | furniture

property:
id | type | propoerty
1 | book | weight
2 | dvd |size
3 | furniture | height
4 | furniture | width
5 | furniture | lenght

product_propoerty:
id | product_id | propoerty_id | value
1 | 1 | 1 | 0.5 (Krzyzacy | weight | 0.5 )
2 | 2 | 2 | 650 (Rambo | size | 650 )
3 | 3 | 3 | 60 (Table | height | 60)
4 | 3 | 4 | 90 (Table | width | 90)
5 | 3 | 5 | 180 (Table | lenght | 180)


I teraz takie coś:
  1. <?php
  2. $name = $_POST['name'];
  3. $selectedType = $_POST['selectedType'];
  4. $givenProperties = array();
  5. if (isset($_POST['size']))
  6. $givenProperties['size'] = $_POST['size'];
  7. if (isset($_POST['weight']))
  8. $givenProperties['weight'] = $_POST['weight'];
  9. if (isset($_POST['width']))
  10. $givenProperties['width'] = $_POST['width'];
  11. if (isset($_POST['height']))
  12. $givenProperties['height'] = $_POST['height'];
  13. if (isset($_POST['length']))
  14. $givenProperties['length'] = $_POST['length'];
  15.  
  16. $types = array('book' => 'weight', 'dvd' => 'size', 'furniture' => array('width', 'height', 'lenght'));
  17.  
  18. $queryInsertProduct = "INSERT INTO 'product' (id, name, type) VALUES (null, '$name' , '$typeIndex')";
  19. //query execute, results itd...
  20.  
  21. $lastProductId = $db->lastInsertId();
  22.  
  23. foreach ($types[$selectedType] as $typeIndex => $typeValue) {
  24. $queryPropertyType = "SELECT id FROM property WHERE type = $typeValue";
  25. //query execute, results itd...
  26. $propertyId = $result; //wyniki powyższego zapytania
  27. $query = "INSERT INTO 'product_property' (id, product_id, property_id, value) VALUES (null, $lastProductId , $propertyId, '$givenProperties[$selectedType]')";
  28. //query execute, results itd...
  29. }
Dobrze rozumuję nospor, biorąc pod uwagę twoje sugestie?

Ten post edytował sadistic_son 9.01.2023, 13:25:27
Go to the top of the page
+Quote Post

Posty w temacie
- sadistic_son   [php]Bez użycia konstrukcji warunkowych   15.12.2022, 10:34:39
- - nospor   Co do bazy to jak pisalem w innym temacie jest zla...   15.12.2022, 10:42:54
- - sadistic_son   Odkopuję Ileż ja się naszukałem tego tematu - 3 st...   9.01.2023, 12:41:37
- - nospor   Nie Zdaje sie masz leciec tylko po tym co podal w ...   9.01.2023, 12:44:59
- - sadistic_son   Dobra, a więc uaktualniając temat, to baza wygląda...   9.01.2023, 13:20:27
- - nospor   Nie, totalnei zle. Zapomnij o tym if (isset(...   9.01.2023, 13:25:19
- - sadistic_son   Wtakim razie tak?[PHP] pobierz, plaintext $name = ...   9.01.2023, 13:39:41
- - nospor   CytatYyyyy, muszę pomyśleć jak to zrobić. Przeciez...   9.01.2023, 13:42:30
- - sadistic_son   Tak, na to wpadłem, po fajeczce się za to zabiorę....   9.01.2023, 13:46:13
- - nospor   No ale ciagle jest zle bo cialge nie czytasz co do...   9.01.2023, 14:05:18
- - sadistic_son   No dobra, dotarło. Czyli teraz tak... To moja fun...   9.01.2023, 16:06:43
- - nospor   Dobra, widze ze chyba ja wczesniej pojechalem bez ...   9.01.2023, 16:30:43
|- - sadistic_son   Cytat(nospor @ 9.01.2023, 16:30:43 ) ...   9.01.2023, 16:55:27
- - nospor   CytatNo dla product_properties tak jest jak mówisz...   9.01.2023, 16:59:37
- - sadistic_son   Rozumiem, że walidacja jest niezbędna, tylko jak j...   9.01.2023, 22:50:00
- - Salvation   Poczytaj o klasie Validatora.   9.01.2023, 23:24:19
- - sadistic_son   Trochę jest tych klas w wynikach google. Np. TO mn...   10.01.2023, 07:15:44
- - Salvation   Tutaj masz paczkę Validatora od Symfony: https://s...   10.01.2023, 09:00:49
|- - sadistic_son   Cytat(Salvation @ 10.01.2023, 09:00:4...   10.01.2023, 09:15:20
- - nospor   Cytattylko jak ją zrobić bez użycia konstrukcji wa...   10.01.2023, 09:21:30
- - sadistic_son   Cytat(nospor @ 10.01.2023, 09:21:30 )...   10.01.2023, 09:56:43
- - nospor   Ciala tych foreach so totalnie inne. Nie ma co kom...   10.01.2023, 10:23:07
- - sadistic_son   Cytat(nospor @ 10.01.2023, 10:23:07 )...   10.01.2023, 10:39:45


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: 8.10.2025 - 12:38