Sklep online w PHP i MySQL

0

Witam!
Potrzebuje stworzyc kwiaciarnie online w technologii PHP i MySQL.
Mam stworzony projekt bazy danych w DBDesignerze, nie byloby problemu z eksportem tego do SQLa. Zainstalowalem serwer XAMPP i teraz nie wiem za co sie zabrac i od czego zaczac. Musi to byc prosty interfejs, ktory dzialalby jak strona internetowa i wpisywal by zamowienia do bazy itd. funkcjonalnosc jak prosty sklep online. Prosze o jakies wskazowki, skad mialbym czerpac dane do dalszego projektu. Nie znam sie za bardzo na PHP wiec tutaj bedzie najwiekszy klopot.

0

Skoro nie znasz PHP to może nie musisz tworzyć własnego sklepu? Wpisz w wikipedię hasło sklep internetowy i na dole znajdziesz linki do opisów gotowych i darmowych skryptów sklepów. Pozostanie ci instlacja tego na serwerze. Nie wiem, czy masz serwer czy będziesz kupował usługę, ale możesz też rozważyć kupienie u dostawcy serwera i usługi sklepu. Możesz też nauczyć się PHP i napisać własny sklep.

0

Ja musze to zrobic na zaliczenie projektu na studia :) PHP + MySQL :)

0
Kepad90 napisał(a)

Ja musze to zrobic na zaliczenie projektu na studia :) PHP + MySQL :)

No to już inna bajka :)
To jak nie znasz się na PHP, to na czym się znasz? Przydałaby się znajomość HTML...
A jeszcze powiedz na kiedy to masz zrobić? Pewnie na wczoraj :)
Zacznij od zrobienia stron, które mają się pojawić w sklepie: strona główna, katalog kwiatów, strona produktu, strona zamówienia i co tam jeszcze uważasz. Pisząc zwróć uwagę które dane znajdą się w bazie, a które będą na stałe. Pomyśl jak będziesz przechodzić miedzy stronami. Potem w miejsca, gdzie coś ma się pobierać z bazy wpiszesz kod PHP do pobierania.
Plan B jest taki, że użyjesz jakiegoś frameworka PHP, który "ułatwi" pracę. Może Smarty? Sam nie używałem, więc nie wiem, ale podobno daje radę.
Jeszcze jedna możliwość, to zlecić komuś napisanie tego.

0

Spokojnie, mam na to jeszcze kilka tygodni wiec nie ma pospiechu :) HTML znam lepiej niz PHP, ale sciagnalem juz kilka tutoriali, wiec moze nie bedzie tak tragicznie :)
W kazdym badz razie dalej prosze o sugestie i pomoc :)

0

ok, to ja postaram się pomóc (nie odwalę nic za ciebie :P), sam się chętnie dowiem co mnie czeka za rok, dwa...
to jakie usługi ma twój sklep udostępniać: kupowanie gotowych bukietów i nnych itemsów, czy może jeszcze np. opcja komponowania własnego bukietu?
czy każdy może zrobić zamówienie w locie, czy trzeba się najpierw zalogować?
jakieś specjalne wymagania co do sklepu... generowanie faktur itp?
płatność przy odbiorze, czy przedpłata na konto i skorzystamy z opcji eksportu przelewów do CSV żeby sklep sam znalazł zamówienia opłacone i przekazał je dalej do realizacji?
Pokaż swój projekt bazy, zobaczymy co już masz ;)

0

Ok, dzieki. Przesylam projekt bazy. Funkcjonalnosc ma byc dosyc prosta. Podstawowe funkcje sklepu, nawet mysle ze bez rejestracji i logowania by sie obeszlo

http://img856.imageshack.us/img856/8091/bazaf.png

0

Spojrzałem na ten twój projekt bazy. Nie widzę tam czegoś takiego jak magazyn, czyli info ile czego masz. No ale może w kwiaciarni tego nie potrzeba, albo to jest to, co nazywasz kompozycją. Ale to jest właściwie drobiazg. W pierwszej kolejności powinieneś zadać sobie pytanie co tak na prawdę chcesz osiągnąć. Jeżeli to twój pierwszy projekt w PHP, to raczej nie planuj, że to będzie działać produkcyjnie. Podejdź do tego jak do projektu na zaliczenie. Nawet jak ma być ambitny i chcesz dostać za niego 6. Napisz sobie scenariusze co klient ma zrobić w tym sklepie i jakie widoki do tego potrzebuje. Ogranicz liczbę tabel w bazie do 1 (jednej) i pomyśl, czy ci wystarczy. Jeżeli dojdziesz do wniosku, że to za mało, to pomyśl co chcesz mieć w następnej. Pomyśl z czego możesz zrezygnować. Tak pobieżnie analizując strukturę twojej bazy, to ma ona błędy projektowe. Nie wnikam w szczegóły, po prostu zaprojektuj bazę na nowo, jak będziesz miał wizję działania aplikacji.

0

cóż, słabo ogarniam ten rysunek. ja swoje zawsze rysuję tak, że łączę konkretne pola w tabelach ze sobą, czyli w tabeli KLIENT:
id
imię
nazwisko
mail
...

oraz ZAMÓWIENIE:
id
klient
status
...

pola KLIENT.id i ZAMÓWIENIE.klient byłyby połączone

ogólnie to ja tu widzę potrzebę na tabele:
klient: adres, nipy itp, dane kontaktowe, status-jeśli wymagasz jakiegoś potwierdzenia tożsamości
zamówienie: data, klient, status-oczekujące/opłacone=do realizacji
kompozycja: id zamówienia, jakieś inne potrzebne info o niej
kompozycja_elementy: id kompozycji, rodzaj kwiatka (a raczej jego id z magazynu), ilość itp
magazyn: towar, ilość do wykorzystania, cena

z tego możesz już kombinować jakiś prosty sklep, tylko dopracuj bazę na początek. i będziem myśleć dalej

0

l153k, moglbys pomoc mi sie zabrac za PHP teraz ? Wlasciwie to wydaje mi sie, ze na tej bazie mozna by skolowac juz projekt, no chyba ze z baza wyjdzie cos nie tak w trakcie to sie pozmienia hmm ?

0

http://imageshack.us/photo/my-images/341/diagram1m.png/
proponuję takie coś, dużo prostsze ;)
parę wyjaśnień:
klient tworząc nowy koszyk, tworzy zamówienie ('platnosc'='robocze'). Potem łażąc po stronie dodaje rzeczy do koszyka, czyli tworzy nowe rekordy w bazie Element. Na stronie jest opcja "Utwórz kompozycję", jeśli ją kliknie to doda się do 'Zamowienia' rekord z 'magazyn'=NULL, a łażąc dalej po stronie będzie przy dodawaniu towaru do koszyka mógł z jakiejś listy rozwijanej wybrać kompozycję, wtedy element doda się do tabeli 'PodElement', z 'element'=id kompozycji.
Idzie dalej, zakończył zakupy, podaje dane do wysyłki (zapisują się w odpowiednim Zamowieniu) i wybiera płatność: przelew lub kurier. Jeśli kurier, to 'zaplacone'='cena', usuwa z magazynu odpowiednie ilości produktów, pani kwiaciarka robi paczkę.
Jeśli przelew, to czeka na przelew, jak już przyjdzie to dodaje kwotę przelewu do 'zaplacone', jeśli 'zaplacone'='cena' to usuwa z magazynu co trzeba, pani kwiaciarka robi paczkę.
Jakieś inne pomysły, sugestie...?

Plan bazy lepiej zrobić dobry na samym początku :P

0

Na sam poczatek baza musi miec minimum 10 tabel ! Takie mam zalecenia, wiec od razu taka jak zaproponowales mimo ze ma sens jest nie do przyjecia. Musi byc bardziej rozbudowana. Chcialbym sprobowac juz cos na bazie mojej bazy zaczac robic, czyli tworzyc jakas stronke w HTML + PHP i zapytania do tego w SQLu ale nie wiem jak sie za to zabrac.

0

czekaj czekaj ;) jak chcesz koniecznie według swojego projektu, to jasno go opisz: połącz liniami pola o takiej samej wartości (czyli coś jak u mnie, klient.id=zamowienie.klient), napisz konkretnie która tabela co przechowuje, co konkretnie ma się dziać kiedy:
nowy użytkownik wchodzi na stronę (ale nie tylko "tworzy się koszyk", tylko konkretnie co się dzieje w bazie, jakie rekordy się dodają...)
gdy wrzuca coś do koszyka
gdy idzie do kasy,
gdy wybiera sposób płatności
gdy przelew przyszedł
gdy tworzy nową kompozycję
gdy chce dodać do kompozycji
oraz inne, możliwe na stronie rzeczy

0
Kepad90 napisał(a)

(...) Chcialbym sprobowac juz cos na bazie mojej bazy zaczac robic, czyli tworzyc jakas stronke w HTML + PHP i zapytania do tego w SQLu ale nie wiem jak sie za to zabrac.

Ja na przykład, kiedy mam taki problem to otwieram Notepad++/Eclipse i zaczynam klepać kod...

0

Klient wchodzi do sklepu. Klika na zamowienie. Musi podac swoje dane z tabeli klienci, klienci_dane, klienci_adres, oczywiscie nie ktore wymaganie, nie ktore nie. Dalej musi wybrac odpowiednia kompozycje, ktora jest dostepna. Podaje dalej dane odbiorcy tej kompozycji, czyli gdzie ma byc dostarczona to sa tabele odbiorcy ... Zamowienie jest zatwierdzone przez system, jesli status zaplacone bedzie nie NULL. Do zamowienia mozna pozniej dolaczyc oczywiscie jeszcze uwagi, ktore moze klient dopisac sobie, po zaplaceniu ew. po zlozeniu zamowienia. Jesli wszystko jest ok to zamowienie uznane jest za wykonane i odnotowuje sie to w historii :)

PS. Bład mi wyskakuje, gdy w PHPMYADMIN probuje utworzyc te tabele z pliku .sql z DBDesignera

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NULL,
nr_domu INTEGER UNSIGNED NULL,
nr_lokalu INTEGER UNSIGNED NULL,
k' at line 4

co to znaczy i jak sie tego pozbyc ?

0

to wklej nam zapytanie jakie phpmyadmin ma przetworzyć.
Umiesz programować obiektowo? Mam nadzieję, że chociaż trochę, przynajmniej żebyś wiedział jak się robi klasę, do czego są argumenty i metody. Dziedziczenie, polimorfizm itp możemy sobie śmiało odpuścić :)
Ale ogólnie straszny bałagan będzie w tej bazie. Jak koniecznie ma być 10 tabel, to może ten mój projekt (prostszego się chyba nie da) rozbudujemy o coś? 5 tabel już jest, +referencje (opinie od zalogowanych i po pierwszych zakupach), +najczęstsze połączenia (kaktus & róża: 15 razy, pelargonia & kabaczek: 667 razy; to się może przydać do pomocy w komponowaniu bukietów), +polecenie (tylu userów z google, tylu znikąd: pewnie z ogłoszenia w autogiełdzie przepisał, a ten z onetu), +jeszcze dwie, damy radę :P

0

Hmm... no tak jak mowie, w sumie baza jest prawie zatwierdzona wiec chcialbym sie na nia oprzec ew. lekko ja przeksztalcic, mysle ze daloby rade ;)
Mialem z PO egzamin i zaliczenie, wiec jeszcze cos tam pamietam ;)

Wklejam zapytania sql

CREATE TABLE historia (
idHistoria INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
kompozycje_idKompozycje INTEGER UNSIGNED NOT NULL,
klienci_idKlienci INTEGER UNSIGNED NOT NULL,
cena NUMERIC NULL,
termin DATE NULL,
PRIMARY KEY(idHistoria),
INDEX historia_FKIndex1(klienci_idKlienci),
INDEX historia_FKIndex2(kompozycje_idKompozycje)
);

CREATE TABLE klienci (
idKlienci INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
imie VARCHAR NULL,
nazwisko VARCHAR NULL,
nip CHAR NULL,
regon CHAR NULL,
PRIMARY KEY(idKlienci)
);

CREATE TABLE klienci_adres (
idKlienci_adres INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
klienci_idKlienci INTEGER UNSIGNED NOT NULL,
ulica VARCHAR NULL,
nr_domu INTEGER UNSIGNED NULL,
nr_lokalu INTEGER UNSIGNED NULL,
kod CHAR NULL,
miasto VARCHAR NULL,
PRIMARY KEY(idKlienci_adres),
INDEX klienci_adres_FKIndex1(klienci_idKlienci)
);

CREATE TABLE klienci_dane (
idKlienci_dane INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
klienci_idKlienci INTEGER UNSIGNED NOT NULL,
email CHAR NULL,
telefon INTEGER UNSIGNED NULL,
fax INTEGER UNSIGNED NULL,
PRIMARY KEY(idKlienci_dane),
INDEX klienci_dane_FKIndex1(klienci_idKlienci)
);

CREATE TABLE kompozycje (
idKompozycje INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
nazwa VARCHAR NOT NULL,
opis VARCHAR NULL,
stan INTEGER UNSIGNED NULL,
PRIMARY KEY(idKompozycje)
);

CREATE TABLE kompozycje_cena (
idkompozycje_cena INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
kompozycje_idKompozycje INTEGER UNSIGNED NOT NULL,
cena NUMERIC NULL,
PRIMARY KEY(idkompozycje_cena),
INDEX kompozycje_cena_FKIndex1(kompozycje_idKompozycje)
);

CREATE TABLE odbiorcy (
idOdbiorcy INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
imie VARCHAR NULL,
nazwisko VARCHAR NULL,
PRIMARY KEY(idOdbiorcy)
);

CREATE TABLE odbiorcy_adres (
idOdbiorcy_adres INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
odbiorcy_idOdbiorcy INTEGER UNSIGNED NOT NULL,
ulica VARCHAR NULL,
nr_domu INTEGER UNSIGNED NULL,
nr_lokalu INTEGER UNSIGNED NULL,
kod CHAR NULL,
miasto VARCHAR NULL,
PRIMARY KEY(idOdbiorcy_adres),
INDEX odbiorcy_adres_FKIndex1(odbiorcy_idOdbiorcy)
);

CREATE TABLE odbiorcy_dane (
idOdbiorcy_dane INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
odbiorcy_idOdbiorcy INTEGER UNSIGNED NOT NULL,
email CHAR NULL,
telefon INTEGER UNSIGNED NULL,
fax INTEGER UNSIGNED NULL,
PRIMARY KEY(idOdbiorcy_dane),
INDEX odbiorcy_dane_FKIndex1(odbiorcy_idOdbiorcy)
);

CREATE TABLE realizacja (
idRealizacja INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
zamowienia_idZamowienia INTEGER UNSIGNED NOT NULL,
zaplacone BOOL NULL,
PRIMARY KEY(idRealizacja),
INDEX realizacja_FKIndex1(zamowienia_idZamowienia)
);

CREATE TABLE uwagi (
idUwagi INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
zamowienia_idZamowienia INTEGER UNSIGNED NOT NULL,
uwagi VARCHAR NULL,
PRIMARY KEY(idUwagi),
INDEX uwagi_FKIndex1(zamowienia_idZamowienia)
);

CREATE TABLE zamowienia (
idZamowienia INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
klienci_idKlienci INTEGER UNSIGNED NOT NULL,
kompozycje_idKompozycje INTEGER UNSIGNED NOT NULL,
odbiorcy_idOdbiorcy INTEGER UNSIGNED NOT NULL,
termin DATE NULL,
cena NUMERIC NULL,
PRIMARY KEY(idZamowienia),
INDEX zamowienia_FKIndex2(odbiorcy_idOdbiorcy),
INDEX zamowienia_FKIndex3(kompozycje_idKompozycje),
INDEX zamowienia_FKIndex3(klienci_idKlienci)
);

CREATE TABLE zapotrzebowanie (
idZapotrzebowanie INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
kompozycje_idKompozycje INTEGER UNSIGNED NOT NULL,
data_2 CHAR NULL,
PRIMARY KEY(idZapotrzebowanie),
INDEX zapotrzebowanie_FKIndex1(kompozycje_idKompozycje)
);

PS. Wklej to w phpmyadmin uprzednio tworzac jakas baze i zobaczysz gdzie problem :)

0

w polach typu char, varchar i paru innych musisz podać rozmiar, czyli np adres varchar(255) not null

0

No i o to chodzi :) Wspolpraca przynosi efekty :)
Teraz przydalby sie spec od PHP i pomogl mi stworzyc te wszystkie elementy i zapytania.

0

ok, z html sobie poradzisz mam nadzieję, parę wskazówek na początek:
na serio, napisz sobie listę możliwych scenariuszy, i pod każdym zrób listę, co właściwie strona ma w bazie zrobić:

zadanie na początek: klasa Zamowienie.
podpowiedzi:
numer zamówienia przechowywany jest w sesji zamowienie (czyli $_SESSION['zamowienie']), jak nie wiesz co to sesje, poszukaj w manualu php czy nawet w google, myślę że w 15 minut opanujesz temat ;)
w klasie zamowienie przydadzą się atrybuty:
id - wiadomo, wartość id z bazy
items - elementy zamówienia
resztę rozbudujemy w trakcie (chyba że już w tej chwili jest coś co musi być zrobione od razu; nie ogarniam tej twojej bazy :P)
metody:
__construct($id=null) - w id podajesz $_SESSION['zamowienie'] jeśli jest, jeśli jeszcze nie ma-zostaw puste. Ta metoda ma załadować do tablicy items wszystkie elementy zamówienia jeśli było podane jego ID, albo stworzyć nowe puste zamówienie i jego id ustawić w zmiennej $_SESSION['zamowienie'], tak żeby w następnych odwiedzinach można było je odczytać.

addItem($item) - dodaje element do zamówienia, czyli dopisuje na końcu tablicy items

removeItem($key) - usuwa element z zamówienia (tablicy items)

list() - zwraca tablicę items

__destruct() - zapisuje zmiany w zamówieniu

zastanów się teraz jak będzie wyglądał element zamówienia, który będzie zapisany w tablicy items. Będzie to np. tablica:
array("id" => ..., "produkt" => ..., "ilosc" => ... itp) - wtedy klasa Zamowienie musi koniecznie pamiętać o zapisaniu wszelkich zmian
czy może
obiekt ZamowienieElement, który będzie miał kilka atrybutów, i w swoich metodach __construct i __destruct sam będzie pamiętał o zapisaniu własnych zmian itp...

0
Kepad90 napisał(a)

Ja musze to zrobic na zaliczenie projektu na studia :) PHP + MySQL :)

Jest książka HELION-u E-commerce w PHP, czy coś podobnego. Tam masz jak na tacy podane wszystko.

Zainteresuj się gotowymi sklepami i podejrzyj "z czym to się je". Polecam Magento (ZF) - jest genialny!!!

0

Musze to robic samodzielnie, nie moge sie posilkowac gotowymi skryptami, ani CMS

0
kkk1 napisał(a)

Zainteresuj się gotowymi sklepami i podejrzyj "z czym to się je". Polecam Magento (ZF) - jest genialny!!!

Z tego, co wyczytałem powyżej, autor ledwo ogarnia PHP a Ty każesz mu grzebać w największym kombajnie ecommerce? Odradzam, strata czasu.

Kepad90 napisał(a)

nie moge sie posilkowac gotowymi skryptami, ani CMS

Zapytaj, czy możesz się posiłkować książkami o algorytmach albo najlepiej czy korzystanie z wyskokopoziomowych języków nie jest zbyt wielkim ułatwieniem...
kkk1 proponował podejrzeć ogólny projekt, algorytm. Sam miałem do zrobienia CMS, gdzie Drupal okazał się bardzo pomocny przy tworzeniu szablonów z regionami. Nikt nie każe zrzynać kodu, sama dokumentacja już dobrze obrazuje sposób działania aplikacji. Dla Ciebie może to być równozmaczne z otrzymaniem do ręki projektu - pozostaje implementacja.

Interesowałeś się frameworkami? Oszczędziło by Ci to części pracy, wymusiło jakąś organizację kodu... Inna sprawa, że do frameworka też trzeba przywyknąć.

1 użytkowników online, w tym zalogowanych: 0, gości: 1