Problem oko uslova u PHP/MySQL

Problem oko uslova u PHP/MySQL

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.
offline
  • 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.



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);

offline
  • 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.

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

offline
  • 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 Confused

Zaboravih...

Onda INSERT

$result = mysql_query("INSERT INTO ocene (brindeks, predid, naziv_predmeta, ocena) VALUES ('$T1', '$predid', '$naziv_predmeta', '$D2')", $connection);

offline
  • grozda 
  • Novi MyCity građanin
  • Pridružio: 23 Avg 2003
  • Poruke: 8

Napisano: 23 Dec 2009 21:54

uh ... Smile





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




Da li ovaj izraz $query = mysql_fetch_assoc($query); ne odradi nesto dobro ili sintaksa u upitu nize nije u redu ???

offline
  • 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?

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

Ko je trenutno na forumu
 

Ukupno su 739 korisnika na forumu :: 42 registrovanih, 7 sakrivenih i 690 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3028 - dana 22 Nov 2019 07:47

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: Aleksa-, aleksmajstor, aljosa7, alkatraz080, Apok, ArmyBoss, beowl, CrazyDiablo, d bos, darkojbn, Drug pukovnik, goxin, HDMI, hyla, ivan979, Jezekijel, ladro, lord sir giga, mercedesamg, milekNS, milos.cbr, MiroslavD, Miskohd, Mitraljeta, mnn2, MrNo, pirke2, renoje2, robertino2, sevenino, Sicario, Skywhaler, stalker, stegonosa, TegljacMete, theNedjeljko, vasa.93, vathra, Vlada1389, Vzor50, zastavnik, zlaya011