Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Sve radi ali ... moze to i bolje ... saveti i predlozi

[es] :: PHP :: Sve radi ali ... moze to i bolje ... saveti i predlozi

[ Pregleda: 2707 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.dynamic.sbb.co.yu.



Profil

icon Sve radi ali ... moze to i bolje ... saveti i predlozi09.08.2006. u 22:52 - pre 215 meseci
E ovako,
pošto sam relativni početnik u php-u, voleo bih da mi date neki predlog kako da ovaj početnički primer učinim "još boljim".

Konkretno muči me sledeće:
- to što se posle provere unetih parametara, resetovanje unetih vrednosti radi sa refresh-om;
- kako da se ispisuju sve greške prilikom unosa traženih vrednosti a ne samo prva greška, u slučaju da je načinjena više od jedne greške;
- kako da se pored input filda u kojem je načinjena greška postavi *;
-
-
-

Ponavljam primer radi sve što sam zamislio (dobro ne baš sve ... ;-) ), ali može i bolje.


Code:

<html>
  <head>
  <meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
      <title>Primer koji vrši upis u MYSQL bazu i prikazuje unete podatke na zahtev korisnika</title>
  </head>
  <body >
<H2> Primer koji vrši upis u MYSQL bazu i prikazuje unete podatke na zahtev korisnika</H2>
<hr shade>
<font size=4>Molimo Vas unesite sledeće podatke kako biste se registrovali kao naš korisnik </font><br/><br/>
      <div style="margin-left: 200px">
      <form method="POST" >
        <table width="400" border="0" cellspacing="1" >
          <tr>
            <td width="100" align="right">Ime: </td>
            <td><input name="ime" type="text" id="ime" align="left" value="<?php if(isset($_POST['ime']) ) print($_POST['ime']); ?>" ></td>
          </tr>
          <tr>
            <td width="100"  align="right">Prezime: </td>
            <td><input name="prezime" type="text" id="prezime" align="left" value="<?php if(isset($_POST['prezime']) ) print($_POST['prezime']); ?>"  ></td>
          </tr>
          <tr>
          <td width="100" align="right">Korisnik: </td>
            <td><input name="korisnIme" type="text" id="korisnIme" align="left" value="<?php if(isset($_POST['korisnIme']) ) print($_POST['korisnIme']); ?>" ></td>
          </tr>
          <tr>
            <td width="100" align="right">Lozinka: </td>
            <td><input name="password" type="password" id="password" align="left"  value="<?php if(isset($_POST['password']) ) print($_POST['password']); ?>" ></td>
          </tr>          
          <tr>
            <td width="100">&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td width="100">&nbsp;</td>
            <td><input name="add" type="submit" id="add" value="Dodaj Korisnika">&nbsp;&nbsp;&nbsp;<input name="get" type="submit" id="get" value="Lista Korisnika"></td>
          </tr>
        </table>
      </form>
  </body>
</html>

<?php
    
    function prikaz($hostname, $dbuser, $dbpass)
    {
          
          $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
          
          $dbname = 'proba';
          mysql_select_db($dbname);
          
          $query  = "SELECT rednibroj, ime, prezime , korisnIme FROM user";
          $result = mysql_query($query);


          echo"<br/><br/>";
          echo"<table border='1' cellpadding='0'>";
          echo "<tr><td bgcolor=\"#AAAAAA\" width='100' align='center' ><font size=5 color=\"blue\">RBR</font> </td><td bgcolor=\"#AAAAAA\" width='150' align='center' ><font size=5 color=\"blue\"> IME</font> </td><td bgcolor=\"#AAAAAA\" width='150' align='center' ><font size=5 color=\"blue\"> PREZIME </font> </td><td bgcolor=\"#AAAAAA\" width='150' align='center' ><font size=5 color=\"blue\"> KORISNIK </font> </td></tr>";
            
          while($row = @mysql_fetch_array($result, MYSQL_ASSOC))
          {
            $rbr=$row['rednibroj'];
            $ime = $row['ime'];
            $prezime = $row['prezime'];
            $korisnIme = $row['korisnIme'];
           
            echo "<tr><td width='100' align='center'>$rbr</td><td width='150' align='center'>$ime</td><td width='150' align='center'>$prezime</td><td width='150' align='center'>$korisnIme</td></tr>";
          }
           echo"</table>";

          mysql_close($conn);
    }

    function unos($hostname, $dbuser, $dbpass)
    {
        $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
          
        $dbname = 'proba';
        mysql_select_db($dbname);
          
        $ime = $_POST['ime'];
        $prezime = $_POST['prezime'];
        $korisnIme = $_POST['korisnIme'];
        $password = $_POST['password'];
          
        if(!isset($ime) || (trim($ime) == '')){
            echo"<p><font size=4 color='red'><ul><li>Morate uneti Ime ! </li></ul></font></p>";
        }
        else if(!isset($prezime) || (trim($prezime) == ''))
        {
            echo"<p><font size=4 color='red'><ul><li>Morate uneti Prezime ! </li></ul></font></p>";
        }
        else if(!isset($korisnIme) || (trim($korisnIme) == ''))
        {
            echo"<p><font size=4 color='red'><ul><li>Morate uneti Korisničko ime ! </li></ul></font></p>";
        }
        else if(!isset($password) || (trim($password) == ''))
        {
            echo"<p><font size=4 color='red'><ul><li>Morate uneti lozinku ! </li></ul></font></p>";
        }
        else{
            $query = "INSERT INTO user (ime, prezime, korisnIme, password) VALUES ('$ime', '$prezime', '$korisnIme', PASSWORD('$password'))";
            mysql_query($query);
                     
            mysql_close($conn);
                      
            echo '<META http-equiv="refresh" content="0;URL=http://127.0.0.1/test.php">'; 
            exit; 
        }
    }
      
    if(isset($_POST['add']))
    {
        unos('127.0.0.1','php','test');
    }
      
    if (isset($_POST['get']))
    {
        prikaz('127.0.0.1','php','test');
    }

?>



Hvala na strpljenju i predlozima ...
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dialup.neobee.net.



+35 Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi10.08.2006. u 00:26 - pre 215 meseci
Zdravo,evo odgovora od jos jednog 'relativnog pocetnika'(svidja mi se formulacija;-))
1)?
2)ne mozes da koristis 'else if' ako zelis da omogucis ispisivanje svih gresaka-koristi samo' if 'naredbu(poslednja-unos u bazu-ostaje else,dakako)
3)Vrlo lako:
Code:

<td><input name="ime" type="text" id="ime" align="left" value="<?php if(isset($_POST['ime']) ) print($_POST['ime'])?>" ><?php if(isset($_POST['add'])) if($_POST['ime']=="")echo "*";?></td>

Pozdrav!
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.static.beocity.net.



Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi10.08.2006. u 08:08 - pre 215 meseci
Hvala na brzom odgovoru.

Što se tiče druge stavke, znam kako se koristi if i elseif ;-), ali sam mislio na rešenje tipa upotrebe neke funkcije u kojoj se beleže sve greške u jedan niz a zatim se taj niz izlista ... ili nešto slično ...
Kod treće stavke sam napravio klasičnu početničku grešku umesto ovoga što si ti napisao ja sam pokušavao sa sledećim:
Citat:

<td><input name="ime" type="text" id="ime" align="left" value="<?php if(isset($_POST['ime']) ) print($_POST['ime']); ?>" ><?php if( isset($_POST['add']) && ( !isset($_POST['ime']) ) echo"<font size=3 color='red'> *</font>"; ?></td>


, u svakom slučaju, hvala ti PUUUNO na odgovoru ...
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.static.beocity.net.



Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi10.08.2006. u 10:06 - pre 215 meseci
Evo sredio sam i "problem" broj dva, vezan za ispis svih načinjenih grešaka, ubacivanjem još jedne funkcije flag_error. Evo kako to izgleda sada:

Code:

<html>
  <head>
      <meta HTTP-EQUIV="content-type" CONTENT="text/html; charset=UTF-8">
      <title>Primer koji vrši upis u MYSQL bazu i prikazuje unete podatke na zahtev korisnika</title>
  </head>
  <body >
<H2> Primer koji vrši upis u MYSQL bazu i prikazuje unete podatke na zahtev korisnika</H2>
<hr shade>
<font size=4>Molimo Vas unesite sledeće podatke kako biste se registrovali kao naš korisnik </font><br/><br/>
      <div style="margin-left: 200px">
      <form action="<?php print($PHP_SELF); ?>" method="POST" >
        <table width="400" border="0" cellspacing="1" >
          <tr>
            <td width="100" align="right">Ime: </td>
            <td><input name="ime" type="text" id="ime" align="left" value="<?php if(isset($_POST['ime']) ) print($_POST['ime']); ?>" > <?php if( isset($_POST['add']) ) if( $_POST['ime']== "")  echo"<font size=3 color='red'> * </font>"; ?>
            </td>
          </tr>
          <tr>
            <td width="100"  align="right">Prezime: </td>
            <td><input name="prezime" type="text" id="prezime" align="left" value="<?php if(isset($_POST['prezime']) ) print($_POST['prezime']); ?>"  > <?php if( isset($_POST['add']) )  if( $_POST['prezime']== "")  echo"<font size=3 color='red'> * </font>"; ?></td>
          </tr>
          <tr>
          <td width="100" align="right">Korisnik: </td>
            <td><input name="korisnIme" type="text" id="korisnIme" align="left" value="<?php if(isset($_POST['korisnIme']) ) print($_POST['korisnIme']); ?>" > <?php if( isset($_POST['add']) )  if( $_POST['korisnIme']== "")  echo"<font size=3 color='red'> * </font>"; ?></td>
          </tr>
          <tr>
            <td width="100" align="right">Lozinka: </td>
            <td><input name="password" type="password" id="password" align="left"  value="<?php if(isset($_POST['password']) ) print($_POST['password']); ?>" > <?php if( isset($_POST['add']) )  if( $_POST['password']== "")  echo"<font size=3 color='red'> * </font>"; ?></td>
          </tr>          
          <tr>
            <td width="100">&nbsp;</td>
            <td>&nbsp;</td>
          </tr>
          <tr>
            <td width="100">&nbsp;</td>
            <td><input name="add" type="submit" id="add" value="Dodaj Korisnika">&nbsp;&nbsp;&nbsp;<input name="get" type="submit" id="get" value="Lista Korisnika"></td>
          </tr>
        </table>
      </form>
  </body>
</html>
<?php
    
    function flag_error($fieldname,$errstr){
            global $field_with_errors, $errors;
            $fields_with_errors[$fieldname]  = 1;
            $errors[] = $errstr;
    }
    
    function prikaz($hostname, $dbuser, $dbpass)
    {
          
          $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
          
          $dbname = 'proba';
          mysql_select_db($dbname);
          
          $query  = "SELECT  rbr, ime, prezime , korisnIme FROM user";
          $result = mysql_query($query);

            echo"<br/><br/>";
            echo"<table border='1' cellpadding='0'>";
            echo "<tr><td bgcolor=\"#AAAAAA\" width='100' align='center' ><font size=5 color=\"blue\">RBR</font> </td><td bgcolor=\"#AAAAAA\" width='150' align='center' ><font size=5 color=\"blue\"> IME</font> </td><td bgcolor=\"#AAAAAA\" width='150' align='center' ><font size=5 color=\"blue\"> PREZIME </font> </td><td bgcolor=\"#AAAAAA\" width='150' align='center' ><font size=5 color=\"blue\"> KORISNIK </font> </td></tr>";
            
          while($row = @mysql_fetch_array($result, MYSQL_ASSOC))
          {
                    $rbr=$row['rednibroj'];
                    $ime = $row['ime'];
                    $prezime = $row['prezime'];
                    $korisnIme = $row['korisnIme'];
                   
                    echo "<tr><td width='100' align='center'>$rbr</td><td width='150' align='center'>$ime</td><td width='150' align='center'>$prezime</td><td width='150' align='center'>$korisnIme</td></tr>";
          }
           echo"</table>";

          mysql_close($conn);
}

function unos($hostname, $dbuser, $dbpass)
    {

          $conn = mysql_connect($dbhost, $dbuser, $dbpass) or die ('Error connecting to mysql');
          
          $dbname = 'proba';
          mysql_select_db($dbname);
          
          $ime = $_POST['ime'];
          $prezime = $_POST['prezime'];
          $korisnIme = $_POST['korisnIme'];
          $password = $_POST['password'];

          $query = "INSERT INTO user (ime, prezime, korisnIme, password) VALUES ('$ime', '$prezime', '$korisnIme', PASSWORD('$password'))";
          mysql_query($query);
             
          mysql_close($conn);
              
        }
      
      if(isset($_POST['add']))
      {
 
          if(trim($_POST['ime']) == '')
                  flag_error ('ime','Morate uneti Ime !');
          if(trim($_POST['prezime']) == '')
                  flag_error('prezime','Morate uneti Prezime !');
          if(trim( $_POST['korisnIme']) == '')
                  flag_error('korisnIme','Morate uneti Korisničko ime !');
          if(trim( $_POST['password']) == '')
                  flag_error('password','Morate uneti lozinku ! ');
            
          if (count ($errors) > 0){
                            
                  $n= count ($errors);
                  echo"<br/><br/><P><font size=4 color='red'>Greška prilikom prijave. Molimo Vas ispravite sledeća polja: </font></P><ul>";
                  for ($i=0; $i < $n; $i++){
                            echo"<P><font size=3 color='red'><li>" .$errors[$i]. " </li></font></P>\n";
                  }
                  echo"</ul>";
          }
          else{
                  unos('127.0.0.1','php','test');
                            
                  echo '<META http-equiv="refresh" content="0;URL=http://212.200.81.65/testMysql.php">';
                  exit;
          }
      }
      
      if (isset($_POST['get']))
      {
            prikaz('127.0.0.1','php','test');
      }

?>


, i dalje bih voleo da čujem vaše predloge šta je potrebno poboljšati ...


Da, ako nekoga interesuje kako to izgleda može pogledati na adresi http://212.200.81.65/testMysql.php , jeste da je sporo ali ovo je samo mali početnički primer ...

 
Odgovor na temu

broker

Član broj: 2415
Poruke: 8514
212.62.59.*



+11 Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi10.08.2006. u 10:51 - pre 215 meseci
Razdvoj HTML i PHP kod. Odvoj funkcije u poseban .php kao biblioteku.
 
Odgovor na temu

mb_sa

Član broj: 50529
Poruke: 172
*.PPPoE-1028.sa.bih.net.ba.



Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi10.08.2006. u 11:57 - pre 215 meseci
Poboljsaj funkciju Unos(), tako sto ces sprijeciti dupli unos, jer sta ako ti se neko registruje sa istim korsinickim imnemom?

Takodjer, bi onemogucio koristenje specijlanih znakova u svim poljima, osim mozda u password, gdje bi ostavio neke (poput !,...), duzinu korsinickog imena i passwroda (moze ti se neko regati sa un: a i pass: a, sto i nije bas pametno).

EDIT: I da, koristi CSS umjesto zastarjelih HTML tagova
 
Odgovor na temu

sale83
Australia
Sydney

Član broj: 41625
Poruke: 729
*.ispone.net.au.



+30 Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi10.08.2006. u 13:18 - pre 215 meseci
Pre nego sto nastavis dalje:

Ako stvarno zelis da radis sa PHP-om onda prvo treba da se upoznas sa ovim i da dobro ukapiras o cemu je rec:

http://phpsec.org/projects/guide/sr/


SIGURNOST - Jako bitna stvar.

Sto mozes danas ne ostavljaj za sutra!
 
Odgovor na temu

kelja

Član broj: 70429
Poruke: 1416
*.dialup.neobee.net.



+35 Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi10.08.2006. u 13:40 - pre 215 meseci
Samo jedna napomena:nisi pazljivo procitao moj prvi post...nije bilo(preterane) potrebe da pravis jos jednu funkciju za ispis SVIHgresaka.Dovoljno je bilo da uradis ono sto sam ti napomenuo:
Code:

 if(!isset($ime) || (trim($ime) == '')){
            echo"<p><font size=4 color='red'><ul><li>Morate uneti Ime ! </li></ul></font></p>";
        }
         if(!isset($prezime) || (trim($prezime) == ''))
        {
            echo"<p><font size=4 color='red'><ul><li>Morate uneti Prezime ! </li></ul></font></p>";
        }
         if(!isset($korisnIme) || (trim($korisnIme) == ''))
        {
            echo"<p><font size=4 color='red'><ul><li>Morate uneti Korisničko ime ! </li></ul></font></p>";
        }
       if(!isset($password) || (trim($password) == ''))
        {
            echo"<p><font size=4 color='red'><ul><li>Morate uneti lozinku ! </li></ul></font></p>";
        }
        else{...

Znaci if umesto else if...ali dobro...rad sa funkcijama je svakako mnogo zahvalniji...
E da,ako moze neki primer sql injection-a koji bi mogao da se odradi na ovom kodu...To bi me bas zanimalo...Pozdrav!
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.static.beocity.net.



Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi10.08.2006. u 16:04 - pre 215 meseci
Hvala na predlozima i sugestijama, vrlo su konstruktivni.

Jel ima neko predlog kako da obrišem polja za unos nakon uspešnog unosa? Ja sam to uradio sa refreshom, ali verujem da postoji elegantnije rešenje.

Pozdrav ...
 
Odgovor na temu

glavince
Ohrid/Macedonia

Član broj: 66412
Poruke: 246
62.162.242.*

Sajt: ohridnews.com


Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi10.08.2006. u 16:32 - pre 215 meseci
Malo mi je kod nepregledan i prenatrupan.
Prvo ja bi napravio exteran fajl za konekciju.
A ostalo bi izgledalo slicno ovome:
Code:

<?  
class proverka {

function forma() {
// forma za unos
}
function korisnici() {
/*
query (select korisnIme from user where korisnIme = $_POST['korisnIme'])
$br = mysql_num_rows($query);
return $br;
da bi proverio dali postoji takav user
*/
}
function unos() {
/*
queri za unos
if (!query) greska pri izvrsavanju
else poruka da je sve u redu
*/
}
function prikaz() {
/*
prikaz
*/
}
function greski() {
//pravis nizu od moguce greske
global $greska;
if(!isset($_POST['ime']) || (trim($_POST['ime']) == ''))          {$greska[] = 'Morate uneti Ime !'};
if(!isset($_POST['prezime']) || (trim($_POST['prezime']) == ''))  {$greska[] = 'Morate uneti Prezime !'};
if($this->korisnici() > 0)                                           {$greska[] = 'Postoi takav korisnik !'};
//i t.d.
}
function prikazi_greski() {
global $greska;
foreach($greska as $problem) {
echo $problem."<br>";
}
}

$proverka = new proverka;
$greska = array();
if (isset($_POST['add'])) {
    $proverka->greski();
    if (count($greska) != 0) {
    $proverka->forma();
    $proverka->prikazi_greski();
    } else {
    $proverka->unos();
    $proverka->prikaz(); //nemas vise polja za unos
    }
} else {
$proverka->forma();
if (isset($_POST['get'])) {
$proverka->prikaz()
}
}
?>

Ovde nema bas potrebe od clase al jeb*ga
 
Odgovor na temu

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
*.net
Via: [es] mailing liste



+8 Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi11.08.2006. u 01:19 - pre 215 meseci
Kakav ti reset treba? Ako želiš da korisnik ima mogućnost da obriše celu formu u toku popunjavanja, onda koritiš reset dugme koje postoji u HTML specifikaciji.

Za obradu grešaka imaš više načina. Ja konkretno imam malo drugačiju strukturu dokumenta. Na početku se proverava da li u $_POST (ili već šta koristiš) ima podataka. Ako ima, radi se validacija podataka (do kraja!) i svaka greška se upisuje u array. Možeš da posebno napraviš jedan array gde ćeš čuvati tekstualni opis greške, jedan za čuvanje imena polja sa greškom itd. Kad se uradi validacija, ide kod koji ispisuje stranicu. U tom kodu ubaciš da se na početku ispišu sve greške iz arraya (ako želiš da greške stoje na vrhu stranice), a potom kad god ispisuješ neko polje ako to polje sadrži grešku ispred njega ubacuješ zvezdicu. Dakle, u odnosu na ovo tvoje, gde ti već imaš upisivanje unetih vrednosti, samo dodaš još ubacivanje tih zvezdica.

Valjda će ti ovo pomoći...
 
Odgovor na temu

Shejn
Srbija

Član broj: 11830
Poruke: 232
*.static.beocity.net.



Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi11.08.2006. u 07:15 - pre 215 meseci
@lukeguy
haha baš sam upravo isprobavao tu funnkciju sa arrayom ...
Što se tiče reseta, kao što rekoh, treba da se obrišu podaci uneti u formu prilikom pritiska na dugme Submit, ako nema nikakve greške. Prvo rešenje ovog problema se sastojalo u tome što sam radio refresh strane, drugo rešenje koje je sada trenutno implementirano je izvedano uz pomoć JavaScripta, i izgleda ovako:
Code:

          .
          .
          .
          else{
                  unos('localhost','user','password');

                  echo"<script type='text/javascript'> 
                  forma.ime.value = '';
                  forma.ime.focus(); 
                  forma.prezime.value = '';
                  forma.korisnIme.value = '';
                  forma.password.value = '';
                  </script>";
          }
          .
          .
          .


ovo izgleda OK, ali bih ja hteo da izbegnem JavaScript što je više moguće ...
 
Odgovor na temu

lukeguy
Novi Sad

Član broj: 46545
Poruke: 470
*.beobug.com.



+8 Profil

icon Re: Sve radi ali ... moze to i bolje ... saveti i predlozi11.08.2006. u 21:53 - pre 215 meseci
Da, to sam zaboravio da ti napišem u prethodnom postu. Dakle, krećemo od toga da kod počinje sa jednim if koje pita da li $_POST sadrži bilo šta. Ako sadrži radiš validaciju i ono gore što sam pisao. Ako NE sadrži, onda iscrtavaš praznu formu.

Pretpostavljam da ti hoćeš da se posle uspešnog popunjavanja forme ispiše nekakav Thank you red. To radiš pomoću funkcije za validaciju. Ako ona vrati true (ili se kod za validaciju evaluira kao true) onda ispišeš to Thank you (ili resetuješ formu). Ako funkcija vrati false ispisuješ greške i zvezdice.

Btw, ovo podrazumeva da ti kod za evaluaciju vraća neku vrednost. Pa onda ili napravi funkciju ili nekakav složeni if.
 
Odgovor na temu

[es] :: PHP :: Sve radi ali ... moze to i bolje ... saveti i predlozi

[ Pregleda: 2707 | Odgovora: 12 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.