[ Miro Spiro @ 02.01.2012. 10:57 ] @
Pozdrav svima.

Imam jedan problem pa se nadam SAVJETU.Radim jedan programcic koji se sastoji od MySQL baze, HTML forme i PHP koda .

Trebao bi da uneseni sadrzaj iz HTML forme spasi u bazi. Problem je nastajao jer mi je stalno izbacivao undefined index na liniji koda 15 ,17 itd koji sam rijesio sa dodavanjem @ ispred $ e onda je poceo da mi izbacuje da je nedefinirana funkcija na liniji 20 koju sam rijesio istom metodom a sad mi stalno izbacuje dio upozorenja da trebaju sva polja da budu popunjena iako ja popunim sa probnim podatcima sva polja.

Unaprijed hvala

P.S

Kod



<?php
// contact to database
$connect = mysql_connect("localhost", "root", "") or die ("Error , check your server connection.");
mysql_select_db("registar lijekova");

//Get data in local variable
$v_glavna_grupa_lijekova=@$_POST['glavna_grupa_lijekova'];
$v_podgrupa_lijekova=@$_POST['podgrupa_lijekova'];
$v_vrsta_lijeka=$_POST['vrsta_lijeka'];
$v_ime_lijeka=$_POST['ime_lijeka'];
$v_djelovanje=$_POST['djelovanje'];
$v_indikacije=$_POST['indikacije'];
$v_doziranje_i_način_primjene=@$_POST['doziranje_i_način_primjene'];
$v_kontraindikacije=$_POST['kontraindikacije'];
$v_neželjeni_efekti=@$_POST['neželjeni_efekti'];
$v_posebna_upozorenja=$_POST['posebna_upozorenja'];
$v_registirani_lijekovi=@$_POST['registirani_lijekovi'];

// check for null values
if (@$v_glavna_grupa_lijekova=="" or @$v_registrirani_lijekovi=="")
echo "All fields must be entered, hit back button and re-enter information";
else{
$query="insert into books(glavna_grupa_lijekova,podgrupa_lijekova,vrsta_lijeka,ime_lijeka,djelovanje,indikacije,doziranje_i_način_primjene,kontraindikacije,neželjeni_efekti,posebna_upozorenja,registrirani_lijekovi) values('$v_glavna_grupa_lijekova','$v_podgrupa_lijekova','$v_vrsta_lijeka','$v_me_lijeka','$v_djelovanje','$v_indikacije','$v_doziranje_i_način_primjene','$v_kontraindikacije','$v_neželjeni_efekti','$v_posebna_upozorenja','$v_registrirani_lijekovi')";
mysql_query($query) or die(mysql_error());
echo "Your message has been received";
}

?>
[ VladaSu @ 03.01.2012. 16:46 ] @
Resavaj problem po problem a ne da ih skrivas. @ ti samo skriva problem i koristan je u retkim slucajevima, recimo kada ocekujes da ti sistem nesto odradi i on ti nekada odradi kako treba a nekada ne, a u tvom nikako ne treba to koristiti.
Prvo proveri da li je setovano sa isset
[ zmil @ 03.01.2012. 19:34 ] @
nisi dobro postavio polja u bazi
Najverovatnije neko polje ne moze biti NULL a post varijabla je null i errr
[ Miro Spiro @ 03.01.2012. 22:37 ] @
Zahvaljujem na pomoci. Probacu pa javim
[ Miro Spiro @ 04.01.2012. 22:40 ] @
Nece pa nece probao sam sa NULL i ostalim ali nece pa nece .Pravio tablice nekoliko puta ali isto.Sad sam probao skolski sa primjerom iz knjige red koda po red koda nisam radio copy -paste i opet se isto desava. Zaglavi kod if i echo stvarno nisam pametan vise.Unio bezveze podatke i nece dalje od imena. Ako ne stavim @izbacuje mi undefined variable ne kontam ovo nikako.


<html>
<head>
<title>Book-O-Rama Book Entry Results</title>
</head>
<body>
<h1>Book-O-Rama Book Entry Results</h1>
<?php
// create short variable names
$isbn=$_POST['isbn'];
$author=$_POST['author'];
$title=$_POST['ime'];
$price=$_POST['prezime'];
$price=$_POST['neznano'];
$price=$_POST['proba'];
$price=$_POST['title'];
$price=$_POST['price'];

if (!$isbn || !$author || !@$ime ||!@$prezime ||!$neznano ||!$proba ||!$title || !$price) {
echo "You have not entered all the required details.<br />"
."Please go back and try again.";
exit;
}

if (!get_magic_quotes_gpc()) {
$isbn = addslashes($isbn);
$author = addslashes($author);
$author = addslashes($ime);
$author = addslashes($prezime);
$author = addslashes($nezano);
$author = addslashes($proba);
$title = addslashes($title);
$price = doubleval($price);
}

@ $db = new mysqli('localhost', 'root', '', 'registar lijekova');

if (mysqli_connect_errno()) {
echo "Error: Could not connect to database. Please try again later.";
exit;
}

$query = "insert into books values
('".$isbn."', '".$author."', '".$ime."', '".$prezime."', '".$neznano."', '".$proba."','".$title."', '".$price."')";
$result = $db->query($query);

if ($result) {
echo $db->affected_rows." book inserted into database.";
} else {
echo "An error has occurred. The item was not added.";
}

$db->close();
?>
</body>
</html>
[ VladaSu @ 04.01.2012. 23:06 ] @
Vidi se neki pomak u radu ali promasujes poentu. Nisi od onih sto okace 100 redova pa da im neko resi.
Kada ovde pises php code onda stavi [ code : php] bez razmaka, citljivije je.

Koristi ovako nesto.
(napravio sam pomocnu funkciju getPost koja proverava da li je setovan post a usput ako treba uradi escape da ti neko ne bi provalio bazu)
Code (php):

<?php
function getPost($var, $default = "", $escape = true)
{
    $value = isset($_POST[$var]) ? $_POST[$var] : $default;
    return $escape ? mysql_real_escape_string($value) : $value;
}
// contact to database
$connect = mysql_connect("localhost", "root", "") or die ("Error , check your server connection.");
mysql_select_db("registar lijekova");

//Get data in local variable
$v_glavna_grupa_lijekova=getPost('glavna_grupa_lijekova');
$v_podgrupa_lijekova=getPost('podgrupa_lijekova');
$v_vrsta_lijeka=getPost('vrsta_lijeka');
$v_ime_lijeka=getPost('ime_lijeka');
$v_djelovanje=getPost('djelovanje');
$v_indikacije=getPost('indikacije');
$v_doziranje_i_način_primjene=getPost('doziranje_i_način_primjene');
$v_kontraindikacije=getPost('kontraindikacije');
$v_neželjeni_efekti=getPost('neželjeni_efekti');
$v_posebna_upozorenja=getPost('posebna_upozorenja');
$v_registirani_lijekovi=getPost('registirani_lijekovi');

// check for null values
if (empty($v_glavna_grupa_lijekova) || empty(v_registrirani_lijekovi))
echo "All fields must be entered, hit back button and re-enter information";
else{
$query="insert into books(glavna_grupa_lijekova,podgrupa_lijekova,vrsta_lijeka,ime_lijeka,djelovanje,indikacije,doziranje_i_način_primjene,
kontraindikacije,neželjeni_efekti,posebna_upozorenja,registrirani_lijekovi) values('$v_glavna_grupa_lijekova','$v_podgrupa_lijekova','$v_vrsta_lijeka','$v_me_lijeka','$v_djelovanje'
,'$v_indikacije','$v_doziranje_i_način_primjene','$v_kontraindikacije','$v_neželjeni_efekti','$v_posebna_upozorenja','$v_registrirani_lijekovi')"
;
mysql_query($query) or die(mysql_error());
echo "Your message has been received";
}

?>
 
[ Miro Spiro @ 05.01.2012. 08:35 ] @
Prvo da se zahvalim na pomoci.


Probao sam kod ali je bio opet izbacivao gresku na linij 32.

Parse error: syntax error, unexpected ')', expecting T_PAAMAYIM_NEKUDOTAYIM trazio sam po internetu i help manualu i tamo kazu da je ili tipo greska ili da je PHP < 5.3 te sam na kraju shvatio da je falilo $v_registirani_lijekovi.Cim sam to popravio greske je nestalo ali opet kaze da sva polja trebaju biti popunjena.

Code (php):

if (empty($v_glavna_grupa_lijekova) || empty(v_registrirani_lijekovi))
echo "All fields must be entered, hit back button and re-enter information";
else{
$query="insert into books(glavna_grupa_lijekova,podgrupa_lijekova,vrsta_lijeka,ime_lijeka,djelovanje,indikacije,doziranje_i_nacin_primjene,
kontraindikacije,neželjeni_efekti,posebna_upozorenja,registrirani_lijekovi) values('$v_glavna_grupa_lijekova','$v_podgrupa_lijekova','$v_vrsta_lijeka','$v_me_lijeka','$v_djelovanje'
,'$v_indikacije','$v_doziranje_i_nacin_primjene','$v_kontraindikacije','$v_neželjeni_efekti','$v_posebna_upozorenja','$v_registrirani_lijekovi')"
;
mysql_query($query) or die(mysql_error());
echo "Your message has been received";
}

?>
 


Jednostavno mi nije jasno kako kod koji 100% radi cim promjenim imena u tablici nece da radi.Sada mi jedino to ne ualzi u glavu ostalo sve razumijem.

Jos jednom hvala
[ VladaSu @ 05.01.2012. 10:37 ] @
Ne znam da li u imena mysql kolona i php varijabli mozes da stavljas slova sa kukicom - neželjeni_efekti.
[ Miro Spiro @ 05.01.2012. 10:47 ] @
Probao sam bez kvacica inace samo na tom mjestu se i nalazila kvacica a falilo je i ime_ na jednom mjestu. Inace u bazi i nigdje nema kvacica ali opet sam probao i nece.Ne kontam sto nece jedstavno repliciram kod koji 100% radi ali nece stalno izbacuje da sva polja moraju biti popunjena.
[ Milos911 @ 05.01.2012. 11:51 ] @
if (empty($v_glavna_grupa_lijekova) || empty(v_registrirani_lijekovi))
if (empty($v_glavna_grupa_lijekova) || empty($v_registrirani_lijekovi))
Nedostaje ti '$'. Ili je problem nesto drugo (malo sam u zurbi pa ne mogu bas detaljno sve da procitam)
[ Miro Spiro @ 05.01.2012. 12:43 ] @
Vidio sam to i popravio sam ali nista ne radi opet .Mislio sam i ja da je to problem ali nece opet
[ VladaSu @ 05.01.2012. 17:00 ] @
Postavi sql za kreiranje tabele.
Code (sql):

SHOW CREATE TABLE `books`;
 

[ Miro Spiro @ 05.01.2012. 19:13 ] @
To sam probao jos prije i nije pomoglo.
[ Burgos @ 05.01.2012. 19:53 ] @
Ne, nego postavi ovde izlaz toga :)
[ Miro Spiro @ 05.01.2012. 20:19 ] @
Code (sql):


CREATE TABLE books(
glavna_grupa_lijekova CHAR(13) NOT NULL PRIMARY KEY,
podgrupa_lijekova CHAR(50),
vrsta_lijeka CHAR(50),
ime_lijeka CHAR(50),
djelovanje CHAR(50),
indikacije CHAR(50),
doziranje_i_nacin_primjene CHAR(100),
kontraindikacije CHAR(50),
nezeljeni_efekti CHAR(50),
posebna_upozorenja CHAR(50),
registirani_lijekovi FLOAT(4,2))

 
[ VladaSu @ 05.01.2012. 21:01 ] @
1. Izbaci sva slova sa kvacicama u php-u imenima varijabli. MySQL ne moras ali prakticnije je da izbacis.
2. Proveri da kada pozivas varijablu u php-u da joj das isti naziv da ne izostavis slovo i slicno. (npr. ovde si zeznuo $v_registirani_lijekovi i $v_registrirani_lijekovi - fali ti R)
3. Ako i dalje ne radi onda postavi taj novi php code i novi show create table.

Citat:

PHP variables must start with a letter or underscore "_".
PHP variables may only be comprised of alpha-numeric characters and underscores. a-z, A-Z, 0-9, or _ .
Variables with more than one word should be separated with underscores. $my_variable
Variables with more than one word can also be distinguished with capitalization. $myVariable


Jako mi je cudan tvoj show create table, ne ono sto si ti kucao nego nesto ti mysql vrati kada izvrsis taj sql koji sam ti postavio.
Treba da imas primary key sa autoincrement.
[ Miro Spiro @ 06.01.2012. 08:25 ] @
Popravio sam php kod i napravio novu tabelu sa autoincrement ali opet po staromnece pa nece.Sad cu da napisem neku PHP skripticu da istestiram bazu da vidim da li ona funkcionise ali nisam vise stvarno pametan.


Code (sql):


CREATE TABLE books(
glavna_grupa_lijekova INT(13) NOT NULL AUTO_INCREMENT,
podgrupa_lijekova CHAR(50),
vrsta_lijeka CHAR(50),
ime_lijeka CHAR(50),
djelovanje CHAR(50),
indikacije CHAR(50),
doziranje_i_nacin_primjene CHAR(100),
kontraindikacije CHAR(50),
nezeljeni_efekti CHAR(50),
posebna_upozorenja CHAR(50),
registirani_lijekovi FLOAT(4,2),
PRIMARY KEY (glavna_grupa_lijekova))

 
[ VladaSu @ 06.01.2012. 14:05 ] @
Sta ti tacno javlja sada? Postuj ovde php kod koji si menjao.
[ Miro Spiro @ 06.01.2012. 21:57 ] @
Sad mi javlja sljedece:Fatal error: Function name must be a string in C:\xampp\htdocs\test\insert.php on line 7

Umjesto getPost stavio sam $_POST ali sad ovo izbaci a ako stavim getPost na 7 liniji koda kaze da se mora da definira varijabla. Kod radi kad ubacim samo 4 polja u HTML-u i u bazi. Ne razumijem nikako sta mu je.Probao sam umjesto glavna_grupa_lijekova da sastavim sve ali opet nece.



Code (php):


<?php
// contact to database
$connect = mysql_connect("localhost", "root", "") or die ("Error , check your server connection.");
mysql_select_db("registar lijekova");
 
//Get data in local variable
$v_glavna_grupa_lijekova=$_POST('glavnagrupalijekova');
$v_podgrupa_lijekova=$_POST('podgrupa_lijekova');
$v_vrsta_lijeka=$_POST('vrsta_lijeka');
$v_ime_lijeka=$_POST('ime_lijeka');
$v_djelovanje=$_POST('djelovanje');
$v_indikacije=$_POST('indikacije');
$v_doziranje_i_nacin_primjene=$_POST('doziranje_i_nacin_primjene');
$v_kontraindikacije=$_POST('kontraindikacije');
$v_neželjeni_efekti=$_POST('nezeljeni_efekti');
$v_posebna_upozorenja=$_POST('posebna_upozorenja');
$v_registirani_lijekovi=$_POST('registrirani_lijekovi');

 
// check for null values
if ($v_glavnagrupalijekova==""  or $v_registrirani_lijekovi=="")
echo "All fields must be entered, hit back button and re-enter information";
else{
$query="insert into contact(glavnagrupalijekova,podgrupa_lijekova,vrsta_lijeka,ime_lijeka,djelovanje,indikacije,doziranje_i_nacin_primjene,kontraindikacije,nezeljeni_efekti,posebna_upozorenja,registrirani_lijekovi) values('$v_glavnagrupalijekova','$v_podgrupa_lijekova','$v_vrsta_lijeka','$v_ime_lijeka','$v_djelovanje','$v_indikacije','$v_doziranje_i_nacin_primjene','$v_kontraindikacije','$v_nezeljeni_efekti','$v_posebna_upozorenja','$v_registrirani_lijekovi')";
mysql_query($query)  or die(mysql_error());
echo "Your message has been received";
}
 
?>


 
[ VladaSu @ 06.01.2012. 23:44 ] @
Cemu svi prethodni postovi i saveti sto smo ti postavljali?
1. $_POST nije funkcija nego varijabla, ti array pa ne ide $_POST( nego $_POST[
2. Napisao sam ti funkciju gde lepo reseavas problem ako nije setovana neka varijabla da bi se oslobodio onih gluposti sa @
3. Uspit sam ti pripremio varijable da mogu da se insertuju u bazu bez bojazni da ce ti neko zeznuti podatke
4. Rekao sam da proveris imena varijabli jer ako se razlikuju za jedno slovo onda su to razlicite varijable a imas takvih slucajeva

Kada ispravis sve greske kako ti je receno da ispravis tvoj kod ce raditi. Provereno. Do tada ti NECE raditi.
[ Miro Spiro @ 12.01.2012. 10:34 ] @
Gledao sam kod i gledao i bilo je greski u nedostatku slova ali sam to uspjesno popravio. Naravno i dalje nije radilo. Tada sam uradio sljedece. Uzeo sam ovaj php kod izbrisao lijekove i ubacio sljedece stavke isbn,author,title i price posto je ovo iz knjige razvoj PHP aplikacija za web. Nakon toga probam upload na bazu registar lijekova i opet nista te pars error itd. Nakon toga izvadim iz orginalne baze iz knjige cijelu tablicu books i stavim u registar lijekova sa onim kodom sto sam radio + dodatni dio koda koji ste mi ovdje napisali i voila radi.

Code (sql):


CREATE TABLE books
(  isbn CHAR(13) NOT NULL PRIMARY KEY,
   author CHAR(50),
   title CHAR(100),
   price FLOAT(4,2));

 



Ovo je iz knjige tablica books.Ne razumijem zato u tablicu koja je ovdje prije stavljena nece a u ovu hoce ovdje su 4 polja a tamo 11 ali ja mislim da to nije razlog jer gledao sam i u php helpu i mysql helpu i ne vidim neki razlog zbog kojeg ovo nece da radi.Cim promjenim isbn itd u glavna grupa lijekova u poljima u php-u izbaci da sva polja moraju biti popunjena.

[Ovu poruku je menjao Miro Spiro dana 12.01.2012. u 12:10 GMT+1]
[ VladaSu @ 12.01.2012. 12:57 ] @
Citat:
Miro Spiro: Gledao sam kod i gledao i bilo je greski u nedostatku slova ali sam to uspjesno popravio. Naravno i dalje nije radilo.

Kako mi da znamo zasto nije radilo ako nisi postavio kod? Kazem ti da provereno radi ako se svi navedeni nedostaci isprave. Ocigledno da nisi sve ispravio pa bi bilo lepo da postavis kod da vidimo zasto ne radi.

Citat:
Miro Spiro: Tada sam uradio sljedece. Uzeo sam ovaj php kod izbrisao lijekove i ubacio sljedece stavke isbn,author,title i price posto je ovo iz knjige razvoj PHP aplikacija za web. Nakon toga probam upload na bazu registar lijekova i opet nista te pars error itd.

Opet, kakav kod, kakva greska?

Da li ima 4 ili 11 kolona tabela nema veze. Nisi nam nista sa time pomogao da ti resimo problem.

Konkretno svaki put kada nesto uradis postavi i php i sql create table code.

Koji php editor koristis? Pitam jer vecina novijih php editora ima autocomplite pa ne mozes da pogresis slovo pri pisanju varijabli, a to ti je greska u svakom postu koji si ostavio.
Onaj kod koji sam ostavio radi kada se isprave greske koja sam napisao da su greske.
Namerno sam ostavio sa greskama kako bi znao gde gresis i da znas da otklonis greske.
Bitno je i da znas da kada ti php javi neki error ili warning da znas zasto ti je to javio.

[Ovu poruku je menjao VladaSu dana 12.01.2012. u 14:40 GMT+1]
[ Miro Spiro @ 12.01.2012. 17:10 ] @
Editor je PHPEdit ili Dreamweaver. Kod nisam postavljao jer je to prijasnji kod koji sam vec prije stavio ovdje. Znaci kad dodam ili promijenim naziv varijable opet krene greska da sva polja nisu popunjena BEZ javljanja ikakve greske jednostavno nece (naravno da sam promijenio naziv svugdje i u HTML-u i bazi).

Code (php):


<html>
<head>
  <title>Book-O-Rama Book Entry Results</title>
</head>
<body>
<h1>Book-O-Rama Book Entry Results</h1>
<?php
 
 function getPost($var, $default = "", $escape = true)
{
    $value = isset($_POST[$var]) ? $_POST[$var] : $default;
    return $escape ? mysql_real_escape_string($value) : $value;
}
// contact to database
$connect = mysql_connect("localhost", "root", "") or die ("Error , check your server connection.");
mysql_select_db("registar lijekova");

//Get data in local variable
$v_isbn=getPost('isbn');
$v_author=getPost('author');
$v_title=getPost('title');
$v_price=getPost('price');

// check for null values
if (empty($v_isbn) || empty($v_price))
echo "All fields must be entered, hit back button and re-enter information";
else{
$query="insert into books(isbn,author,title,price) values('$v_isbn','$v_author','$v_title','$v_price')";
mysql_query($query) or die(mysql_error());
echo "Your message has been received";
}

?>
</body>
</html>


 
[ VladaSu @ 12.01.2012. 22:12 ] @
Kako sada da ti ispravim kod koji ne radi kada si ti stavio drugi kod koji radi?
Postavi poslednji kod koji ti ne radi, i php i sql.

Code (php):

<?php
function getPost($var, $default = "", $escape = true)
{
     $value = isset($_POST[$var]) ? $_POST[$var] : $default;
     return $escape ? mysql_real_escape_string($value) : $value;
}
// contact to database
$connect = mysql_connect("localhost", "root", "") or die ("Error , check your server connection.");
mysql_select_db("registar lijekova");

//Get data in local variable
$v_glavna_grupa_lijekova=getPost('glavna_grupa_lijekova');
$v_podgrupa_lijekova=getPost('podgrupa_lijekova');
$v_vrsta_lijeka=getPost('vrsta_lijeka');
$v_ime_lijeka=getPost('ime_lijeka');
$v_djelovanje=getPost('djelovanje');
$v_indikacije=getPost('indikacije');
$v_doziranje_i_nacin_primjene=getPost('doziranje_i_nacin_primjene');
$v_kontraindikacije=getPost('kontraindikacije');
$v_nezeljeni_efekti=getPost('nezeljeni_efekti');
$v_posebna_upozorenja=getPost('posebna_upozorenja');
$v_registrirani_lijekovi=getPost('registirani_lijekovi');


// check for null values
if (!empty($v_glavna_grupa_lijekova) || !empty($v_registrirani_lijekovi))
echo "All fields must be entered, hit back button and re-enter information";
else{
$query="insert into books(glavna_grupa_lijekova,podgrupa_lijekova,vrsta_lijeka,ime_lijeka,djelovanje,indikacije,doziranje_i_nacin_primjene,
kontraindikacije,nezeljeni_efekti,posebna_upozorenja,registirani_lijekovi) values
('$v_glavna_grupa_lijekova','$v_podgrupa_lijekova','$v_vrsta_lijeka','$v_ime_lijeka','$v_djelovanje'
,'$v_indikacije','$v_doziranje_i_nacin_primjene','$v_kontraindikacije','$v_nezeljeni_efekti','$v_posebna_upozorenja','$v_registrirani_lijekovi')"
;

mysql_query($query) or die(mysql_error());
echo "Your message has been received";
}
exit;
?>
 


Code (sql):

CREATE TABLE `books` (
  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `glavna_grupa_lijekova` CHAR(13) DEFAULT NULL,
  `podgrupa_lijekova` CHAR(50) DEFAULT NULL,
  `vrsta_lijeka` CHAR(50) DEFAULT NULL,
  `ime_lijeka` CHAR(50) DEFAULT NULL,
  `djelovanje` CHAR(50) DEFAULT NULL,
  `indikacije` CHAR(50) DEFAULT NULL,
  `doziranje_i_nacin_primjene` CHAR(100) DEFAULT NULL,
  `kontraindikacije` CHAR(50) DEFAULT NULL,
  `nezeljeni_efekti` CHAR(50) DEFAULT NULL,
  `posebna_upozorenja` CHAR(50) DEFAULT NULL,
  `registirani_lijekovi` FLOAT(4,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
 



Pogledaj u cemu ti je razlika pa javi.
[ Miro Spiro @ 14.01.2012. 19:36 ] @
Napokon proradilo.Bio problem u imenima varijabli. Kako sam otvorio cijeli fajl u PHPEditu napokon je svugdje isto bilo napisano.Sad imam drugi problem. Naime problem je sto se neke glavne grupe poklapaju u imenu i stavi mi upozorenje da je isti naziv za određeno polje cim malo promijenim naziv bude sve spaseno.Sad ne znam kako da rijesim taj problem.Problem je u grupalijekova. Jos jednom hvala za pomoc za rijesavanje proslog problema.


Code (sql):


CREATE TABLE lijekovi
(   grupalijekova CHAR(100) NOT NULL PRIMARY KEY,
     glavnagrupalijekova CHAR(100),
     podgrupalijekova CHAR(50),
     vrstalijeka CHAR(50),
     imelijeka CHAR(50),
     djelovanje longtext,
     indikacije longtext,
     doziranjeinacinprimjene longtext,
     kontraindikacije longtext,
     nezeljeniefekti longtext,
     posebnaupozorenja longtext,
     registriranilijekovi longtext
);


 



update :

razmisljao sam o foreign keys constraints ali mi je problem sto vecinom to predlazu za tabele sa istim column a kod mene je isti naziv unutar jedne tabele.Sad sam stavio PRIMARY KEY za polje koje se nigdje ne koristi tj . ne popunjavam ga u HTML-u vec pocinje od glavne grupe. Moje pitanje je moze li ovako jer sad sve radi nema problema.

Code (sql):


CREATE TABLE lijekovi
(  test INT(11)  NOT NULL AUTO_INCREMENT,
     grupalijekova CHAR(100),
     glavnagrupalijekova CHAR(100),
     podgrupalijekova CHAR(50),
     vrstalijeka CHAR(50),
     imelijeka CHAR(50),
     djelovanje longtext,
     indikacije longtext,
     doziranjeinacinprimjene longtext,
     kontraindikacije longtext,
     nezeljeniefekti longtext,
     posebnaupozorenja longtext,
     registriranilijekovi longtext,
     PRIMARY KEY (test));



 




[Ovu poruku je menjao Miro Spiro dana 14.01.2012. u 21:03 GMT+1]

[Ovu poruku je menjao Miro Spiro dana 14.01.2012. u 21:07 GMT+1]
[ VladaSu @ 16.01.2012. 13:15 ] @
Nisi pogledao moj create sql. Ne treba tamo da ti stoji test nego id ili neki drugi logicniji naziv.
Taj id treba da koristis u drugim tabelama.
Npr.
Tabela
grupe_lekova(id, naziv)
sa vrednostima
1, naziv grupe x
2, naziv grupe y

i tabela
lekovi (id, naziv, grupa_id, cena)
sa vrednostima
1, lek1, 1, 100
4, lek2, 1, 120
77, lek3, 2, 10


U prevodu ovo ti znaci da imas dve grupe lekova sa nazivima 'naziv grupe x' koji ima svoj broj 1 i druga grupa 'naziv grupe u' koja ima svoj broj 2
Imas 3 leka prvi lek ima id 1,naziva se lek1 i pripada prvoj grupi lekova i cena mu je 100.
Drugi lek ima id 4 i naziv lek2 i isto pripada prvoj grupi i cena mu je 120
Treci lek ima id 77 i nazvi lek3 i pripada drugoj grupi i cena mu je 10.

Bitno je da napravis dobru bazu podataka kako bi ti kasniji rad bio laksi i sa sto manje gresaka.
Postavi sve tabele sto si napravio da vidimo jer ovo sto si zapoceo je lose.


[ Miro Spiro @ 19.01.2012. 12:55 ] @
He he sredio sam bazu prije ali sam zaboravio da ovde stavim update: Evo kako sada izgleda

Code (sql):


CREATE TABLE lijekovi
(  id INT(11)  NOT NULL AUTO_INCREMENT,
     grupalijekova CHAR(100),
     glavnagrupalijekova CHAR(100),
     podgrupalijekova CHAR(100),
     vrstalijeka CHAR(150),
     imelijeka CHAR(100),
     djelovanje longtext,
     indikacije longtext,
     doziranjeinacinprimjene longtext,
     kontraindikacije longtext,
     nezeljeniefekti longtext,
     posebnaupozorenja longtext,
     registriranilijekovi longtext,
     PRIMARY KEY (id));

 


Hvala jos jednom na pomoci.
[ VladaSu @ 19.01.2012. 16:04 ] @
grupalijekova char(100),
glavnagrupalijekova char(100),

ti treba da su u posebnoj tabeli i da stavis id iz te posebne tabele a ne da pises slovima.
Ako pogresis jedno slovo to ce biti druga grupa.
Ako hoces da menjas naziv grupe onda ces menjati na jednom mestu a ne na 100 mesta.
Brze ce raditi pretraga i grupisanje
[ Miro Spiro @ 19.01.2012. 16:59 ] @
Nisam skontao ovo za ID. Ovako ja imam u localhostu bazu registar lijekova i u njoj imam tablicu lijekovi ovu sto sam stavio.Sad da li da napravim jos jednu tablicu i u nju da stavim grupu i glavnu grupu lijekova sa id kako primary key te da onda id te dvije grupe stavim u ovu prvu tablicu ili nekako drugacije.Malo me buni to sto je u insert.php -u ubaceno da sve podatke unosi u lijekovi e sad ne znam kako bi ovo implementirao.

Unaprijed hvala
[ VladaSu @ 21.01.2012. 00:49 ] @
Pogledaj odgovor http://www.elitesecurity.org/t443328-1#3033967 gde ti je sve objasnjeno kako treba da izgleda baza i dat ti je primer.

Ti treba da definises grupe lekova na posebnom mestu a onda kada unosis lek da ti se prikaze lista grupe lekova i da izaberes a ne da unosis.
Recimo kada radis telefonski imenik gde imas ime i prezime, grad i broj telefona.
Da li je bolje da imas listu gradova pa da izaberes grad iz liste nego da svaki put kucas grad.
I jedno ukucas Beograd, drugi put Bg, treci put pogresis pa ukucas Begrad, pa neko ukuca Belgrade ....
I sada ti treba da pretrazis sve brojeve u Beogradu, nema sanse. Da li ces znati da li da trazis Belgrade, Bg, Beogrd i 100 kombinacija skracenica i gresaka?
Umesto da u posebnoj tabeli imas Beograd sa id 1 i on kada unosi novi podatak u imeni izabere iz liste Beograd a ti znas da je to id 1 i to stavis u imenik
Pera Peric, 011-xxxxxxxx, Ulica, 1 (ovo ti je id za beograd).
I onda kada pretrazujes brojeve za Beograd pretrazujes tamo gde je id_mesta = 1 a ne BG ili bg ili Beograd ili Belgrade .....

I tu nema veze da li si pogresno uneo. Jer kada ispravis id ce ostati i dalje 1 i u tabeli brojeva i dalje id_mesta 1.

To se zove normalizacija baze.

Ukratko. Sve sto ti se ponavlja u jednoj tabeli kao tekst to mozes da stavis u drugu tabelu bez ponavljanja a da u prvoj tabeli stavis id iz druge tabele.

U neku krajnost mogao bi i ulice da stavis u posebnu tabelu ako ima potrebe.
Onda bi ovaj primer izgledao ovako:
1. Tabela Mesta:
mesto_id, naziv (npr vrednosti: 1, Beograd | 2, Novi Sad ....)

2. Tabela Ulice:
ulica_id, mesto_id, naziv (npr vrednost: 6, 1, Karadjordjeva)
Ovo znaci da ulica sa ulica_id 6 se nalazi u Beogradu jer ima mesto_id=1 a to vidis u tabeli mesta da je Beograd, da je mesto_id=2 to bi znacilo da se ulica nalazi u Novom Sadu.

3. Imenik
id, ime_prezime, broj, ulica_id (npr vrednost: 1, Pera Peric, xxxxx, 6)
Sto znaci da prvi red u imeniku je Pera Peric sa brojem telefona xxxxx a ulica_id mu je 6.
Odes u ulice tabelu i pogledas koje polje ima ulica_id=6 a to je ulica Karadjordjeva i u toj tabeli vidis da ta ulica ima mesto_id=1 i odes i pogledas da u tabeli mesta gde je mesto_id = 1 i vidis da je to Beograd.
Zakljucis da je to Pera Peric sa xxxx brojem telefona iz Karadjordjeve u Beogradu.


Ajd javi se kada skontas sta sam ti pricao.

Za pocetak mozes da napravis ove 3 tabele sa vrednostima koje sam ti rekao i onda daj ovde sta ti nije jasno.
[ Miro Spiro @ 21.01.2012. 08:37 ] @
Hm skontao sam ja to ali ima jedan problem. Naime glavne grupe lijekova bi trebala da se onda definisu sa id om a te grupe su stalne tj. ona se ne mijenja. Problem je u tome sto npr za neko vrijeme moze da dodje neka druga grupa lijekova koja je do sada bila samo u klinickim istrazivanjima ili koja do sada nije bila u proizvodnji ( lijekovi u terapiji malignih oboljenja) itd. Beograd, Novi Sad itd su mjesta koja stalno postoje a samo se ulice mijenjaju ili dodaju a ovdje se moze desiti da dodje neka nova grupa koja do sada nije postojala.Jedina ideja mi je da to stavim po abedeceti pa da se slova abecede budu ponudjena a da se lijekovi i grupe onda upisuju.
[ VladaSu @ 21.01.2012. 11:11 ] @
Dodje nova grupa lekova i ti dodas novu grupu u tabelu grupe_lekova koja ce imati id npr 150. Tj sledeci slobodan id.
Ako neki lek pripada toj grupi onda ces staviti da ima id_grupe 150. To uopste nije problem. Nemoj da razmisljas o tome.
Prednost je sto recimo ako se promeni naziv ulica ti sada neces ici kod svakog u imeniku i menjati naziv ulice, pa se opet desi mogucnost da pogresis ako rucno radis ili da preskocis
ako prvi put nisi uneo naziv dobro.
Zamisli da se se sada Karadjordjeva ulica zove Petroviceva. Ti odes na ulicu koja ima id=6 i promenis naziv.
Sada svaki put kada nekoga gledas iz imenika koji ima ulicu id = 6 ti ces otici i pogledati da se sada ta ulica zove Petroviceva bez i da znas da se ikada zvala Karadjordjeva.
Ne menjas program, nista. I poenta je da ne moras menjati kod svakog korisnika.
Svedok si da se i nazivi gradova menjaju, Titograd, Titovo Uzice itd.... Nastaju novi gradovi i naselja.

Radio sam i ja sa lekovima pa drzava promeni marze za odredjenu grupu lekova ili promeni poresku stopu i bukvalno za deset sekundi bez greske
promenis max marzu ili poresku stopu.
A ako se budes drzao tvog nacina rada to nema sanse da ti ne prodje bez greske jer rucnim kucanjem grupe za 5-10.000 lekova mora da se desi greska.
Bice svakako greske jer ces neko pogresno uneti grupu ali to su minimalne greske.

Nemoj sumnjati razmisljati niti traziti rupe u ovome o cemu ja pricam jer ovo je tipican skoliski primer postavke baze koja ce ti smanjiti mogucnost greske prilikom unosa a ubrzace ti
bazu i pojednostaviti programiranje i prosiruje opcije za programiranje dok tvoj nacin postavke baze radi bas suprotno.
Recimo ako hoces da ogranicis marzu za odredjenu grupu lekova.
Ti vec imas tabelu grupa_lekova i samo dodas kolona max_marza. A kako ces to odraditi ako direktno kucas grupu? Nikako.
[ Miro Spiro @ 21.01.2012. 18:33 ] @
Pozdrav. Malo sam radio pa sad evo sto sam napravio.Ne znam je li dobro ali se ja bar nadam da sam isao po onom uputstvu.

tabela slovoabecede (abecedni red lijekova)


Code (sql):


CREATE TABLE slovoabecede
( slovoabecede_id INT(11)  NOT NULL AUTO_INCREMENT,
      a   CHAR(50),
      b   CHAR(50),
      c  CHAR(50),
      d  CHAR(50),
     PRIMARY KEY (slovoabecede_id));


 


tabela grupa lijekova


Code (sql):


CREATE TABLE grupalijekova
(  grupalijekova_id INT(11)  NOT NULL AUTO_INCREMENT,
   slovoabecede_id INT(11),
   alimentarnitraktimetabolizam CHAR(50),
   krvikrvotvorniorgani CHAR(50),
   kardiovaskularnisistem CHAR(50),
     PRIMARY KEY (grupalijekova_id));

 



tabela lijekovi

Code (sql):


CREATE TABLE lijekovi
(  id INT(11)  NOT NULL AUTO_INCREMENT,
     slovoabecede_id INT(11),
     grupalijekova_id INT(11),
     glavnagrupalijekova CHAR(100),
     podgrupalijekova CHAR(100),
     vrstalijeka CHAR(150),
     imelijeka CHAR(100),
     djelovanje longtext,
     indikacije longtext,
     doziranjeinacinprimjene longtext,
     kontraindikacije longtext,
     nezeljeniefekti longtext,
     posebnaupozorenja longtext,
     registriranilijekovi longtext,
     PRIMARY KEY (id));


 



Htio sam jos da dodam tabelu glavna grupa lijekova ali za nju stvarno vecina nije ista za sve lijekove ima ponavljanja ali dosta se stvari mijenja od lijeka do lijeka.

hvala na pomoci i savjetima
[ VladaSu @ 22.01.2012. 15:58 ] @
Sta ti je slovo abecede?

Idi ovom logikom za grupe.
1. Jedan tabela
2. Jos jedna kolona parent_id (id roditelja)

I u toj tabeli su ti i grupe i podgurpe.
Glaven grupe su ti one grupe ciji je parent_id=0
Podgrupa ti je ako ima parent_id = X
Sto znaci:
id = 1, naziv = glavna grupa, parent_id = 0
id = 2, naziv = podgrupa u glavnoj grupi, parent_id = 1

Da li si ovo shvatio?

To znaci da ce ti reci u lekovima kojoj grupi lekova pipada lek a u tabeli grupe lekova pronacices taj id i videti da li je to glavna grupa ili podgrupa i ako je podgrupa naci ces preko
parent_id koja mu je glavna grupa.

Trece dolazi ti do malog preklapanja u tvom trenutnom modelu baze.
Imas i u tabeli grupe i u tabeli lekovi slovoabecede_id.
Da li mozes da dodjes do koja je slovoabecede_id tako sto pogledas koja je grupa pa onda kada odes u grupu vidis koji je id slova?
Mozes, nema potrebe da na 2 mesta imas jedna te isti podatak jer ce taj id slova se zeznati preko grupe.
Direktno kada se stavlja je izuzetno kada se radi u velikim kolicinama podatak pa bi taj dodatan korak za traznje id-a slova usporio sistem.





[ Miro Spiro @ 22.01.2012. 16:40 ] @
Dok sam radio prosle tabele mogu reci da sam razumio sve do ovoga trenutka. Znaci imam tabelu u bazi u kojoj se nalaze grupe lijekova +dodatna kolona parent_id x podgrupe lijekova .Sad koliko sam shvatio cilj mi je da u bazi imam vec unesene grupe lijekova kao i podgrupe lijekova koje mogu da znam po id-u odredjene grupe a onda unosim samo lijekove i id ove grupa i podgrupa lijekova. Znaci to bi trebalo da bude da ima vise tabelu u kojima se nalaze podatci a onda se pri pretrazi koristi vise tabela umjesto jedne te se smanjuje opterecenje.Sto se tice ponavljanja slova abecede to je tako jer ne razumijem kako da povezem sve tabele u jednu cjelinu:

Nisam razumio kako preko id-a.

Sadasnji Php unosi sve u tabelu lijekovi a sad bi trebalo da se pise novi php kod pored vec ovoga kojeg ima.

Da li bi to znacilo da se lijekovi unose direktno u mysql ili bi opet bio neki insert_php za unos.Posto sad imam jedan mali CMS u kojem mogu da unesem lijek,editujem ga ,brisem i pregledam a on se sav temelji na jednoj tabeli a sad to promijeniti ne razumijem kako.

U ovom trenutku smatram da znam kako napraviti pod 1 i 2 ali kako povezati to sa tabelom lijekovi ne razumijem kako preko id-a . Malo me u prijasnjem postu zbunilo to za cene.Njih nema naglasak je na indikacijama, kontraindikacijama,djelovanju ,tipu i imenu lijeka. Glavne grupe i podgrupe ja ne unosim njih jednostavno uradim copy-paste iz pdf-a. Tako da za sada gledao sam gresaka nema.

Znaci najvise me sada brine kako da povezem bazu sa PHP-om jer ovo sto sam sad uradio i zbog kojeg sam i poceo topic radi (ne znam ni ja kako ali radi).

Jos jednom hvala na pomoci.
[ VladaSu @ 22.01.2012. 19:05 ] @
Pitanja (posle i odgovor):
1. Tvoj slucaj: Sta znaci da lek ima grupu 1 i podgrupu 2?
2. Isti kao tvoj slucaj samo drugacije nazvan: Sta znaci da lek ima grupu 1 i grupu 2?
3. Moj slucaj: Sta znaci da lek pripada grupi 2 koja je podgrupa grupi 1?

Odgovori:
1. To prakticno znaci da ima dve grupe. Kako da znas sta je glavna grupa a sta podgrupa?
U tvom slucaju kada dodalis leku grupu i podgrupu onda kada nekim slucajem u buducnosti neka podgrupa promeni glavnu grupu ti ces morati svaki lek da proveris i promenis.
2. Ovo je tvoj slucaj samo promenjen naziv iz podgrupe i grupu i nista vise. Isti problemi.
3. Moj slucaj ako podgrupi promenis parent_id to znaci da ces automatski svim lekovima biti promenjena glavna grupa. Menjas na jednom mestu i siguran si da nece biti gresaka.


Sada ti pricam onako kako se u skoli uci modelovanje baze i kako bi trebalo.
U praksi zbog brzine cesto se menja to skolosko ucenje i takodje nekada je lakse i programirati.

Recimo, u ovom primeru lakse ti je da imas glavnu grupu id u podgrupa id odmah kod leka jer lakse dolazis do id-a i lakse filtriras i tako to ....
Ali dolazi problem tako sto rizikujes da se podaci poremete kada dodje do menjanje podgrupa i podgrupa.

Znaci ako nekada bezis od skolskog ucenja onda mozes da olaksas sebi programiranje i da ubrzas bazu podataka ali onda komplikujes odrzavanje i povecavas mogucnost gresaka.
Treba naci balans izmedju toga sto zavisi od toga sta ti zahteva aplikacija, klijent, kolicina podataka itd....


Kako povezati 2 tabele (ovo je primer kada nema podgrupe)

SELECT l.ime_leka, l.cena, gl.naziv_grupe
FROM lekovi l
LEFT JOIN grupa_lekova gl ON l.grupa_id=gl.id


LEFT JOIN je kljucan


A kako povezati ovu izmenjenu bazu....
CMS kao Joomla i slicne stvari ne sluze za ozbiljne sajtove koji imaju ovako specificne zahtebe.
Moze se i u Joomli praviti sve ali to je kao da od traktora pravis avion.

Dugorocno mnogo ti je bolje da ucis PHP i MySQL jer ce da ti se isplati a gotovi CMS-ovi ce ti doneti samo probleme od kojih ces bezati.
[ Miro Spiro @ 22.01.2012. 19:40 ] @
Cu da probam pa javim a sto se tice CMS-a nije gotovo rjesenje ja sam nesto copy-paste coda a nesto sam ja pisao tako da je bas prilagodjen( ne ulazim u sigurnost koda) ovoj bazi tj. programu.

Jos jednom hvala na pomoci i objasnjenju a ovo cu sutra probati pa stavim ovdje.
[ Miro Spiro @ 23.01.2012. 16:31 ] @
Evo sto sam sada napravio

grupalijekovi


Code (sql):


CREATE TABLE grupalijekova
(  grupa_id INT(11)  NOT NULL AUTO_INCREMENT,
    grupalijekova  CHAR(50),
    glavnagrupalijekova CHAR(50),
    parent_id INT(11) NOT NULL,
PRIMARY KEY (grupa_id));



 



lijekovi

Code (sql):


CREATE TABLE lijekovi
(  id INT(11)  NOT NULL AUTO_INCREMENT,
     podgrupalijekova CHAR(100),
     vrstalijeka CHAR(150),
     imelijeka CHAR(100),
     djelovanje longtext,
     indikacije longtext,
     doziranjeinacinprimjene longtext,
     kontraindikacije longtext,
     nezeljeniefekti longtext,
     posebnaupozorenja longtext,
     registriranilijekovi longtext,
     PRIMARY KEY (id));


 
[ VladaSu @ 23.01.2012. 21:09 ] @
Ne treba ti zajedno u tabeli grupe
grupalijekova char(50),
i
glavnagrupalijekova char(50),

jer ces do glavne grupe lekova doci preko parent id i znaces naziv.

U tabeli lekovi
podgrupalijekova char(100),
po ovom ti cela tabela grupa lekova ne treba jer tu unosis naziv a to ne zelis. Tu hoces da onosi id od grupe.
Nazvao si podgrupa ali tebe bas i ne zanim ovde da li je grupa ili podgrupa vec samo id i kada odes u tabelu grupe onda ces tamo vec skontati da li
je to grupa ili podgrupa i koji je naziv.


E sada.
Isto kao sto si odvojio grupe lekova tako mozes i vrste.
Ali to prvo kada sredis grupe.
[ Miro Spiro @ 23.01.2012. 21:50 ] @
Ovo u tabeli lijekova cu da odvojim ali sto se tice vrste tu je vec problem njih ima mnogo i obicno je jedna za nekoliko lijekova sad to unositi ne vidim korist od toga jer opet cu to vecinom morati da unosim rucno dok za grupe jedan unos je za nekih 50-100 lijekova. Gledao sam malo po webu kako su drugi napravili .

http://www.ivz.si/register/ Slovenci ne mogu tacno da odgonetnem ali koliko vidim ovo je html sa stranica sa podatcima i linkovi. Ne mogu da vidim nigdje neki konektor za bazu.


http://farmaco.agenziafarmaco.it/index_en.php e ovo je avion od aplikacije.Ovde se vidi sve sto si mi ti govorio da uradim u ovome primjeru. Razlika izmedju ove aplikacije jeste ta sto se ova sedmicno apdejtuje nalaze se cijene, pdv itd dok se moja sad kad se unese nece updateovati jedan veci period zbog toga smatram da me ova moja baza postojeca sada zadovoljava. Inace koliko vidim ovo je pravo odrađen program.Naravno ne znam sto se nalazi pod haubom.

grupelijekova

Code (sql):


CREATE TABLE grupalijekova
(  grupa_id INT(11)  NOT NULL AUTO_INCREMENT,
    grupalijekova  CHAR(50),
    parent_id INT(11) NOT NULL,
PRIMARY KEY (grupa_id));

 


lijekovi

Code (sql):


CREATE TABLE proba.lekovi
(  id INT(11)  NOT NULL AUTO_INCREMENT,
     podgrupalijekova_id INT(11),
     vrstalijeka CHAR(150),
     imelijeka CHAR(100),
     djelovanje longtext,
     indikacije longtext,
     doziranjeinacinprimjene longtext,
     kontraindikacije longtext,
     nezeljeniefekti longtext,
     posebnaupozorenja longtext,
     registriranilijekovi longtext,
     PRIMARY KEY (id));



 



Pozz

[Ovu poruku je menjao Miro Spiro dana 23.01.2012. u 23:09 GMT+1]
[ VladaSu @ 25.01.2012. 09:23 ] @
Evo ti koristan link sa istim problemom kao sto ti imas samo tamo su drzave a kod tebe grupe.

http://www.elitesecurity.org/t444600-Baze-za-turisticku-agenciju
[ Miro Spiro @ 25.01.2012. 18:33 ] @
Evo sada sam uradio po textu sad da li je uredu ili ne nisam siguran.

tabela grupe lijekova

Code (sql):


CREATE TABLE grupelijekova
(  grupalijekova_id INT(11)  NOT NULL AUTO_INCREMENT,
   grupalijekova  CHAR(250),
   glavnagrupalijekova_id CHAR(250),
   podgrupalijekova_id CHAR(250),
   PRIMARY KEY (grupalijekova_id));

 




tabela glavnagrupalijekova

Code (sql):


CREATE TABLE glavnagrupalijekova
(  glavnagrupalijekova_id INT(11)  NOT NULL AUTO_INCREMENT,
   glavnagrupalijekova CHAR(250),
   PRIMARY KEY (glavnagrupalijekova_id));

 


tabela podgrupelijekova

Code (sql):

CREATE TABLE podgrupelijekova
(  podgrupelijekova_id INT(11)  NOT NULL AUTO_INCREMENT,
    podgrupalijekova CHAR(250),
    PRIMARY KEY (podgrupelijekova_id));

 


tabela vrstelijekova

Code (sql):

CREATE TABLE podgrupelijekova
(  podgrupelijekova_id INT(11)  NOT NULL AUTO_INCREMENT,
    podgrupalijekova CHAR(250),
    PRIMARY KEY (podgrupelijekova_id));

 


tabela lijekovi
Code (sql):


CREATE TABLE lijekovi
( lijekovi_id INT(11)  NOT NULL AUTO_INCREMENT,
     grupelijekova_id CHAR(250),
     vrstelijekova_id CHAR(250),
     imelijeka CHAR(100),
     djelovanje longtext,
     indikacije longtext,
     doziranjeinacinprimjene longtext,
     kontraindikacije longtext,
     nezeljeniefekti longtext,
     posebnaupozorenja longtext,
     registriranilijekovi longtext,
     PRIMARY KEY (lijekovi_id));



 
[ VladaSu @ 26.01.2012. 11:24 ] @
Za vrstu lekova su progresno copy paste.

Drugo.
Pitanje je da li jedan lek moze da ima vise grupa. Ako je odgovor da onda si krenuo pogresnim putem.
Ne valja ti bas. Vidi se da si citao i pokusao da shvatis.

Sa grupama i podgrupama je dodatna komlikacija jer je to jedna te ista tabela.


Ali recimo da odvojimo u 2 tabele. Grupe i podgrupe. I kada to shvatis onda cemo to prevesti u jednu tabelu jer su to dve totalno identicen tabele pa tom logikom moze da bude jedna tabela.


Code (sql):

CREATE TABLE  `grupa` (
  `grupa_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `naziv` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`grupa_id`)
) ENGINE=InnoDB;

CREATE TABLE  `pogrupa` (
  `pogrupa_id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `grupa_id` INT(10) UNSIGNED NOT NULL,
  `naziv` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`pogrupa_id`)
) ENGINE=InnoDB
 


A ovako ces dobiti grupe sa podgrupama:

Code (sql):

SELECT *
FROM grupa AS g
LEFT JOIN pogrupa AS p ON g.grupa_id = p.grupa_id
 


neke varijacija ovog sql-a:

Code (sql):

SELECT g.*, p.*
FROM grupa AS g
LEFT JOIN pogrupa AS p ON g.grupa_id = p.grupa_id;

SELECT *
FROM grupa g
LEFT JOIN pogrupa p ON g.grupa_id = p.grupa_id;

SELECT g.grupa_id, g.naziv AS naziv_glavne_grupe, p.podgrupa_id, p.naziv AS naziv_pogrupe
FROM grupa AS g
LEFT JOIN pogrupa AS p ON g.grupa_id = p.grupa_id;

 



Ovo je slucaj kada jedna podgrupa moze da pripada SAMO jednog grupi.

Pitanja:

1. Da li si shvatio ovo?
2. Po cemu se razlikuje tabela podgrupa i grupa?
3. Ako si shvatio po cemu se razlikuju da li bi mogao to spojiti u jednu tabelu i kako ako moze?
4. Da li imas ideju kako napraviti da podgrupa moze da pripada jednoj ili vise grupa?

Ovo prelazi vise u neki mali tutorijal SQL-a. Otisli smo od teme i vise ne pripada PHP forumu.
Pomazem ti ovako detaljno jer vidim da zelis da naucis a ne da dobijes gotovo resenje sto je retko ovde videti :)
[ Miro Spiro @ 26.01.2012. 11:54 ] @
Hm vidim da sam zeznuo vrstelekova


Code (sql):


CREATE TABLE vrstelijekova
(  vrstelijekova_id INT(11)  NOT NULL AUTO_INCREMENT,
    vrstalijeka longtext,
     PRIMARY KEY (vrstelijekova_id));


 



Jedan lijek ima samo jednu grupu,glavnu grupu podgrupu i vrstu . Znaci jedan lijek od ovoga svega trebao bi da ima samo jedan ID.Sam lijek iz baze moze jedino da bude izbrisan ne moze nikako da predje u drugu grupu itd. Cena nema u bazi te se ni to ne moze da mijenja. Naglasak je na fajlu results.php koji vrsi sada pretragu baze. Sama baza ima nekih 2 MB a a njenog update-a nema. Jednostavno prilikom ponovne registracije lijekova cijela baza mora ici drop i onda ponovno unositi posto se indikacije ,kontraindikacije pa cak i imena nekada mijenjaju.


Problem je sljedeci



Uploaded with ImageShack.us


tu je sve nacrtano kako sam ja zamislio. Problem je taj da jednostavno neke vrste lijekova se ne ponavljaju cesto tj mozda za 2-3 lijeka i onda me buni ta li da to stavljam posebno ili da ostavim u tabeli lijekovi kao i neke podgrupe lijekova koje se ponavljaju ali jednostavno ne toliko ceste, a grupe i glavna grupa definitivno hocu da stavim u posebnu tabelu.Naravno sad ces reci da sve sto se ponavlja treba posebno ali to je onda veci problem za onoga ko unosi. Jeste da se ovdje ponavlja 2 puta stomatoloski lijekovi ali to je iznimka i vrlo se rijetko to desava. Nadam se da sam napisao razumljivo moje objasnjenje.

[Ovu poruku je menjao Miro Spiro dana 26.01.2012. u 13:04 GMT+1]
[ VladaSu @ 26.01.2012. 13:18 ] @
Prosto ne mogu da verujem da ako se jedan lek menja ili ponovo registruje da cela baza ide u drop.
Mozda taj lek ali baza ne verujem.
Za lek ima logike jer to vise nije onaj lek.
Za vrstu si lepo odradio, jos samo da za grupe da shvatis...
Koliko ima vrsta lekova a koliko lekova?
Ako imas 100 vrsta a 5000 lekova onda vredi stvaljati.
Mozda vredi i da imas i 1000 vrsta a 5000, odnos 1:5.
A vec da imas 4000 vrsta a 5000 lekova onda mozda i ne vredi a mozda i vredi. Sve zavisi od pretrage itd...
[ Miro Spiro @ 26.01.2012. 18:37 ] @
Podgrupa pripada samo jednoj grupi ne moze da pripada vise grupa.Evo sto sam sada napravio.

tabela grupe lijekova

Code (sql):

CREATE TABLE grupelijekova
(  grupalijekova_id INT(11)  NOT NULL AUTO_INCREMENT,
   grupalijekova  CHAR(250),
   PRIMARY KEY (grupalijekova_id));
 




tabela glavne grupe lijekova

Code (sql):

CREATE TABLE glavnagrupalijekova
(   glavnagrupalijekova_id INT(11) NOT NULL AUTO_INCREMENT,
    glavnagrupalijekova  CHAR(250) NOT NULL,
    PRIMARY KEY (glavnagrupalijekova_id));
 



tabela podgrupe lijekova

Code (sql):

CREATE TABLE podgrupelijekova
(  podgrupelijekova_id INT(11)  NOT NULL AUTO_INCREMENT,
   glavnagrupalijekova_id INT(11)UNSIGNED NOT NULL,
   grupalijekova_id INT(11)UNSIGNED NOT NULL,
   podgrupalijekova CHAR(250),
   PRIMARY KEY (podgrupelijekova_id));
 



Lijekova nema toliko ima ih po mojoj procjeni nekih 1000 ( sam registar je sada samo u stampanoj verziji te moram rucno sve izbrojati staru bazu sam ispustio).

Ovo je bio kod za pretragu stare baze

Code (php):

<link href="favicon.ico" rel="SHORTCUT ICON">
<html>
<head>
  <title>Registar lijekova 1.0.0</title>
</head>
<body>
<h1 align="center">Registar lijekova-rezultati pretrage</h1>
<?php
  // create short variable names
  $searchtype=$_POST['searchtype'];
  $searchterm=trim($_POST['searchterm']);

  if (!$searchtype || !$searchterm) {
     echo 'Niste unijeli sve potrebne detalje.  Vratite se i pokusajte ponovo.';
     exit;
  }

  if (!get_magic_quotes_gpc()){
    $searchtype = addslashes($searchtype);
    $searchterm = addslashes($searchterm);
  }

  @ $db = new mysqli('localhost', 'root', '', 'registar lijekova');

  if (mysqli_connect_errno()) {
     echo 'Error: Could not connect to database.  Please try again later.';
     exit;
  }

  $query = "select * from lijekovi where ".$searchtype." like '%".$searchterm."%'";
  $result = $db->query($query);

  $num_results = $result->num_rows;

  echo "<p>Broj nadjenih lijekova: ".$num_results."</p>";

  for ($i=0; $i <$num_results; $i++) {
     $row = $result->fetch_assoc();
     echo "<p><strong>".($i+1).". Grupa lijekova: ";
     echo htmlspecialchars(stripslashes($row['grupalijekova']));
     echo "</strong>Glavna grupa lijekova: ";
     echo stripslashes($row['glavnagrupalijekova']);
      echo "</br />Podgrupa lijekova: ";
     echo stripslashes($row['podgrupalijekova']);
      echo "</br />Vrsta lijeka: ";
     echo stripslashes($row['vrstalijeka']);
      echo "</br />Ime lijeka: ";
     echo stripslashes($row['imelijeka']);
      echo "</br />Djelovanje: ";
     echo stripslashes($row['djelovanje']);
      echo "</br />Indikacije: ";
     echo stripslashes($row['indikacije']);
      echo "</br />Doziranje i nacin primjene: ";
     echo stripslashes($row['doziranjeinacinprimjene']);
      echo "</br />Kontraindikacije: ";
     echo stripslashes($row['kontraindikacije']);
      echo "</br />Nezeljeni efekti: ";
     echo stripslashes($row['nezeljeniefekti']);
      echo "</br />Posebna upozorenja: ";
     echo stripslashes($row['posebnaupozorenja']);
     echo "Registrirani lijekovi: ";
     echo stripslashes($row['registriranilijekovi']);
     echo "</p>";
  }

  $result->free();
  $db->close();

?>
</body>
</html>