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 1338 korisnika na forumu :: 25 registrovanih, 8 sakrivenih i 1305 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: amaterSRB, babaroga, Cobi026, GandorCC, Georgius, Ivan001, JOntra, Litostroton, mile23, milutin134, MiroslavD, mrav pesadinac, nesa1962, ostoja, Posmatrac77OKB, ruma, S2M, sevenino, skvara, stegonosa, vandrej, vasa.93, vathra, Vlada1389, vladulns