Poslao: 23 Dec 2009 17:09
|
offline
- grozda
- Novi MyCity građanin
- Pridružio: 23 Avg 2003
- Poruke: 8
|
Imam bazu koja se sastoji od 4 tabele:
studenti (ime, prezime, brindeks, email, telefon, godinarodjenja, mesto)
profesori (profid, ime, prezime, email)
ocene (brindeks, predid, naziv_predmeta, ocena)
predmeti (predid, profid, naziv)
Napravio sam formu za unos ocene koja se sastoji od 4 polja za unos:
broj indeksa
sifra predmeta
naziv predmeta
ocena
Kompletan kod izgleda ovako za PHP:
<?php
// Ovde su promenjljive koje se nalaze u HTM formi koje unosim rucno
$T1 = $_POST['T1']; //br indeksa (brindeks)
$T2 = $_POST['T2']; //predmet id (predid) (ovo bih mozda moglo i da se izbegne)
$D1 = $_POST['D1']; //predmet (naziv_predmeta ili naziv)
$D2 = $_POST['D2']; //ocena
//1. Kreiranje konekcije
$connection = mysql_connect("localhost","root","");
if (!$connection) {
die("Database connection failed: ".mysql_error());
}
// 2. Selektovanje baze podataka
$db_select = mysql_select_db("moja_baza",$connection);
if (!$db_select) {
die("Database selection failed: ".mysql_error());
}
?>
<html>
<head><title>MOJA BAZA PODATAKA</title></head>
<body>
<?php
// 3. Postavljanje upita za PROVERU OCENE
// pitam da li postoji ocena za studenta sa indeksom T1 za predmet D1
SELECT COUNT(*) FROM ocene WHERE brindeks = '$T1' AND naziv_predmeta= '$D1';
//ako nema podataka tj. taj COUNT izbaci 0 onda uradi pod ***
if($row['COUNT(*)'] == 0)
// *** onda unesi te podatke u bazu - tabelu ocene koja ima sledeca polja navedena ispod
query = INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena )
VALUES ('$T1', '$T2', '$D1', '$D2')";
// ako COUNT (*) izbaci 1 tj. da je student vec ocenjen iz tog predmeta onda...
else
// ako ima ocene iz tog predmeta za tog studenta, onda uradi update za taj predmet i ocenu za studenta
query = UPDATE ocene SET ocena= '$D2' WHERE brindeks='$T1' and naziv_predmeta= '$D1';
// 4. Postavljanje upita za stampanje rezultata
$result = mysql_query("SELECT
studenti.brindeks,
studenti.prezime as PrezimeStudenta,
studenti.ime as ImeStudenta,
predmeti.naziv,
ocene.ocena,
profesori.prezime,
profesori.ime
FROM
studenti
Inner Join ocene ON studenti.brindeks = ocene.brindeks
Inner Join predmeti ON predmeti.predid = ocene.predid
Inner Join profesori ON profesori.profid = predmeti.profid
WHERE studenti.brindeks = '$T1' AND
predmeti.naziv = '$D1'", $connection);
echo "<table border='1'>
<tr>
<th>Broj indeksa</th>
<th>Ime</th>
<th>Prezime</th>
<th>Predmet</th>
<th>Ocena</th>
</tr>";
echo "<br />";
echo " ";
echo "<br />";
// 5. Koriscenje povratnih informacija - na izlazu se dobijaju sledeci podaci u tabeli
while ($row = mysql_fetch_array($result)) {
echo "<td>" . $row['brindeks'] . "</td>";
echo "<td>" . $row['ImeStudenta'] . "</td>";
echo "<td>" . $row['PrezimeStudenta'] . "</td>";
echo "<td>" . $row['naziv'] . "</td>";
echo "<td>" . $row['ocena'] . "</td>";
echo "</tr>";
}
?>
</body>
</html>
<?php
// 6. Raskidanje konekcije
mysql_close($connection);
?>
1. PITANJE
Konkretno, u HTML formi za ocenjivanje studenta hocu da unesem:
1. Broj indeksa studenta = $T1
2. Predmet koji hocu da ocenim = $D1
3. Ocenu studenta = $D2
4. Predmet ID = $T2 (ovo sam dodao jer mi u protivnom to polje predid ostene prazno u tebeli ocene )
u PHP kodu:
Pod // 1,2,4,5,6 mi radi u drugim slucajevima ali ovaj deo pod
//3. Postavljanje upita za PROVERU OCENE, gde treba postaviti queri sa uslovom ne umem da napisem?
Treba pitati :
- da li postoji ocena za studenta sa indeksom $T1 iz predmete $D1'
- ako postoji onda uradi samo update te ocene
- ako ne postoji onda unesi tu ocenu u bazu
2. DRUGO PITANJE
Da li mogu i kako da izbegnem da se unosi predid - ID predmeta jer bi on mogao da se cita iz tebele predmeti ali ne znam kako da ga stavim u query umesto $T2
taj query bi trebalo da izgleda nekako ovako ali mi nesto ne stima:
// UPIT ZA PREDMET ID
$query = "SELECT predid FROM predmeti WHERE naziv = '$D1';
$query = mysql_query($query) or die(mysql_error());
$query = mysql_fetch_assoc($query);
$predid = query['predid'];
//Ovo je umesto parametra $T2 koji je predid da se ne unosi nego da iscita iz tabele predmeti - svaki naziv predmeta vezuje se za predid
// OCENJIVANJE
$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena)
VALUES ('$T1', '$predid', '$D1', '$D2')", $connection);
if (!$result) {
die("Database selection failed2: ".mysql_error());
}
Ako neko moze da pomogne, molim za pomoc.
|
|
|
Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
|
|
Poslao: 23 Dec 2009 20:17
|
offline
- MSMarkoN
- Ugledni građanin
- Pridružio: 15 Maj 2006
- Poruke: 333
- Gde živiš: Babušnica
|
// UPIT ZA PREDMET ID
$query = "SELECT naziv FROM predmeti WHERE predid = '$D1';
Mozes to u <select> tag da uradis. Ispises nazive predmeta a value das na osnovu ID iz tabele i tako ces poslati pravu vrednost php-u pa ce biti lakse za izvrsavanje upita. Time ces izbaciti onaj deo gde unosis predmet id sto si i napomenuo.
|
|
|
|
Poslao: 23 Dec 2009 20:45
|
offline
- grozda
- Novi MyCity građanin
- Pridružio: 23 Avg 2003
- Poruke: 8
|
MSMarkoN ::// UPIT ZA PREDMET ID
$query = "SELECT naziv FROM predmeti WHERE predid = '$D1';
Mozes to u <select> tag da uradis. Ispises nazive predmeta a value das na osnovu ID iz tabele i tako ces poslati pravu vrednost php-u pa ce biti lakse za izvrsavanje upita. Time ces izbaciti onaj deo gde unosis predmet id sto si i napomenuo.
Ja naziv predmeta vec imam, meni treba da izvucem predid iz tog naziva i znam da postavim upit ali pogledaj pitanje pod broj 2. kako to sto izvucem da povezem i da mi bude promenljiva za dalje? To mu dodje kao kako da postavim query u queriju.
imam naziv, izvucem na osnovu njega predid i ubacim ga u sledeci query na mestu predid odnosno, da u ovom delu :
// OCENJIVANJE
$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena)
VALUES ('$T1', 'predid', '$D1', '$D2')", $connection);
umesto ovog predid sto je boldirano napisem $query = "SELECT predid FROM predmeti WHERE naziv = '$D1' i on mi daje da je za taj naziv predmeta id = 001 na primer i baci ga u gornji upit.
pokusao sam sa gornjim ali nesto u sintaksi nije u redu.
Ovo sto si mi ti napisao je da selektujem naziv (koji vec imam) iz predmeta gde je predid (koji nemam) = nazivu tog predmeta, taj upit mi daje nista ??? $D1 je naziv predmeta.
Ovaj queri mi daje dobar rezultat, to je ono sto izvucem:
SELECT predid FROM predmeti WHERE naziv = '$D1', sa njim ja dobijem ID tog predmeta ali kako da ga sada rezultat tog izraza ubacim u sledeci queri? Mislio sam ako ga stavim kao novu promenjljivu da ce uspeti ali nesto u sintaksi ne valja predpostavljam ???
// OCENJIVANJE
$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena)
VALUES ('$T1', '$predid', '$D1', '$D2')", $connection);
|
|
|
|
Poslao: 23 Dec 2009 20:54
|
offline
- MSMarkoN
- Ugledni građanin
- Pridružio: 15 Maj 2006
- Poruke: 333
- Gde živiš: Babušnica
|
// UPIT ZA PREDMET ID
$query = "SELECT naziv FROM predmeti WHERE predid = '$D1';
naziv_predmeta umesto naziv
Ovaj upit izvlaci NAZIV predmeta na osnovu ID tako da ovde
$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena)
VALUES ('$T1', 'predid', '$D1', '$D2')", $connection);
umesto 'predid' upises '$D1' jer ti je $D1 ID.
|
|
|
|
Poslao: 23 Dec 2009 20:57
|
offline
- grozda
- Novi MyCity građanin
- Pridružio: 23 Avg 2003
- Poruke: 8
|
$D1 = naziv predmeta = naziv, to je isto ja to imam !!! meni treba obrnuto, da iz tog izvucem koji je predid, ili polje $T2 koje hocu da izbacim. Hocu da ne unosim predid rucno jer naziv predmeta izvucem iz padajuce liste = $D1
Ja postavim upit i izvucem ga ali kako da povezem sa sledecim querijem ili kako da ga ubacim umesto predid ??? pogledaj pod 2 pazljivije
|
|
|
|
Poslao: 23 Dec 2009 21:03
|
offline
- MSMarkoN
- Ugledni građanin
- Pridružio: 15 Maj 2006
- Poruke: 333
- Gde živiš: Babušnica
|
// UPIT ZA PREDMET ID
$query = "SELECT predid, naziv_predmeta FROM predmeti WHERE predid= '$D1';
$query = mysql_query($query) or die(mysql_error());
$query = mysql_fetch_assoc($query);
$predid = query['predid'];
$naziv_predmeta = query['naziv_predmeta'];
ili
// UPIT ZA PREDMET ID
$query = "SELECT predid, naziv_predmeta FROM predmeti WHERE naziv_predmeta= '$D1';
$query = mysql_query($query) or die(mysql_error());
$query = mysql_fetch_assoc($query);
$predid = query['predid'];
$naziv_predmeta = query['naziv_predmeta'];
zavisi kako zelis da postavis uslov. Nadam se da je to to sto ti treba
Zaboravih...
Onda INSERT
$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena)
VALUES ('$T1', '$predid', '$naziv_predmeta', '$D2')", $connection);
|
|
|
|
Poslao: 23 Dec 2009 22:10
|
offline
- grozda
- Novi MyCity građanin
- Pridružio: 23 Avg 2003
- Poruke: 8
|
Napisano: 23 Dec 2009 21:54
uh ...
Query koji si mi napisao nijedobar jer u tabeli predmeti postoji naziv a ne nazaiv_predmeta, kada zamenim i upisem:
$query = "SELECT predid, naziv FROM predmeti WHERE naziv = '$D1'; dobijam:
+--------+---------------------------+
| predid | naziv |
+--------+---------------------------+
| 1 | Mrezni operativni sistemi |
+--------+---------------------------+
Meni zapravo ne treba taj naziv jer njega vec unosim kao $D1
cini mi se da bi trebalo ovako, ali izbacuje gresku u redu INSERT INTO OCENE ...
// NOVI UPIT ZA PREDMET ID
$query = "SELECT predid FROM predmeti WHERE naziv = '$D1';
$query = mysql_query($query) or die(mysql_error());
$query = mysql_fetch_assoc($query);
$predid = query['predid'];
// $naziv_predmeta = query['naziv']; - ovo mi ne treba valjda jer je to #D1
// OCENJIVANJE
$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena)
VALUES ('$T1', '$predid', '$D1', '$D2')", $connection);
if (!$result) {
die("Database selection failed2: ".mysql_error());
}
Kako da samo rezultat ovog gornjeg querija ubacim i da mi ne izadje greska Ovo gore radi i dobijem:
+--------+
| predid |
+--------+
| 1 |
+--------+
Kako da kazem da je taj rezultat neka promenljiva $X1 i da onda samo ubacim ovako:
$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena)
VALUES ('$T1', '$X1', '$D1', '$D2')", $connection);
Dopuna: 23 Dec 2009 22:10
Ovo hocu ali nesto ne ide
Da li ovaj izraz $query = mysql_fetch_assoc($query); ne odradi nesto dobro ili sintaksa u upitu nize nije u redu ???
|
|
|
|
Poslao: 23 Dec 2009 22:27
|
offline
- MSMarkoN
- Ugledni građanin
- Pridružio: 15 Maj 2006
- Poruke: 333
- Gde živiš: Babušnica
|
Ja jesam napisao upit ali nije trebalo copy/paste da uradis. Promeni imena polja onako kako treba da budu. Koju tacno gresku izbaci?
|
|
|
|
Poslao: 23 Dec 2009 22:45
|
offline
- grozda
- Novi MyCity građanin
- Pridružio: 23 Avg 2003
- Poruke: 8
|
MSMarkoN ::Ja jesam napisao upit ali nije trebalo copy/paste da uradis. Promeni imena polja onako kako treba da budu. Koju tacno gresku izbaci?
Izbaci gresku:
"Parse error: parse error in C:\wamp\www\student3333.php" on line 47
a to je ova linija:
$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena) VALUES ('$T1', '$predid', '$naziv', '$D2')", $connection);
kao da je greska negde u sintaksi i ne ume lepo da ubaci ovo '$predid' ili ne odradi lepo pre toga
Uspelo je koriscenjem subquerija ...
$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena)
VALUES ('$T1', (SELECT predid FROM predmeti WHERE naziv = '$D1'), '$D1', '$D2')", $connection);
if (!$result) {
die("Database selection failed2: ".mysql_error());
}
Umesto promenjljive upisan je ceo queri ...
|
|
|
|