[ geenije @ 30.10.2013. 15:12 ] @
Zdravo,

početnik sam u PHP ali ne i u programiranju, pa se slobodno "izražavajte" :)

Jedan od razloga što se ne bavim programiranjem je i ovaj problem, ima da odustanem i od PHP...besane noći ni oko čega.

Elem, program je bazičan, samo da "osetim" sintaksu i rad sa bazom. Program u MySQL bazu u jednu tabelu upisuje podatke o korisniku koji se registruje na sajt.

U početku je sve radilo, onda sam krenuo da dodajem validaciju unosa podataka. Prvo nije hteo da prenese podatak "EMAIL", polje u bazi je prazno, sada kad se vratih još nazad, kod ne radi zbog validacije varijable email.

Evo koda, ono što je potrebno, znači zašto se ne prenosi podatak EMAIL:


function unos ($korisnickoIme, $lozinka, $ime, $prezime, $email, $smerID){
$con=mysqli_connect("","qplus_admin","password","qplus_Baza");
$sql = "INSERT INTO korisnici (korisnickoIme, lozinka, ime, prezime, email, smerID) VALUES ('$korisnickoIme', '$lozinka', '$ime', '$prezime', '$email', '$smerID')";
global $uneti;
if (mysqli_connect_errno())
{
echo "Failed to connect to MySQL: " . mysqli_connect_error();
}

if ($uneti) {
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
}
mysqli_close($con);

}//kraj unos
?>


<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<br>Korisnicko ime:<input type="text" name="korisnickoIme" value="<?php echo $korisnickoIme;?>"> <span class="error"><?php echo $korisnickoImeErr;?></span>
<br>Lozinka:<input type="password" name="lozinka" value="<?php echo $lozinka;?>"> <span class="error"><?php echo $lozinkaErr;?></span>
<br>Ime:<input type="text" name="ime" value="<?php echo $ime;?>"> <span class="error"><?php echo $imeErr;?></span>
<br>Prezime:<input type="text" name="prezime" value="<?php echo $prezime;?>"><span class="error"><?php echo $prezimeErr;?></span>
<br>E-mail:<input type="text" name="email" value="<?php echo $email;?>"><span class="error"><?php echo $emailErr;?></span>
<br>SmerID:<input type="text" name="smerID" value="<?php echo $smerID;?>"><span class="error"><?php echo $smerIDErr;?></span><br>
<input type="submit" value="Unos" action="<?php unos($korisnickoIme,$lozinka,$ime,$prezime,$email,$smerID) ?>">
</form>



Zatim, zašto kod puca na velikim slovima označenom redu, a pre nije pucao:

if (empty($_POST["prezime"])){
$prezimeErr = "Morate uneti vaše prezime";$uneti=false;
}

if (empty($_POST["email"])){
$emailErr = "Morate uneti e-mail";uneti=false; // OVDE PUCA, NAVEO SAM PROVERU VARIJABLE PREZIME KAO PRIMER, OSTALE RADE, A NA OVU PUCA PROGRAM, NA OVAJ RED KONKRETNO
}
[ Jbyn4e @ 30.10.2013. 15:51 ] @
uneti != $uneti
Možda zato puca?

[ geenije @ 30.10.2013. 15:57 ] @
Heh to si u pravu sasvim :D zahvaljujem... Nisam još navikao na te dolare uz varijable...

Nego zašto ne prenosi EMAIL a sve ostalo prenese u bazu? Naravno, bez ove linije koda gore gdee puca...
[ deZio @ 30.10.2013. 16:47 ] @
Zapetljan ti je dosta kod, ali pošto si početnik, to je u neku ruku i normalno. Probaj ovako, biće i tebi lakše onda da tražiš greške, pa nećeš odustajati od PHPa :)

Pre svega ovde na forumu svoj php kod stavljaj između [code:php] i [/code] kako bi nama bilo lakše da vidimo kod. Takođe primenjuj uvlačenje koda uz pomoć tab-a jer i to pomaže da kod bude čitljiviji.

Napravi samo jedan fajl, npr. korisnik.php i sadržaj piši ovako:


Code (php):

<?php
if( ! empty( $_POST ) ) {
     // OVDE IDE KOD UKOLIKO $_POST NIZ NIJE PRAZAN. A TO SE DEŠAVA KAD URADIŠ SUBMIT FORME
     // ONO ŠTO SI POSTAVIO UNUTAR name ATRIBUTA U FORMI, ĆE SE VIDETI UNUTAR $_POST NIZA.
     // DA BI TESTIRAO DA LI FORMA LEPO ŠALJE SVE PODATKE, MOŽEŠ URADITI print_r( $_POST ); die;
     //   NA TAJ NAČIN VIDIŠ SADRŽAJ NIZA KOJI SE ŠALJE IZ FORME. die SLUŽI DA PREKINE PHP, KAKO SE NE BI RADILO SAČUVAVANJE U BAZU.
     //   AKO JE $_POST NIZ OK, TJ. SVI PODACI IZ FORME SU TU, TAJ KOD ZA TESTIRANJE OBRIŠI, I RADI DALJE MYSQL KONEKCIJU I INSERT
}
else {
     // U SUPROTNOM, POŠTO JE $_POST PRAZAN, ZNAČI FORMA JOŠ NIJE SUBMITovana, PA JE ZATO GENERIŠI.
     // input submit NEMA ATRIBUT action, NE ZNAM ODAKLE TI TO. SAMO form TAG IMA ATR. action
     ?>
     <form method="post" action="korisnik.php">
          <br>Korisnicko ime:<input type="text" name="korisnickoIme" value="">
          <br>Lozinka:<input type="password" name="lozinka" value="">
          <br>Ime:<input type="text" name="ime" value="">
          <br>Prezime:<input type="text" name="prezime" value="">
          <br>E-mail:<input type="text" name="email" value="">
          <br>SmerID:<input type="text" name="smerID" value="">
          <br><input type="submit" name="unos" value="Unos">
     </form>
     <?php
}
?>
 


Pročitaj i ovaj tutorial:
http://webdevelopingcat.com/ph...nners-inserting-rows-with-pdo/
[ geenije @ 30.10.2013. 17:07 ] @
OK, hvala, koristim ja uvlačenje ali je ovde nestalo kad sam pasteovao...sad ću da ubacim u kod tag..

Ja i jesam bio krenuo od osnovnog, dva fajla, html i php, u html forma, u php upit i to je radilo, onda sam ubacio sve u jedan fajl da probam i radilo je, onda sam krenuo sa validacijom, tu su krenuli problemi...jedno po jedno komentarišem, vraćam film unazad ali džaba, podatak email se ne prenosi. Kad se pogleda kod, sve što važi za email, važi i za ime, prezime itd, znači input type text, upit i to je to...

Evo ceo kod koga ne mrzi da šacne, probaću i ovo što si mi rekao. Za email sam izbacio proveru stila unosa.

Još samo nešto, jel u praksi se rade više dva fajla ili jedan (html sa formom i php sa akcijom) i da li se validacija radi phpom ili javascriptom?

Code (php):

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>Ucenje na daljinu</title>
</head>
<body>
<?php

$korisnickoIme=$lozinka=$ime=$prezime=$email=$smerID="";
$korisnickoImeErr=$lozinkaErr=$imeErr=$prezimeErr=$emailErr=$smerIDErr="";
$uneti=false;
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    if (empty($_POST["korisnickoIme"])){
          $korisnickoImeErr = "Morate odabrati korisnicko ime";$uneti=false;
     }
    else{
          $korisnickoIme = test_input($_POST["korisnickoIme"]);
          if (!preg_match("/^[a-zA-Z0-9]*$/",$korisnickoIme)){
               $korisnickoImeErr = "Dozvoljena su samo slova i brojevi u jednoj reci"; $uneti=false;
          } else $uneti=true;
    }
     if (empty($_POST["lozinka"])){
          $lozinkaErr = "Morate uneti željenu lozinku";$uneti=false;
     }
     else {
          $lozinka = test_input($_POST["lozinka"]);
          if(!preg_match("/^[a-zA-Z0-9+&@#\/%?=~_|!:,.;]*$/",$lozinka)){
               $lozinkaErr = "Dozvoljena su mala i velika slova i specijalni simboli";$uneti=false;
          } else $uneti=true;
     }
     if (empty($_POST["ime"])){
          $imeErr = "Morate uneti vaše ime";$uneti=false;
     }
     else {
          $ime = test_input($_POST["ime"]);
          if(!preg_match("/^[a-zA-Z ]*$/", $ime)){
               $imeErr = "Dozvoljena su samo slova i razmaci";$uneti=false;
          } else $uneti=true;
     }
     if (empty($_POST["prezime"])){
          $prezimeErr = "Morate uneti vaše prezime";$uneti=false;
     }
     else {
          $prezime = test_input($_POST["prezime"]);
          if(!preg_match("/^[a-zA-Z ]*$/", $prezime)){
               $prezimeErr = "Dozvoljena su samo slova i razmaci";$uneti=false;
          } else $uneti=true;
     }
     if (empty($_POST["email"])){
          $emailErr = "Morate uneti e-mail";$uneti=false;
     }
     else {
          $email = test_input($_POST["email"]);
          if(!preg_match("/^[a-zA-Z ]*$/", $email)){
               $email = "Dozvoljena su samo slova i razmaci";$uneti=false;
          } else $uneti=true;
     }

     if (empty($_POST["smerID"])){
          $smerIDErr = "Morate izabrati smer";$uneti=false;
     }
     else {
          $smerID = test_input($_POST["smerID"]);
          if(!preg_match("/^[A-Z]*$/",$smerID)){
               $smerIDErr = "Dozvoljena su samo velika slova";$uneti=false;
          } else $uneti=true;
     }
}
function test_input($data){
     $data = trim($data);
     $data = stripslashes($data);
     $data = htmlspecialchars($data);
     return $data;
}

function unos ($korisnickoIme, $lozinka, $ime, $prezime, $email, $smerID){
     $con=mysqli_connect("","qplus_admin","password","qplus_Baza");
     $sql = "INSERT INTO korisnici (korisnickoIme, lozinka, ime, prezime, email, smerID) VALUES ('$korisnickoIme', '$lozinka', '$ime', '$prezime', '$email', '$smerID')";
     global $uneti;
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
 
if ($uneti) {
 if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
}
  mysqli_close($con);

}//kraj unos
?>


<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<br>Korisnicko ime:<input type="text" name="korisnickoIme" value="<?php echo $korisnickoIme;?>"> <span class="error"><?php echo $korisnickoImeErr;?></span>
<br>Lozinka:<input type="password" name="lozinka" value="<?php echo $lozinka;?>"> <span class="error"><?php echo $lozinkaErr;?></span>
<br>Ime:<input type="text" name="ime" value="<?php echo $ime;?>"> <span class="error"><?php echo $imeErr;?></span>
<br>Prezime:<input type="text" name="prezime" value="<?php echo $prezime;?>"><span class="error"><?php echo $prezimeErr;?></span>
<br>E-mail:<input type="text" name="email" value="<?php echo $email;?>"><span class="error"><?php echo $emailErr;?></span>
<br>SmerID:<input type="text" name="smerID" value="<?php echo $smerID;?>"><span class="error"><?php echo $smerIDErr;?></span><br>
<input type="submit" value="Unos" action="<?php unos($korisnickoIme,$lozinka,$ime,$prezime,$email,$smerID) ?>">
</form>

</body>
</html>

 
[ deZio @ 30.10.2013. 18:32 ] @
Evo izmenio sam tvoj kod, pa prouči šta sam sve izmenio, kako bi znao na koji način testiraš. U principu je najlakše da testiraš SQL string pre nego što ga pošalješ ka bazi, na taj način možeš skontati da li postoji greška u SQL upitu. I samo ideš redom, ubacuješ die, i na taj način proveravaš redom gde si pogrešio.

Ponavljam ti opet da ne postoji action za submit dugme, tako da nije to mesto gde treba da izvršiš f-ju unos već unutar if ($_SERVER["REQUEST_METHOD"] == "POST").

preg_match za mejl ti ne radi. Nisi ubacio @ kao dozvoljen karakter. Savetujem ti da izbaciš proveru za mejl jer u današnje vreme kada postoji IDN, a uskoro i top domeni koji će biti reči, validacija mejla nema nekog smisla.. Možda samo da proveravaš da li postoji @ i . u stringu..

Evo izmenjen kod pa pogledaj:

Code (php):

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1250">
<title>Ucenje na daljinu</title>
</head>
<body>
<?php

$korisnickoIme=$lozinka=$ime=$prezime=$email=$smerID="";
$korisnickoImeErr=$lozinkaErr=$imeErr=$prezimeErr=$emailErr=$smerIDErr="";
$uneti=false;
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    if (empty($_POST["korisnickoIme"])){
          $korisnickoImeErr = "Morate odabrati korisnicko ime";$uneti=false;
     }
    else{
          $korisnickoIme = test_input($_POST["korisnickoIme"]);
          if (!preg_match("/^[a-zA-Z0-9]*$/",$korisnickoIme)){
               $korisnickoImeErr = "Dozvoljena su samo slova i brojevi u jednoj reci"; $uneti=false;
          } else $uneti=true;
    }
     if (empty($_POST["lozinka"])){
          $lozinkaErr = "Morate uneti željenu lozinku";$uneti=false;
     }
     else {
          $lozinka = test_input($_POST["lozinka"]);
          if(!preg_match("/^[a-zA-Z0-9+&@#\/%?=~_|!:,.;]*$/",$lozinka)){
               $lozinkaErr = "Dozvoljena su mala i velika slova i specijalni simboli";$uneti=false;
          } else $uneti=true;
     }
     if (empty($_POST["ime"])){
          $imeErr = "Morate uneti vaše ime";$uneti=false;
     }
     else {
          $ime = test_input($_POST["ime"]);
          if(!preg_match("/^[a-zA-Z ]*$/", $ime)){
               $imeErr = "Dozvoljena su samo slova i razmaci";$uneti=false;
          } else $uneti=true;
     }
     if (empty($_POST["prezime"])){
          $prezimeErr = "Morate uneti vaše prezime";$uneti=false;
     }
     else {
          $prezime = test_input($_POST["prezime"]);
          if(!preg_match("/^[a-zA-Z ]*$/", $prezime)){
               $prezimeErr = "Dozvoljena su samo slova i razmaci";$uneti=false;
          } else $uneti=true;
     }
     if (empty($_POST["email"])){
          $emailErr = "Morate uneti e-mail";$uneti=false;
     }
     else {
          $email = test_input($_POST["email"]);
          /* if(!preg_match("/^[a-zA-Z ]*$/", $email)){
               $email = "Dozvoljena su samo slova i razmaci";$uneti=false;
          } else */
$uneti=true;
     }

     if (empty($_POST["smerID"])){
          $smerIDErr = "Morate izabrati smer";$uneti=false;
     }
     else {
          $smerID = test_input($_POST["smerID"]);
          if(!preg_match("/^[A-Z]*$/",$smerID)){
               $smerIDErr = "Dozvoljena su samo velika slova";$uneti=false;
          } else $uneti=true;
     }
      unos($korisnickoIme,$lozinka,$ime,$prezime,$email,$smerID);
}
function test_input($data){
     $data = trim($data);
     $data = stripslashes($data);
     $data = htmlspecialchars($data);
     return $data;
}

function unos ($korisnickoIme, $lozinka, $ime, $prezime, $email, $smerID){
     $sql = "INSERT INTO korisnici (korisnickoIme, lozinka, ime, prezime, email, smerID) VALUES ('$korisnickoIme', '$lozinka', '$ime', '$prezime', '$email', '$smerID')";
     die("$sql");
      /*$con=mysqli_connect("","qplus_admin","password","qplus_Baza");
     global $uneti;
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
 
if ($uneti) {
 if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }
}
  mysqli_close($con);
*/

}//kraj unos
?>


<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<br>Korisnicko ime:<input type="text" name="korisnickoIme" value="<?php echo $korisnickoIme;?>"> <span class="error"><?php echo $korisnickoImeErr;?></span>
<br>Lozinka:<input type="password" name="lozinka" value="<?php echo $lozinka;?>"> <span class="error"><?php echo $lozinkaErr;?></span>
<br>Ime:<input type="text" name="ime" value="<?php echo $ime;?>"> <span class="error"><?php echo $imeErr;?></span>
<br>Prezime:<input type="text" name="prezime" value="<?php echo $prezime;?>"><span class="error"><?php echo $prezimeErr;?></span>
<br>E-mail:<input type="text" name="email" value="<?php echo $email;?>"><span class="error"><?php echo $emailErr;?></span>
<br>SmerID:<input type="text" name="smerID" value="<?php echo $smerID;?>"><span class="error"><?php echo $smerIDErr;?></span><br>
<input type="submit" value="Unos">
</form>

</body>
</html>
 
[ geenije @ 31.10.2013. 09:02 ] @
Puno hvala na volji i odvojenom vremenu! :)

Shvatio sam sve što si rekao, kod mi sada radi normalno mada mi sada nije jasno zašto...OK ovo pozivanje funkcije za unos nije bilo na mestu ali je radilo a samo se jedna varijabla nije prenosila...bio sam isključio ceo deo koda za validaciju, ne samo za email i dalje se samo email nije prenosio...bezveze...voleo bih da kažem "nije bitno, sada radi" ali nisam takav čovek :D
Ne želim dalje da smaram, teram dalje sa kodom pa kad bolje naučim uvideću i sam gde sam grešio.

Ostaje mi samo pitanje, da li je bolje validacije unosa raditi ovako ili u JavaScript, pre sam pravio isti ovaj program kao JSP-HTML-JavaScript kombinaciju gde mi je JavaScript bio za te validacije pa mi to deluje zgodno, iskoči alert box i program ne ide dalje?

Drugo, da li je bolje da pravim dva fajla, HTML sa formom za unos i PHP sa akcijama ili ovako sve u jedan SELF fajl? Šta sada kada se uradi unos, kako da se program vrati sam na recimo index.html prenoseći podatke korisničko ime i lozinka? Probao sam onu header funkciju ali nešto neće...

Izvinjavam se što davim, možete reći samo smernicu, ne morate pisati kod naravno, znam koje je smaranje :)
[ ivan.a @ 31.10.2013. 09:24 ] @
Citat:
Ostaje mi samo pitanje, da li je bolje validacije unosa raditi ovako ili u JavaScript, pre sam pravio isti ovaj program kao JSP-HTML-JavaScript kombinaciju gde mi je JavaScript bio za te validacije pa mi to deluje zgodno, iskoči alert box i program ne ide dalje?

Javascript vrši client-side proveru, dok php server side. Dakle, najbolje je koristiti obe metode (.js zbog "vizuelnog" efekta), a php zbog sigurnosti.

Citat:
Drugo, da li je bolje da pravim dva fajla, HTML sa formom za unos i PHP sa akcijama ili ovako sve u jedan SELF fajl? Šta sada kada se uradi unos, kako da se program vrati sam na recimo index.html prenoseći podatke korisničko ime i lozinka? Probao sam onu header funkciju ali nešto neće...

To uglavnom zavisi od dizajna aplikacija ili od logike programiranja. Uglavnom, gledaj da razdvojiš php od HTML-a (sve procese obradjuj pre html output-a).
[ deZio @ 31.10.2013. 16:04 ] @
Kada radiš redirekciju, vrednosti forme se ne šalju zajedno sa redirekcijom. Moraš svu obradu forme odraditi na stranici na koju šalješ formu. Tu stranicu definišeš unutar <form method="post" action="korisnik.php">
[ geenije @ 31.10.2013. 17:08 ] @
Kako da pokrenem otvaranje nove strane? Evo primer, probao sam posle forme Javascript window.location kao i header(Location:...) ali se podaci ne prenesu, prihvat podataka proveravam sa die("$_POST["korisnickoIme"]");

Code (php):

function unos ($korisnickoIme, $lozinka, $ime, $prezime, $email, $smerID){
     $sql = "INSERT INTO korisnici (korisnickoIme, lozinka, ime, prezime, email, smerID) VALUES ('$korisnickoIme', '$lozinka', '$ime', '$prezime', '$email', '$smerID')";
     $con=mysqli_connect("","qplus_admin","[email protected]","qplus_Baza");
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
 
 
 if (!mysqli_query($con,$sql))
  {
  die('Error: ' . mysqli_error($con));
  }

  mysqli_close($con);
  ?>
  <form method="post" action="login.php">
  <input type="hidden" name="korisnickoIme" value="<?php $korisnickoIme?>">
  <input type="hidden" name="lozinka" value="<?php $lozinka?>">
  </form>
<?php
}
?>
 
[ geenije @ 03.11.2013. 14:38 ] @
Opet ja :) da se pohvalim da sam zbog vaše podrške nastaviod a se bakćem i podosta odmakao sa kodom. Imam sad opet novi "fantomski problem".

Naime, želim da imam stranicu za rad na živo sa svakom tabelom u bazi, vežbe radi. Sada želim da mi se ispišu podaci studenata a da ja preko selecta mogu da promenim smer na kojem su. Želim da mi se svaki red tabele prikaže a select da se samo popuni spiskom svih smerova na fakultetu (kasnije ću i IFom namestiti da option selected bude smer koji student sada pohađa).

Dešava mi se da se za prvi red sve lepo popuni a za ostale ostane prazno. Kapiram treba da premotam pokazivač unazad posle while petlje, ali mi ne uspeva ni sa mysql_data_seek ni sa reset(). Kad njih ubacim, dobijem samo prvi red iz tabele tj jednog studenta.

Evo bitnog dela koda, radi se o $smerovi promenljivoj, ubacivao sam premotavanja na početak prve, pa posle druge while petlje, logički isto ali ne radi, (mysql_data_seek($smerovi, 0) i $smerovi.reset() ), kad ubacim ceo $smerovi= upit da se izvršava unutar petlje onda naravno radi ali to je užasno nepravilno tako programirati...

Code (php):

if ($_SERVER["REQUEST_METHOD"] == "POST")
{    
     $con = mysqli_connect("","qplus_admin","lozinka","qplus_Baza");
     $sql = "select * from $_POST[tabela]";
     
     if (mysqli_connect_errno()){ echo "Failed to connect to MySQL: " . mysqli_connect_error(); }

     
     if ($_POST[tabela] == "korisnici"){    
     ?>
     <table border="1">
     <tr><td>Korisnicko ime</td><td>Ime</td><td>Prezime</td><td>E-mail</td><td>Smer</td>
     <?php
     $result = mysqli_query($con,$sql);
     $smerovi = mysqli_query($con, "select naziv from smerovi");

     while ($row = mysqli_fetch_array($result)){
     ?>
     <tr><td><?php echo $row['korisnickoIme'] ?></td><td><?php echo $row['ime'] ?></td><td><?php echo $row['prezime'] ?></td><td><?php echo $row['email'] ?></td><td><select>
     
     <?php  while ($rowsmer = mysqli_fetch_array($smerovi)){  ?>
          <option><?php echo $rowsmer['naziv']; ?></option>
     <?php }  ?>
     </select></td></tr>
     <?php  
     }
     ?></table><?php
     }
     mysqli_close($con);
}
 
[ ivan.a @ 03.11.2013. 22:35 ] @
Razdvoj php od HTML i sve će biti lakše.

Code (php):
<?php

 function KonekcijaSaBazom( $host = "", $user = "qplus_admin", $lozinka = "lozinka", $baza = "qplus_Baza" ) {
  $con = mysqli_connect($host, $user , $lozinka, $baza);
  return $con;
  }
 
 function PodaciIzTabele( $tabela ) {
  //Napravi konekciju sa bazom
  $con = KonekcijaSaBazom();
  //A zatim ovo ispod:
 $result = mysqli_query($con, "select * from `".$tabela."` ");
   $Podaci = array();
  $c = 0;
  while ($row= mysqli_fetch_array($result )){
   $Podaci[$c]["id"] = $row["id"];
   $Podaci[$c]["korisnickoIme"] = $row["korisnickoIme"];
   $Podaci[$c]["ime"] = $row["ime"];
   $Podaci[$c]["prezime"] = $row["prezime"];
   $Podaci[$c]["email"] = $row["email"];
   $c++;
  }
  return $Podaci;
 }
 }


  function SviSmerovi() {
  //Napravi konekciju sa bazom
   $con = KonekcijaSaBazom();
  //A zatim ovo ispod:
  $smerovi = mysqli_query($con, "select id, naziv from smerovi");
  $Podaci = array();
  $c = 0;
  while ($row= mysqli_fetch_array($smerovi)){
   $Podaci[$c]["id"] = $row["id"];
   $Podaci[$c]["naziv"] = $row["naziv"];
   $c++;
  }
  return $Podaci;
 }
?>


Dakle, svuda pripremi i procesiraj podatke pre HTML-a.

Code (php):
$Podaci =  PodaciIzTabele( $_POST[tabela] );
$Smerovi =  SviSmerovi();


HTML:
Code (php):
<table border="1">
  <tr>
   <td>Korisnicko ime</td>
   <td>Ime</td>
   <td>Prezime</td>
   <td>E-mail</td>
   <td>Smer</td>
  </tr>
foreach ( $Podaci as $Podatak) {
 ?>
  <tr>
   <td><?=$Podatak["korisnickoIme"]?></td>
   <td><?=$Podatak["ime"]?></td>
   <td><?=$Podatak["prezime"]?></td>
   <td><?=$Podatak["email"]?></td>
   <form action="" method="get">
     <input type="hidden" value="<?=$Podatak["id"]?>" name="korisnik" />
      <select name="smer">  
        <?php foreach ( $Smerovi as $Smer) { ?>
           <option value="<?=$Smer["id"]?>"><?=$Smer["naziv"]?></option>
        <?php } ?>
     </select>
     <input type="submit" value="Ok" name="izmena_smera" />
   </form>
  </tr>
 <?php
}


Ovom metodom si napravio samo 2 upita, umesto ko zna koliko u tvom slučaju (petlja u petlji sa upitima).

Kada promeniš smer i klikneš OK dobićeš link:
tvojaStranica.php?korisnik=ID&smer=SmerID

Potrebno je samo da ažuriraš polje smer (SmerID) gde je korisnik ID (putem GET metode) i redirektuješ na istu stranicu (koju prethodno trebaš označiti u formi).
Takođe, ovo možeš uraditi putem Ajax upita.

Da bi označio smer korisnika jednostavno koristi IF (pre <option value) :
Code (php):
if ( $Podatak["smer"] == $Smer["id"] ) $sel = 'selected="selected"'; else $sel = "";
<option <?=$sel?> value="<?=$Smer["id"]?>"><?=$Smer["naziv"]?></option>
[ geenije @ 04.11.2013. 19:45 ] @
Hvala, samo mi nešto nije jasno...

Zašto bih odvojeno pravio kod koji će da puni neku promenljivu koju ću posle niže da isčitavam, uvodeći i petlju sa veštačkim brojačem kad na moj način imam sasvim elegantno rešenje, napunim promenljivu i onda je sa while isčitavam odmah tu?

Nisam razumeo ni ovo "ko zna koliko upita (petlja u petlji)"? Na koje upite misliš, pošto meni se SQL upiti odrade, napune dve promenljive pa onda while i još jedna while u okviru nje ih isčitavaju?

Nije mi zgodno da radim toliko razdvajanje jer želim u jednom ADMIN.php fajlu da radim sve sa bazom, izabereš tabelu, ona ti se prikaže, možeš da menjaš svako polje tabele, da brišeš kolone itd...tako sam nešto već pravio u JSP (Javi i servletima)...
[ ivan.a @ 04.11.2013. 23:06 ] @
Citat:
Nisam razumeo ni ovo "ko zna koliko upita (petlja u petlji)"? Na koje upite misliš, pošto meni se SQL upiti odrade, napune dve promenljive pa onda while i još jedna while u okviru nje ih isčitavaju?

Da, tek sada vidim da si upit stavio pre petlje, ali to možda ipak nije elegantno rešenje kako ga ti nazivaš. :)

php služi kao server-side language i templating "jezik". Idealno je odvojiti kod u controlere i views, gde je tvoj kontroler čist php, dok views je uglavnom HTML (sa minimalnim korišćenjem php-a). Kada pišeš controller, php je kao i bilo koji drugi server-side jezik, ali kada pišeš views, php postaje template jezik.
Razlog zašto ovako nešto primenjivati je veća fleksibilnost. Kada koristiš php sa HTML-om (Spaghetti code), tvoj php je pomešan sa template-om, što znači da je teže održavati, uređivati i alterovani kod.

Dakle, kada se pozove stranica pre bilo kakvog "izlaza" (HTML output-a) svi podaci su već spremni. Ostaje samo da se izrenderuje HTML. Ovo je praktično jer kasnije možeš napisati dodatni kod koji će raditi sa već spremnim podacima pre bilo kakvog HTML izlaza, a i lakše je pregledati kod gde je samo php i kod gde je uglavnom HTML.

Citat:
Nije mi zgodno da radim toliko razdvajanje jer želim u jednom ADMIN.php fajlu da radim sve sa bazom, izabereš tabelu, ona ti se prikaže, možeš da menjaš svako polje tabele, da brišeš kolone itd...tako sam nešto već pravio u JSP (Javi i servletima)...

Ovo je neuporedivo lakše da se radi kada razdvojiš php i HTML, pogotovo kada kasnije ažuriraš i dorađuješ skriptu. Takođe, celu skriptu možeš napisati u samo jednom fajlu (možda nije uvek praktično)...ne shvatam ovo: "jer želim u jednom ADMIN.php fajlu da radim sve sa bazom". Sve to možeš uraditi na način koji je gore opisan.

"Veštački" brojač je stavljen zbog bolje kontrole nad podacima (možda za kasniju upotrebu...treba razmišljati i o tome). Uvek se može koristiti:

Code:
while ($row = mysqli_fetch_array($query)) 
  $tables[] = $row;
}


Pogledaj neki template i framework...videćeš razlog za "why use...". Kada pišeš na ovaj način i npr. kasnije promeniš strukturu baze podataka ili logiku programiranja, ne trebaš menjati i čitav HTML. Ovo što sam gore napisao je veoma jednostavan primer razdvajanja php i HTML-a.
Naravno, sve ovo ne znači da trebaš jedino ovako raditi, ali verujem da ako probaš videćeš posle izvesnog vremena da je neuporedivo lakše i praktičnije.
[ geenije @ 04.11.2013. 23:26 ] @
Kapiram, hvala ti puno na odvojenom vremenu. :)

Nisam puno programirao u tim jezicima gde se prepliće jezik sa HTML pa nisam puno razmišljao o tome na taj način, sve si u pravu što si rekao. Praviću onda odvojeno kod za obradu i spremanje podataka u promenljive, a onda HTML samo da štampa te promenljive i te neke sitne poslove da obavlja PHP u okviru HTML.

Ono tvoje punjenje podatka naravno radi, meni je žao što nisam provalio kako da radi sa while ono vraćanje pokazivača na nulti podatak u nizu, možda nekad zatreba, zasad šta je tu je :) da ja pičim dalje, prilično sam odmakao, pa ću ostaviti link kad završim da mi kažete mišljenje :)
[ ivan.a @ 04.11.2013. 23:53 ] @
Citat:
meni je žao što nisam provalio kako da radi sa while ono vraćanje pokazivača na nulti podatak u nizu

Problem je u tome što upit vraća resurs, koji već ima interni brojač. Kada se resurs "isprazni" dobijaš false rezultat.
Za resetovanje pointer-a, možeš koristiti mysqli_data_seek($result, 0);

Ali možeš i ovako (slično kao u primerima gore):
Code (php):
<?php
$data = array();
while ($row = mysqli_fetch_array($result)) {
    $data[] = $row;
}
//svi podaci su smešteni u $data.
foreach($data as $row){
    //rad sa podacima
    print_r($row);
}

//i možeš da ponavljaš koliko puta hoćeš.
foreach($data as $row){
    //rad sa podacima
    print_r($row);
}
?>