Forum FAQForum FAQSearchSearch MemberlistMemberlist Forum ignore listForum ignore list RegisterRegister ProfileProfile Log in to check your private messagesLog in to check your private messages Log inLog in
php/mysql question

 
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side
View previous topic :: View next topic  
Author Message
budha



Joined: 02 Mar 2004
Posts: 1377
Location: Osijek

PostPosted: 09.06.2004 13:47    Post subject: php/mysql question Add user to your forum ignore list Reply with quote

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
View user's profile Send private message Visit poster's website
budha



Joined: 02 Mar 2004
Posts: 1377
Location: Osijek

PostPosted: 09.06.2004 19:43    Post subject: Add user to your forum ignore list Reply with quote

...
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
View user's profile Send private message Visit poster's website
_butch



Joined: 10 Sep 2003
Posts: 870
Location: Maichno, Krlovc

PostPosted: 09.06.2004 20:22    Post subject: Add user to your forum ignore list Reply with quote

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
View user's profile Send private message Visit poster's website MSN Messenger
che.UP
mi3.crew


Joined: 07 Sep 2003
Posts: 2320
Location: zagreb

PostPosted: 09.06.2004 20:25    Post subject: Add user to your forum ignore list Reply with quote

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
View user's profile Send private message Visit poster's website
Sulien



Joined: 04 Jan 2004
Posts: 2905
Location: Zagreb

PostPosted: 09.06.2004 20:29    Post subject: Add user to your forum ignore list Reply with quote

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) Confused
Back to top
View user's profile Send private message Send e-mail Visit poster's website
maxy



Joined: 07 Sep 2003
Posts: 894
Location: Zagreb

PostPosted: 09.06.2004 21:08    Post subject: Add user to your forum ignore list Reply with quote

ovo je problem koji se rjesava pjeske Smile

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
View user's profile Send private message
silence



Joined: 24 Apr 2004
Posts: 890
Location: .....ni na nebu, ni na zemlji.....

PostPosted: 09.06.2004 21:08    Post subject: Add user to your forum ignore list Reply with quote

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
View user's profile Send private message Visit poster's website
maxy



Joined: 07 Sep 2003
Posts: 894
Location: Zagreb

PostPosted: 09.06.2004 21:19    Post subject: Add user to your forum ignore list Reply with quote

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
View user's profile Send private message
silence



Joined: 24 Apr 2004
Posts: 890
Location: .....ni na nebu, ni na zemlji.....

PostPosted: 09.06.2004 21:23    Post subject: Add user to your forum ignore list Reply with quote

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
View user's profile Send private message Visit poster's website
PsychoPod



Joined: 05 Oct 2003
Posts: 166

PostPosted: 09.06.2004 22:01    Post subject: Add user to your forum ignore list Reply with quote

kad smo vec kod class-a Confused
ima li netko site s dobrim tutorialom za class?
znaci opcenito, ne primjere skripti. toga imam vec dosta Smile
znaci, kako se definira, kako se poziva i to.
bio bi zahvalan :ave
Back to top
View user's profile Send private message
Sulien



Joined: 04 Jan 2004
Posts: 2905
Location: Zagreb

PostPosted: 09.06.2004 23:11    Post subject: Add user to your forum ignore list Reply with quote

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
View user's profile Send private message Send e-mail Visit poster's website
maxy



Joined: 07 Sep 2003
Posts: 894
Location: Zagreb

PostPosted: 09.06.2004 23:13    Post subject: Add user to your forum ignore list Reply with quote

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 Smile

idemo dalje na objasnjavanja Very Happy


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 Smile
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 Smile

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
View user's profile Send private message
maxy



Joined: 07 Sep 2003
Posts: 894
Location: Zagreb

PostPosted: 09.06.2004 23:17    Post subject: Add user to your forum ignore list Reply with quote

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
View user's profile Send private message
t3r0



Joined: 08 Jun 2004
Posts: 107

PostPosted: 10.06.2004 00:39    Post subject: Add user to your forum ignore list Reply with quote

cool tutor, svaka cast Cool
ali ... mrzim pokazivace, pa bas ne koristim oop Smile
Back to top
View user's profile Send private message
maxy



Joined: 07 Sep 2003
Posts: 894
Location: Zagreb

PostPosted: 10.06.2004 08:08    Post subject: Add user to your forum ignore list Reply with quote

t3r0 wrote:
cool tutor, svaka cast Cool
ali ... mrzim pokazivace, pa bas ne koristim oop Smile


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 Smile
Back to top
View user's profile Send private message
PsychoPod



Joined: 05 Oct 2003
Posts: 166

PostPosted: 13.06.2004 23:16    Post subject: Add user to your forum ignore list Reply with quote

maxy, uber :ave :ave
Laughing
Back to top
View user's profile Send private message
_butch



Joined: 10 Sep 2003
Posts: 870
Location: Maichno, Krlovc

PostPosted: 13.06.2004 23:42    Post subject: Add user to your forum ignore list Reply with quote

@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
View user's profile Send private message Visit poster's website MSN Messenger
maxy



Joined: 07 Sep 2003
Posts: 894
Location: Zagreb

PostPosted: 14.06.2004 11:04    Post subject: Add user to your forum ignore list Reply with quote

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
View user's profile Send private message
Display posts from previous:   
This forum is locked: you cannot post, reply to, or edit topics.   This topic is locked: you cannot edit posts or make replies.    mi3dot.org Forum Index -> Server-side All times are GMT + 1 Hour
Page 1 of 1

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group