View previous topic :: View next topic |
Author |
Message |
budha
Joined: 02 Mar 2004 Posts: 1377 Location: Osijek
|
Posted: 09.06.2004 14:47 Post subject: php/mysql question |
|
|
e, ovak...
imam u tablici kolonu INDEX (tinyint, unsigned), tablica će uvijek imati 50-ak redova...
kako napraviti da pri dodavanju novog retka u tablicu, novi red "dođe" na mjesto izbrisanog reda?
...difficult to explain...
ili mozda bolje ovak:
- imam u tablici 10 redova, a index im je 1, 2, ..., 9, 10
- obrisem red sa indexom 3
i sada, kad dodajem novi red:
- da njegov index bude 3
- kad dodam sljedeci, da njegov index bude 11... |
_________________ I hate to advocate drugs, alcohol, violence, or insanity to anyone, but they've always worked for me. |
|
Back to top |
|
|
budha
Joined: 02 Mar 2004 Posts: 1377 Location: Osijek
|
Posted: 09.06.2004 20:43 Post subject: |
|
|
...
zyt?...
...
maxy?...
...
anybody?...
...
jel to uopce moguce?! |
_________________ I hate to advocate drugs, alcohol, violence, or insanity to anyone, but they've always worked for me. |
|
Back to top |
|
|
_butch
Joined: 10 Sep 2003 Posts: 870 Location: Maichno, Krlovc
|
Posted: 09.06.2004 21:22 Post subject: |
|
|
meni to nema smisla..
Mislim, ako zelis nesto staviti na mjesto toga necega, zasto jednostvano to ne editirati to i dobijes isti rezultat. |
_________________ FRENCH GUARD: No chance, English bed-wetting types.
I burst my pimples at you and call your door-opening request a silly thing, you tiny-brained wipers of other people's bottoms! Flikrac |
|
Back to top |
|
|
che.UP mi3.crew
Joined: 07 Sep 2003 Posts: 2320 Location: zagreb
|
Posted: 09.06.2004 21:25 Post subject: |
|
|
pfr.... ak oces imat fixno broj redova onda spicis MAX_ROWS = 50 kod kreiranja tablice....
a ovo ostalo... hm.... brijem da bi se cak i dalo, samo neam trenutno nikakve ideje krepan sam... :/ |
_________________ UP | TypeTester | Accommodations App
Meni u Firefox-u ne radi AJAX |
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 09.06.2004 21:29 Post subject: |
|
|
Ako je INDEX neki AUTO_INCREMENT onda ja mislim da ne moze... Naravno, ja nemam toliko iskustva kao netko drugi sa ovog foruma... Ali INDEX se obicno koristi da bude unique, tako da kad izbrises 3 svejedno ne popunjava to prazno mjesto nego nastavlja od 11 (meni je to zdravorazumski i logično, mislim, trojka je izbrisana) |
|
|
Back to top |
|
|
maxy
Joined: 07 Sep 2003 Posts: 894 Location: Zagreb
|
Posted: 09.06.2004 22:08 Post subject: |
|
|
ovo je problem koji se rjesava pjeske
dakle, ubacis novi redak i on npr dobi broj 22 a onaj prije njega je bio recimo 12.
sad ti oces da taj redak bude 13 - simpl, izaberi predzadnji redak iz tablice na sljedecu shemu (ovako odokativno govorim, ne razmisljam previse):
Code: | // prije ubacivanja u bazu poberes posljednji ID iz baze
$query = mysql_query("SELECT id FROM tablica ORDER BY id DESC LIMIT 1");
// sada kroz while proletis i strpas ovu vrijednost u varijalbu $zadnji_id
$zadnji_id = 13;
// sad, pravis ubacivanje
$query = mysql_query("INSERT INTO tablica SET ..... ");
//poberes POSLJEDNJI id koji je bio ubacen na sljedecu shemu:
$najnoviji_id = mysql_insert_id(); // inace kao argument zahtjeva koneksn, ali otom potom. |
i sada krece update te tablice:
Code: | $query = mysql_query("UPDATE tablica SET id = '$zadnji_id' WHERE id = '$najnoviji_id'"); |
|
|
|
Back to top |
|
|
silence
Joined: 24 Apr 2004 Posts: 890 Location: .....ni na nebu, ni na zemlji.....
|
Posted: 09.06.2004 22:08 Post subject: |
|
|
mene zanima dal ti pitaš jel to moguće napravit kroz SQL query (to ne znam) ili da se napiše neka funkcija koja provjerava prvo prazno mjestu u nizu između 1 i 50 i onda na to mjesto stavlja podatke.... to nije nikakav problem.
daj malo objasni. zakaj baš na prvo prazno mjesto?
nije mi baš najjasnije kaj hoćeš s ovim dobiti....
EDIT::vidim da je maxy dao svoje mišljenje, nekaj slično je i meni bilo u glavi. |
|
|
Back to top |
|
|
maxy
Joined: 07 Sep 2003 Posts: 894 Location: Zagreb
|
Posted: 09.06.2004 22:19 Post subject: |
|
|
inace, kad smo vec poceli pricu o bazama - dao sam neke lose primjere dolje (inace izbjegavam varijantu $query = mysql_query...) pa evo jedan "bonus" = mysql klasa koju inace koristim (nije nist bolja od standardnih koji su avail za download ali eto):
http://awesome.gamer.hr/maxy/mod_mysql.rar
kak se radi s time:
Code: | $mysql = new MySQL('localhost', 'tvoj_username', 'tvoj_password', 'tvoja_baza'); |
oces napravit query:
Code: | $mysql->query("naredbe ovdje"); |
oces vidit broj redova affectanih sa nekim queryem:
Code: | $mysql->get_affected_rows(); |
oces odvrtiti while($sql = mysql_fetch_array.....):
Code: | while($sql = $mysql->getRows()) {blok_naredbi} |
oces izvadit posljednji insert_id:
Code: | $mysql->get_insert_id(); |
inace, nije ni meni jasno zasto zelis da ti se ID popuni sa slijedecim brojem koji je veci za 1 jer kako god bilo, svaki slijedeci ce biti veci od prethodnog tako da stvarno ne vidim gdje je tu problem jer ako je svaki slijedeci veci, odnosno razlicit od svih ostalih - gdje je problem sa bilo cime? |
|
|
Back to top |
|
|
silence
Joined: 24 Apr 2004 Posts: 890 Location: .....ni na nebu, ni na zemlji.....
|
Posted: 09.06.2004 22:23 Post subject: |
|
|
ovo ću proučit.
thx maxy.
kaj se tiče ovog cijelog problema, totalno mi je nejasno kaj se tu treba događat. |
|
|
Back to top |
|
|
PsychoPod
Joined: 05 Oct 2003 Posts: 166
|
Posted: 09.06.2004 23:01 Post subject: |
|
|
kad smo vec kod class-a
ima li netko site s dobrim tutorialom za class?
znaci opcenito, ne primjere skripti. toga imam vec dosta
znaci, kako se definira, kako se poziva i to.
bio bi zahvalan :ave |
|
|
Back to top |
|
|
Sulien
Joined: 04 Jan 2004 Posts: 2905 Location: Zagreb
|
Posted: 10.06.2004 00:11 Post subject: |
|
|
Općenito PHP klase su objašnjene dosta dobro na službenom manualu. Vrlo je jednostavno, a kako primjere već imaš, sve ćeš brzo pohvatati |
|
|
Back to top |
|
|
maxy
Joined: 07 Sep 2003 Posts: 894 Location: Zagreb
|
Posted: 10.06.2004 00:13 Post subject: |
|
|
oke, idem dat jedan kratki primjer oko rada sa klasama.
koja je generalna ideja - generalna ideja sa klasama je da se povezu podaci i funkcije koje rade s tim na jedno mjesto i tu pocinje nesto sto se zove objektno orijentirano programiranje (OOP).
dakle, upakiramo sve u jedan paket i to se u OOP-u zove OBJEKT.
jos jedan od aduta OOP-a je reusability - pogledajte ovu moju mysql klasu i u cem je fora - bilo mi je pun qratz pisanja koda za spajanja na bazu te provjere querya itd. pa sam napravio tu klasu. sada imam objekt koji je uspjesno spojio sve moje funkcije za rad sa bazom.
oke, idemo sa jednostavnim primjerom klase pa cu objasnjavat on the fly
Code: | class Zbroji
{
var $prvi_broj;
var $drugi broj;
function Zbroji($jedan, $dva)
{
$this->prvi_broj = $jedan;
$this->drugi_broj = $dva;
}
function kalkuliraj()
{
return $this->prvi_broj + $this->drugi_broj;
}
} // end class;
$zbroji = new Zbroji(1, 2);
echo $zbroji->kalkuliraj();
// ispise 3
|
klasa se definira sa class Ime_klase. ime klase obicno bude pisano sa prvim slovom velikim, cisto iz preglednosti.
nakon definicije imena, krece definicija varijabli i to se radi sa var $ime_varijable;
e sad, posto se ove varijable pojavljuju unutar definicije klase onda one nisu obicne varijable jer PRIPADAJU klasi te se zovu properties. dakle, varijable koje pripadaju objektu se zovu propertyji.
u nasoj klasi imamo 2 propertya - $prvi_broj i $drugi_broj.
slijedece sto vidimo je funkcija koja se zove ISTO KAO klasa. to je posebna funkcija koja se naziva KONSTRUKTOR. ta funkcija se pozove automatski nakon sto je objekt pozvan (objasnit cu kak se poziva objekt).
nas konstruktor prima 2 varijable te ih pridodjeljuje odgovarajucim propertyima unutar objekta.
e sada, sto znaci ovo $this i ->?
varijable koje smo deklalirali sa var $jedan itd. - njima se unutar objekta obracamo sa $this->ime_varijable tako da znamo sto je property objekta a sto nije jer mozemo ubacivat neke dodatne vrijednosti.
dakle, zapamtite ovo:
imas var $jedan = "pet"; u definiciji klase.
oces pozvat tu varijablu - zoves je sa $this->jedan;
amen
idemo dalje na objasnjavanja
funkcije koje pripadaju objektu se zovu METODE i metode rade sa propertyima.
rezime:
objekt - poziv klase
property - varijable unutar klase
metoda - funkcija unutar objekta koja radi sa propertyima
slikovni opis: http://awesome.gamer.hr/maxy/oop.gif
sada, nakon ove pricice, kako to upotrijebiti?
Code: | $zbroji = new Zbroji(1, 2);
echo $zbroji->Kalkuliraj(); |
varijabla $zbroji je sada objekt. primjetite kako sam se obratio funkciji Kalkuliraj koja je bila definirana unutar klase - na ISTI nacin kako sam se obracao varijablama, sa operatorom ->
idemo produzit shemu, imat cemo vise zbrojeva.
Code: | $zbroj_1 = new Zbroji(10, 20);
$zbroj_2 = new Zbroji(10, 40);
$zbroj_3 = new Zbroji($zbroj_1->Kalkuliraj(), $zbroj_2->Kalkuliraj());
echo $zbroj_3->Kalkuliraj(); |
nesto napredniji primjer poziva metoda
kao sto vidite, na ovaj nacin instanciramo vise objekata te im se obracamo na gore navedeni nacin (stvaro nemrem nac rijeci da to opisem pa se nadam da se kuzi iz primjera).
oke, a sada idemo sa necim korisnim i naprednim.
idemo kreirat klasu koja ce is baze podataka vaditi neke stvari. sada, malo napredniji primjer - slobodno me ugnjavite ak nest nije jasno.
Code: | class Podaci
{
var $mysql;
var $jmbg_brojevi = array();
function Podaci(&$mysql)
{
$this->mysql = &$mysql;
}
function vadiJMBG($id_range)
{
$this->mysql->query("SELECT jmbg FROM users WHERE id < '".$id_range."'");
if($this->mysql->size() == 0)
{
return false;
}
else
{
while($sql = $this->mysql->getRow())
{
$this->jmbg_brojevi[] = $sql['jmbg'];
}
return true;
}
}// end class
// pokreni mysql
$mysql = new MySQL('localhost', 'maxy', 'password', 'maxyeva_baza');
$jmbg_brojevi = new Podaci(&$mysql);
// idemo sada odabrati sve JMBG brojeve ciji je ID manji od recimo 20
if($jmbg_brojevi->vadiJMBG(20))
{
// gornja metoda je zapisala u jedan array sve jmbg brojeve, a taj array je property naseg objekta
foreach ($jmbg->jmbg_brojevi as $brojevi)
{
echo '<br />'. $brojevi;
}
}
else
{
echo "Nema takvih JMBG brojeva";
}
?>
|
meni najbolja stvar je sto mozes pokrenut jedan objekt te njemu prenjeti pointer na drugi objekt.
u ovom slucaju sam ja pokrenuo mysql driver te sam prenio taj pointer u drugu klasu (odnosno u drugi objekt) te sam koristio metode mysql drivera u drugom objektu.
mysql driveru sam se obracao preko $mysql->mysql->ime_metode_unutar_mysql_objekta
u konstruktoru sam ovaj puta assignao samo JEDNU stvar a to je pointer na mysql.
drugu varijablu (jmbg_brojevi) sam deklarirao kao array te sam ga popunio izvatcima iz baze i kasnije sam ga iskoristio u foreach petlji.
dok sam queryao bazu, koristio sam mysql objekt da pristupim mysql metodama.
ovo je dovoljno za uvod i prije nego zavrsim: u klasama ne smijete imati escapeanje iz php-a u html - to je no-no jer nece radit.
dakle ovo:
?>
<b>bok</b>
<?php
unutar klase NE RADI! klase sadrzavaju funkcije i amen
php 4.x OOP podrska je minimalna, te je u php5 predstavljen novi objektni model kakav postoji u javi i c-u. princip je slican, ali ponasanja stvari su malo drukcija (o tome drugi put).
inace, nisam htio definirati odnos child-parent klase jer niti sam to ne koristim a mislim da je za jedan okvirni uvodni dio ovo sasvim dosta. |
|
|
Back to top |
|
|
maxy
Joined: 07 Sep 2003 Posts: 894 Location: Zagreb
|
Posted: 10.06.2004 00:17 Post subject: |
|
|
Sulien wrote: | Općenito PHP klase su objašnjene dosta dobro na službenom manualu. Vrlo je jednostavno, a kako primjere već imaš, sve ćeš brzo pohvatati |
ne slazem se..nije dovoljno pojasnjeno. inace, savjet koderima - na www.php.net pod popisom funkcija imate komentare ostalih programera koji su i vise nego jebeno dobri pa si ucinite uslugu - svako malo kad zapnete, bacite oko na komentare drugih programera (www.php.net search -> upisi ime funkcije te pretrazi function list i citaj komentare). |
|
|
Back to top |
|
|
t3r0
Joined: 08 Jun 2004 Posts: 107
|
Posted: 10.06.2004 01:39 Post subject: |
|
|
cool tutor, svaka cast
ali ... mrzim pokazivace, pa bas ne koristim oop |
|
|
Back to top |
|
|
maxy
Joined: 07 Sep 2003 Posts: 894 Location: Zagreb
|
Posted: 10.06.2004 09:08 Post subject: |
|
|
t3r0 wrote: | cool tutor, svaka cast
ali ... mrzim pokazivace, pa bas ne koristim oop |
oop svi nazivaju "next level" u programiranju. nisam ni ja koristio taj princip jer mi je bilo nepotrebno. no kad jednom napravis nesto korisno na ovaj nacin, nema nazad |
|
|
Back to top |
|
|
PsychoPod
Joined: 05 Oct 2003 Posts: 166
|
Posted: 14.06.2004 00:16 Post subject: |
|
|
maxy, uber :ave :ave
|
|
|
Back to top |
|
|
_butch
Joined: 10 Sep 2003 Posts: 870 Location: Maichno, Krlovc
|
Posted: 14.06.2004 00:42 Post subject: |
|
|
@maxy: super napisano !
jedna od novosti u PHP5 je koristenje "__construct() " funkcije za konstruktor, umjesto pisanja funkcije sa imenom klase. I dolazi odmah i "__destruct()" funkcija koja unloada objekt iz memorije. Ona ne prima nikakve parametre.
Recimo u maxy-evoj klasi, kad bismo ju "prepisali" u novi objektni model mogli bi smo komotni staviti u __destruct() funckiju i mysql_close() -za zatvaranje veze prema bazi..
Znaci izvrsimo zadani upit itd, re automatski zatvorimo svoju vezu prema bazi, te otvorimo drugi put kad treba.
Code: |
<?php
class novaKlasa {
static $ime = 'butch';
var $upitnik;
function __construct ($upitnik) {
$this->upitnik = $upitnik;
}
function pisiUpitnik() {
return $this->upitnik;
}
function __destruct() {
echo "Ubili smo ovu klasu.. 2 bad..";
}
}
$klasa = new novaKlasa('Sto je ovo ??');
echo $klasa->pisiUpitnik();
// Izbacuje "Sto je ovo"
echo $klasa->ime;
// izmacuje "butch"
// I na kraju __destruct() funk. izbacuje poruku
?>
|
Sada sam upotrijebio i "static" -
statični propertyi mogu se pozvati izvan klase.
Recimo ovo je osnovno sto bi se ticalo novog objektnog modela u 5-ici.. |
_________________ FRENCH GUARD: No chance, English bed-wetting types.
I burst my pimples at you and call your door-opening request a silly thing, you tiny-brained wipers of other people's bottoms! Flikrac |
|
Back to top |
|
|
maxy
Joined: 07 Sep 2003 Posts: 894 Location: Zagreb
|
Posted: 14.06.2004 12:04 Post subject: |
|
|
objektni model u petici je prosiren ali je kompatibilan sa starim modelom koji je bio u cetvorki.
inace, destruktor nije potrebno pisati niti u C-u niti u PHP 5 jer se objekt nakon izvrsavanja unisti po defaultu.
dok petica ne dojde, ovaj objektni model je sasvim dosta jer novi model se oslanja na sigurnost podataka. |
|
|
Back to top |
|
|
|