Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Własna baza danych
Forum PHP.pl > Inne > Hydepark
Mistycus
Nie wiem, do którego działu najlepiej pasowałby ten temat (MySQL, PostgreSQL), więc piszę tu smile.gif
Ostatnio pisałem skrypt bazy danych na plikach CSV, czyli takich, w których pierwsza linia zawiera nazwy pól pooddzielane jakimś separatorem, a następne linie zawierają dane (również oddzielone tym samym separatorem). Porzuciłem ten projekt i zacząłem pisać skrypt na nieco innej zasadzie. Otórz założyłem, iż dane w bazie nie będą oddzielane separatorami, lecz będzie podawana długość każdego pola, czyli taki zapis: 004016MarsCzerwona planeta oznacza, że pierwsze pole (4 znaki) ma wartość "Mars", a drugie (16 znaków) "Czerwona planeta". Taki zapis ma jednak wady, ponieważ na początku bazy (pliku z danymi) muszę podawać z ilu cyfr ma się składać każda liczba reprezentująca ilość znaków pola, czyli np. muszę podać 3, aby liczby miały postać: 001, 002, 003 itd., lub wpisać 4 dla licyb w postaci 0001, 0002, 0003 itd.
Mój problem polega na tym, że nie wiem jak mogę to uprościć, aby liczby mogły być zapisywane jako 1, 2, ... 7, 8, 9 , 10 , 11, ... 98, 99, 100, 101, a nie 001, 002, ... 007, 008, 009 , 010 , 011, ... 098, 099, 100, 101, bo przecież skrypt musi wiedzieć, jak odczytać na przykład coś takiego 123456(tak 123, 456, czy może tak 12, 34, 56, a może 12, 3, 456, albo jeszcze inaczej). Myślałem także nad liczbami w systemie 16-wym, dzięki czemu dwucyfrowa liczba mogła by mieć wartości od hex:00 (dec:0) do hex:ff (dec:255), jednakże czasami potzrebna jest większa liczba, więc musiałbym stosować trzyznakowe od 000 do fff i tu znów pojawia się ten sam problem, bo liczby muszą się składać aż z trzech znaków. Czy da się coś zrobić, aby każdy rekord w bazie danych nie rozpoczynał się długim ciągiem cyfr typu 0080050090a40060040100c2:?:
dvc
jak dla mnie to nie masz wyjścia separator musisz zastosować;
np. 3;156alama kota
nawet nie widze jakiegos innego wyjscia nawet teoretycznego,
bo skad skrypt bedzie wiedzial to:

3156alama kota

Separator bedzie tu jedynym rozwiazaniem rolleyes.gif

a może użyj MySQL lub PostgeSQL
Mistycus
Mój pierwszy skrypt zapisywał dane do bazy w postaci:
Kod
utwor;kompozytor

Requiem;Mozart

Stabat mater;Jacopone da Todi

O Fortuna;Orff

Missa pro pace;Kilar

Potem zmieniłem skrypt pozbywając się separatorów, więc zapis w bazie wyglądał mniej więcej tak:
Kod
2

0510utworkompozytor

0706RequiemMozart

1216Stabat materJacopone da Todi

0904O FortunaOrff

1405Missa pro paceKilar
Ta dwójka na początku oznacza, że każda liczba składa się z dwóch cyfr, czyli np. 05, a nie 5 :!: W rzędzie niżej znajdują się nazwy zmiennych, a w następnych wartości smile.gif

Czy macie może jakiś inny pomysł na stworzenie bazy danych :?:

[quote] 3;156alama kota (...)Pozbyłem się separatorów między poszczególnymi polami, aby zastąpić je separatorami między liczbami na początku :?: To chyba lepszy już był mój poprzedni skrypt :?


[quote]a może użyj MySQL lub PostgeSQL[/quote]MySQL'a, ani żadnej innej tego typu bazy nie chcę używać, bo mało który darmowy polski serwer obsługuje którąkolwiek z nich.
Seth
Dlaczego nie chcesz uzywac separatorow :?:
Mistycus
Cytat
Dlaczego nie chcesz uzywac separatorow :?:
Bo znak, którego użyłem do separacji, mógłby wystąpić również wewnątrz jakiegoś wpisu w bazie, więc przed dopisaniem czegokolwiek do bazy, dane musiałyby być sprawdzane na zawartość tego znaku, a jeśli by wystąpił, musiałby być przekonwertowany na jakiś "zastępnik", np. w przypadku ; mógłbym użyć &średnik, a zatem i znak & musiałbym przekonwertować na coś innego (np. &and) :?
kryr
Mozesz tez uzyc jakiegos "dziwnego" separatora np: ~`~ chyba nikt nie bedzie chcial wpisywac czegos takiego do bazy...
Mozesz tez kazde pole oddzielic "n" - czemu nie, problem bedzie tylko, jezeli bedziesz chcial dodac jeszcze jedno pole...
Albo ustalic szerokosc kazdego pola, zpiasywac i wczytywac dane przez scanf, sprintf...
Anonymous
kryr masz racje najlepiej zastosować jakiś nietypowy
separator i po bulu np. n
takiego to chyba nikt nie wpisze
a nawet jeśli ktoś będzie chciał coś takiego wpisać to można temu łatwo
zaradzić pisząc funkcję która sprawdza czy we wpisanych danych jest
ten separator n jesli bedzie to zamienic na coś innego np. (n)
lub coś innego
dvc
znowu mój tekst poszedł jako anonymous

bo się nie zalogowałem :oops:

a tak wogóle to pierwszy pomysł z separatoem
był najlepszy czyli:

ala;ma kota;i już
Mistycus
W moim pierwszym skrypcie "baza danych" użyłem separatora -|- i chyba do tego wrócę. Tak czy siak, wprowadzę zastępowanie niektórych znaków (dla bezpieczeństwa :wink: ).
dvc
pierwsze pomysły zawsze są najlepsze, prawda?

podobnie mam ze swoimi wierszami rolleyes.gif
kryr
wierszopleta?questionmark.gif
dvc
kiedyś się pisało teraz rzadziej

teraz moją miłością oraz poezją jest php
aczkolwiek coś od czasu do czasu bazgrnę
---------------------------------------------------

Mam pytanie:
robię sobie licznik wersji, przy każdej modyfikacji pliku
licznik zwiększa się o jeden, żeby tego było mało nie robię tego dla jednego pliku tylko dla całej masy plików;
najpierw mój skrypcik sprawdza czy dany plik, ten który się w danym momencie otwiera jest w bazie czy nie...
i tu się zaczyna już problem ...
do bazy zapisywana jest nazwa pliku ze scieszką, czas ostatniej modyfikacji itp., wszystko to czyli dane na temat jednego pliku zapisywane są w jednej linii (na szczęście nie jest tego dużo)
kolejny plik kolejna linia w bazie itd.

ale gdy plik jest w bazie i czas ostatniej akutalizacji różni się od faktycznego to chciałbym zmodyfikować dane w bazie a tym samym licznik zwiększyć o jeden (licznik to mi się zwiększa z tym nie mam problemu) tylko z modyfikacja są problemy czy wiecie jak to zrobić?
Mistycus
Cytat
tylko z modyfikacja są problemy czy wiecie jak to zrobić?
Chodzi Ci o modyfikację wpisu w bazie :?: Jeśli tak, to jakiej używasz :?: Swojej własnej :?: Pewnie tak, skoro piszesz w tym wątku. Domyślam się, że nie masz wszystkich potrzebnych funkcji, skoro nie potrafisz wyedytować wprowadzonych już danych.
kryr
No niestety trzeba cala baze skopiowac podmieniajac jeden wpis...
dvc
Mistycus: questionmark.gifquestionmark.gif
kryr: miałem taki sam pomysł biggrin.gif

Mam pliczek a w nim wpisy np.
0.78!index.php3:1016205306
0.78!index2.php3:1016205306
...
itd.

gdzie 0.78 to nr ver. potem jest plik a na końcu data ost. modyfikacji
ale dzisiaj stwierdziłem, że tak być nie może i postanowiełem, że zrobie to tak
0.78
index.php3:1016205306
index2.php3:1016205306
...

no właśnie tylko mam problem z aktualizacją

Mistycus: o jakie funkcie chodzi :?:
kryr
sproboj z fseek() cos pokombinowac ... mozesz dzieki temu nadpisac jeden rekord w bazie, chyba... (nie mam pojecia, czy to zadziala :!: )
dvc
a jak ustawić fseek() w nowej linii ?
skoro podaje się jako tylko jedną wartość
chyba ze 255 to koniec jednej linii , hmm?

(czytaj poprzedni mój post)

prosze o pomoc....
kryr
Ugh, niestety takowej mozliwosci nie ma... :?
dvc
no właśnie to jest ten ból sad.gif

(czytaj dwa przed ostatnie moje posty na tym forum)
------
Mistycus
Cytat
Mistycus: o jakie funkcie chodzi :?:
Nadal nic nie wiem o Twojej bazie rolleyes.gif
dvc
przecież ładnie opisałem co i jak biggrin.gif

plik np.: ver.txt
linie w pliku:
0.78
index.php3:101551616
mod.php3:12121213

koniec pliku ver.txt

plik index.php3
...
include(ver.php3);
..


plik ver.php3:

sprawdzam date aktualizacji aktualnego pliku czyli index.php3
tu musze pobrać numer wersji czyli 1 linie z pliku ver.txt [0.78]
teraz sprawdzić czy aktualna nazwa pliku czyli index.php3 jest w pliku
ver.txt
jeśli jest to sprawdzić czy czas aktualizacji różni się od obecnego jesli tak
to numer wersji +1 oraz dokonać aktualizacji czasu modyfikacji pliku index.php3 w ver.txt ale dane o innych plikah muszą być nie naruszone

nie wiem co jeszce chcesz wiedzieć Mistycus
Mistycus
Z tego co Ty napisałeś, wnioskuję, że nie użwasz żadnej bazy danych, ani nie napisałeś sobie skryptu do obsługi bazy na plikach. Mylę się :?:
Mistycus
Zajrzyj DVC do tematu o cnotkach, bo czeka tam na Ciebie kilka wazeliniarskich (tak je nazwał Seth) przeprosin za pisanie Twojego nicka z małych liter. Swoją drogą nie wiem, czemu Ci to przeszkadza. DVC, dvc (a może DVD tongue.gif ) - hmm... wielka różnica
castor
Cytat
Cytat
Dlaczego nie chcesz uzywac separatorow :?:
Bo znak, którego użyłem do separacji, mógłby wystąpić również wewnątrz jakiegoś wpisu w bazie, więc przed dopisaniem czegokolwiek do bazy, dane musiałyby być sprawdzane na zawartość tego znaku, a jeśli by wystąpił, musiałby być przekonwertowany na jakiś "zastępnik", np. w przypadku ; mógłbym użyć &średnik, a zatem i znak & musiałbym przekonwertować na coś innego (np. &and) :?


uzyj znaku ktoregonie mozna wprowadzic klawiatura!
np:
Kod
chr(7)
dvc
Mistycus: oczywiście, że napisałem skrypcik do obsługi swojej bazy na plikach, a właściwie na jednym pliku, bo po co mi więcej w tym wypadku

hmm, tak się zastanawiam cze czasem Mistycus nie chodziło ci o co innego
z tym skrypcikiem tzn. funkcie przeszukującą, wstawiającą itd....

nie, ja to mam przecież tylko nie jako funkcie smile.gif

i nie jestem taki obrażalski tylko tak wyszło z DVC
nie jestem DVD

wracając do bazy to wczoraj jeszcze posiedziałem nad swoim problemem
zrobilem jak napisałem wcześniej, ale gdzieś jeszcze jest mały błąd,
przez chwile działało ale ostatecznie się rozjechało
spoko w końcu kiedyś zrobie, nie ?
kryr
castor: czy w tedy nie trzeba czasem uzywac binary-safe : fread fwrite questionmark.gif?
dvc
a myślicie, że ktoś będzie chciał wpisać do bazy [n] ?
castor
Cytat
castor: czy w tedy nie trzeba czasem uzywac binary-safe : fread fwrite questionmark.gif?


NIE!

przeciez to znak z tatbeli ASCII

ja uzywam od 28 do 31 bo to separatory smile.gif
Mistycus
Cytat
uzyj znaku ktoregonie mozna wprowadzic klawiatura!
np:
Kod
chr(7)
Racja, dzięki biggrin.gif
Cytat
Mistycus: oczywiście, że napisałem skrypcik do obsługi swojej bazy na plikach, a właściwie na jednym pliku, bo po co mi więcej w tym wypadku
Podejrzewałem, że zrobiłeś skrypt do obsługi tylko jednego pliku, ale czy nie lepiej używać uniwersalniejszych rozwiązań :?:
Cytat
wracając do bazy to wczoraj jeszcze posiedziałem nad swoim problemem
zrobilem jak napisałem wcześniej, ale gdzieś jeszcze jest mały błąd,
przez chwile działało ale ostatecznie się rozjechało
spoko w końcu kiedyś zrobie, nie ?
Powodzenia smile.gif :!:
Cytat
a myślicie, że ktoś będzie chciał wpisać do bazy [n] ?
Wystarczy, że wstawi entera
dvc
Mistycus: ale jak nie skorzystam z gotowych rozwiązań to więcej sie nauczę, prawda?
bedę mógł komus pomóc jak będzie miał problem (taki jak ja miałem)
Mistycus
Nie piszę o rozwiązaniach gotowych, ale uniwersalnych - chodzi o to, abyś stworzył sobie skrypt do obsługi więcej niż jednego pliku. Ja ostatnio sobie taki zrobiłem, ale stwierdziłem, że to chyba jednak nie ma sensu (mój skrypt miał za wiele wad sad.gif ), więc zacznę używać MySQL'a :?
dvc
Mistycus: ale tak myśle, że na moje potrzeby i z założenia jakie przyjąłem powino mi to w zupełności wystarczyć

ten licznik wersji ma być uniwersalnym rozwiązaniem, gdyż
tam gdzie nie będę miał dostępu do bazy danych typu MySQL lub PostgrSQL będzie w 100% funkcjonalny biggrin.gif
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.