[ Thugzsr @ 01.06.2011. 09:53 ] @
Kako se realizuje objektno orjentisani upis u bazu podataka iz forme? Forma sadrzi par text inputa i jednu drop down listu. napravio sam spoljnu klasu koja sadrzi samo atribute koji su isti kao i polja u bazi. e sad instanciram objekat te klase u drugom file-u, i u taj objekat treba da ubacim podatke iz forme, i zatim da ih ubacim u bazu, ali nesto ne radi. ne izbaci mi gresku a baza ostane ne popunjena. zna li neko u cemu je problem, ili bi mogli da mi objasnite kako to da realizujem?
[ VladaSu @ 01.06.2011. 14:13 ] @
Ne znam da li iko moze da ti pomogne. Moras da budes mnogo konkretniji sto se tice problema a ne samo da kazes da imas klase koje se nasledjuju i da nece da ti upise u bazu.
Savetujem ti da krenes da debug-ujes, da vidis da li uopste dodje do toga da treba da izvrsi sql, pa ako ne dodje onda pogledaj zasto ne dodje i onda ces vec naci neko resenje.
[ Miroslav Ćurčić @ 01.06.2011. 20:23 ] @
Objekat možeš da serijalizuješ (funkcija serialize) i tako dobijen string lako upišeš u bazu.
[ VladaSu @ 01.06.2011. 22:01 ] @
Kaze da ima polja u bazi a ne polje. Hoce jedan input jedno polje, drugi input drugo polje. Tako da serijalizacija objekata ovde nije potrebna.
Koliko sam shvatio hoce da klasi zada parametre koje kolone sadrzi tabela i da ako je akcija save da iscita vrednosti tih atribute iz $_POST i smesti ih u bazu.
Ima rupa i bas je simple, nema validacije itd ali mislim da je mislio na ovako nesto:

Code (php):

//Korisnik_Model.php
class Korisnik_Model extends Model
{
    public $attributes = array(id, name, street);
    public $table = 'korisnik';
}
 



Code (php):

//Model.php
class Model
{
    public $attributes = array();
    public $table = '';
   
    public function save()
    {
       $data = array_intersect_key($_POST, array_flip($this->attributes));
       $set = array();
       foreach ($data as $key => $val) { $set[] = "`{$key}` = '{$val}'"; }
       $q = "REPLACE INTO {$this->table} SET " . implode(', ', $set);
       return DB::sql($q);
    }
}
 


A u kontroleru pozove save kada je potrebno...
[ Miroslav Ćurčić @ 02.06.2011. 09:17 ] @
Ovu poruku je menjao VladaSu dana 14.06.2003

Kako si ovo uspeo ?????

[Ovu poruku je menjao Miroslav Ćurčić dana 02.06.2011. u 16:44 GMT+1]
[ Thugzsr @ 02.06.2011. 09:24 ] @
nismo se razumeli. jedna klasa mi sadrzi samo atribute. znaci izgleda ovako
Code:

<?php
class studenti {
          public $id_stud;
          public $ime;
          public $prezime;
          public $br_ind;
          public $stud_prog;
          public $sifra;
          public $mentor;
          public $god_studija;
}
?>

e sad objekad te klase instanciram u drugom file-u gde mi je forma. i taj objekat sad ima sve te parametre.
onda bi trebalo da taj objekat popunim podacima iz forme i zatim da ubacim te podatke u bazu.
ja sam to probao ovako, ali ne desava se nista.
Code:

$student= new studenti();
$student -> ime=$_POST['form_ime'];
$student -> prezime=$_POST['form_prezime'];
$student -> br_index=$_POST['form_brindex'];
$student -> Stud_prog=$_POST['stud_prog']; 
// i tako za sve atribute; i deo za upis u bazu
$query = "INSERT INTO studenti (Ime, Prezime, br_indexa, Stud_prog, email, sifra, mentor, god_studija) VALUES 
('$student->Ime','$student->Prezime','$student->br_indexa','$student->Stud_prog','$student->email','$student->sifra','$student->mentor','$student->god_studija')";

ne znam da li sad razumee sta sam hteo, tj da li sam dobro objasnio. ovao mi ne radi, i nemojte da osudjujete ako je glupa greska ili ako se vidi da bas ne znam, jer pocinjem sa objektima da radim! :D
[ Br@nkoR @ 02.06.2011. 09:31 ] @
Obrati pažnju na velika i mala slova za imena atributa/osbina.

edit:
Postavi u php.ini error_reporting = E_ALL


[Ovu poruku je menjao Br@nkoR dana 02.06.2011. u 10:42 GMT+1]
[ Thugzsr @ 02.06.2011. 09:52 ] @
pazim na slova, ovo sam napamet na brzinu pisao, da objasnim sta se radi, stoji mi vec error u php.ini kako si napisao.
[ Br@nkoR @ 02.06.2011. 09:57 ] @
Pa postavi tačan koda koji ne radi i obrati pažnju na imena public $br_ind; i $student -> br_index
[ Miroslav Ćurčić @ 02.06.2011. 11:27 ] @
Koristilo bi nam i podatak dali MySQL vraća neku grešku pri izvršavanju querija (mysql_error() ili šta već koristiš).
[ Thugzsr @ 02.06.2011. 12:45 ] @
koristim mysql error, i za konekciju i za query ali ne izbacuje nista, sve je kao da se izvrsi, ali baza nostaje ne promenjena! znaci ta logika mi je ok? moze tako da se radi? ne treba nista da se dodaje ili menja? napisacu vam kod, ali sam dosta menjao, pokusavajuci da dodjem do resenja, da znate! :D
Code:


<?php
$student= new studenti();
$student->Ime=$_POST['form_ime'];
$student->Prezime=$_POST['form_prezime'];
$student->br_indexa=$_POST['form_brindex'];
$student->Stud_prog=$_POST['stud_prog'];
$student->email=$_POST['form_email'];
$student->sifra=$_POST['form_pass'];
$student->mentor=$_POST['form_mentor'];
$student->god_studija=$_POST['form_god'];
$this->insertstudenta($student);
echo " $student";


 function insertstudenta($student) {
             
        $mysql = mysql_connect(DATABASE_SERVER, DATABASE_USERNAME, DATABASE_PASSWORD);
        mysql_select_db(DATABASE_NAME) or
              die('Oops connection error -> ' . mysql_error());
         $query = "INSERT INTO studenti (Ime, Prezime, br_indexa, Stud_prog, email, sifra, mentor, god_studija) VALUES 
               ('$student->Ime','$student->Prezime','$student->br_indexa','$student->Stud_prog','$student->email','$student->sifra',
              '$student->mentor','$student->god_studija')";
              $result = mysql_query($query) or die("Bule je debil ako je greska:" .mysql_error());
}
?>    
<form name="form" method="POST" action="#">
Broj Index-a<br><input type="text" name="form_brindex" value=""><br>
Password<br><input type="password" name="form_pass" value=""><br>
Ime<br><input type="text" name="form_ime" value=""><br>
Prezime<br><input type="text" name="form_prezime" value=""><br>
Studijski program<br><select class"select" name="stud_prog">
<option ></option>
<option value="it">Informaciona Tehnologija</option>
  <option value="zp">Zastita od pozara</option>
  <option value="wd">Web Dizajn</option>
  <option value="gd">Graficki Dizajn</option>
  <option value="gi">Graficko inzinjerstvo</option>
  <option value="en">Energetika</option>
  <option value="pf">Primenjena Fotografija</option>
</select><br>
Email<br><input type="text" name="form_email" value=""><br>
Godina studija<br><input type="text" name="form_god" value=""><br>
Mentor<br><input type="text" name="form_mentor" value=""><br>
<input type="submit" value="Submit">
</form>        

to je php deo i forma... mozda da napravim spoljni php file pa da u njega stavim php, a u action forme taj file?
[ Br@nkoR @ 02.06.2011. 14:20 ] @
Da li je u php.ini fajlu uključeno prikazivanje grešaka (display_errors)?
Postavi i kod klase studenti.
Da li je insertstudenta() funkcija ili metod klase studenti?
Ukoliko je funkcija zameni $this->insertstudenta($student); sa insertstudenta($student); (ukloni $this->), a ukoliko je metod $this->insertstudenta($student); promeni sa $student->insertstudenta(); a unutar metoda svuda gde piše $student promeni sa $this.
[ VladaSu @ 02.06.2011. 14:27 ] @
Nema logike da imas klasu sa atributima ako ti ta klasa nista ne radi, to je onda samo jedan obican array. Ali ako vec imas klasu studenti onda bi tamo trebala da postoji metoda i add.

Pokusaj posle $query = "insert ...
da stavis pa javi sta ti javlja i da li ti javlja
echo $query; exit;

Ja bih radije napravio ovako nesto:
Code (php):


<?php
class studenti {
          public $id_stud;
          public $ime;
          public $prezime;
          public $br_ind;
          public $stud_prog;
          public $sifra;
          public $mentor;
          public $god_studija;
         
         public function add()
         {
             //ovde insert
         }
}
?>
 

A kasnije bi:
Code (php):

<?php
$student= new studenti();
$student -> ime=$_POST['form_ime'];
$student -> prezime=$_POST['form_prezime'];
$student -> br_index=$_POST['form_brindex'];
$student -> Stud_prog=$_POST['stud_prog'];
// i tako za sve atribute; i deo za upis u bazu
$student -> add();
?>
 


A jos prakticniji primer je sto sam juce napravio i postavio ovde.
[ Thugzsr @ 02.06.2011. 16:40 ] @
uradio sam kako je vladasu rekao, i radi! hteo sam da pitam jos nesto, kako da se ukoliko nije ulogovan korisnik vrati na stranu za logovanje? da se na svakoj strani stavi zabrana, da samo ulogovani korisnici vide!
Code:

session_start();
require_once 'config.php';
if (isset($_POST['userid']) && isset($_POST['password']))
{
  // ako korisnik pokusava da se uloguje
  $userid = $_POST['userid'];
  $password = $_POST['password'];
  $query = 'select * from admin '
           ."where username='$userid' "
           ." and pass=sha1('$password')";

    {
        $_SESSION['valid_user']=$userid;
    }
}

e sad mi treba else, koji ce redirektovati na drugu stranu...jos samo to i necu vas vise gnjaviti! :D
[ VladaSu @ 02.06.2011. 18:20 ] @
Mozes za drugo pitanje da otvoris novu temu kako bi neko drugi lakse se snasao ako ima isti problem.
Postoji vise nacina da to odradis.
Code (php):

//init.php
session_start();
require_once 'config.php';
if (isset($_POST['userid']) && isset($_POST['password']))
{
  // ako korisnik pokusava da se uloguje
  $userid = $_POST['userid'];
  $password = $_POST['password'];
  $query = 'select * from admin '
           ."where username='$userid' "
           ." and pass=sha1('$password')";

   if (DB::query($query)) {
        $_SESSION['valid_user']=$userid;
    }
}

//ne treba ti else vec nastavis sa proverom
if (empty($_SESSION['valid_user']) && isset($must_be_logged) && $must_be_logged == true)
{
   header('Location:login.php?ref=' . rewurlencode($trenutni_url)); //ovde stavis trenutni url kako bi znao da vratis korisnika kada se uloguje
   exit; //OBAVEZNO!!!!
}
 


A ovo bih stavio u recimo index.php
Code (php):

$must_be_logged = true; //ako mora biti logovan na index strani a false ako ne mora ili preskoci ako ne mora
requre_once 'init.php';
 


Umesto redirekcije mozes i da jednostavno uvuces html kod za logovanje.
Ne znam da li radi primera izostavis neke stvari ali tu ti recimo fali mysql_real_escape_string
[ Thugzsr @ 03.06.2011. 13:10 ] @
greska mi je u select tagu...njega nece da upise u bazu! moze li mi neko reci kako se vadi vrednost iz select (drop down menu) taga? znaci taj student -> stud_prog treba da sadrzi vrednost iz selecta, ali ne uzima ga!
[ VladaSu @ 03.06.2011. 14:22 ] @
PHP ne prepoznaje da li je nesto select, hidden, text, radio, on samo dobija name i vrednost.
To znaci da nisi dobro napravio select u html-u.

Gledaj da ti je svaki html validan.
http://validator.w3.org/
https://chrome.google.com/webs...ndfbhngibokieehnjhbjkkhbfmhojo
https://addons.mozilla.org/en-US/firefox/addon/html-validator/

Mada i validnost html-a ne garantuje da ce sve u svim browserima raditi kako treba ali ces eliministati banalne greske.

Druga moguca greska je da ti je polje u bazi npr. int a ti hoces da stavis string.
[ Thugzsr @ 03.06.2011. 14:37 ] @
znam da ne prepoznaje, ali kad debug-ujem u zendu, ispise mi da je suspendovan u liniji 28, a to je linija gde se nalazi
Code:

Studijski program<br><select class="select" name="stud_prog">

pa sam zbog toga kontao da treba neki poseban kod tipa case petlje u php-u da uradim za upis u bazu vrednosti iz select menija...
kako se iz selekta upise u bazu? isto kao i iz bilo kog drugog dela forme (text input)?
ako uradim ovo da li ce upisati?
Code:
 $student -> Stud_prog=$_POST['stud_prog']; 


kada validatujem ispise mi 4 warning-sa, i 1 gresku a greska mi je

Line 18, Column 2: no document type declaration; implying "<!DOCTYPE HTML SYSTEM>"

<html>

The checked page did not contain a document type ("DOCTYPE") declaration. The Validator has tried to validate with a fallback DTD, but this is quite likely to be incorrect and will generate a large number of incorrect error messages. It is highly recommended that you insert the proper DOCTYPE declaration in your document -- instructions for doing this are given above -- and it is necessary to have this declaration before the page can be declared to be valid.

[ Br@nkoR @ 03.06.2011. 15:03 ] @
Nisam siguran da li sam razumeo problem.

Da li se izvrši upit? Da li se nešto upiše u bazu?
Odradi echo $query pa vidi da li se njegova vrednost upisuje u $query.
Ukoliko imaš select tag:
Code:
 Studijski program<br><select class"select" name="stud_prog">
   <option ></option>
   <option value="it">Informaciona Tehnologija</option>
     <option value="zp">Zastita od pozara</option>
     <option value="wd">Web Dizajn</option>
     <option value="gd">Graficki Dizajn</option>
     <option value="gi">Graficko inzinjerstvo</option>
     <option value="en">Energetika</option>
     <option value="pf">Primenjena Fotografija</option>
   </select><br>


PHP-u se prosleđuje vrednost value atributa option taga u zavisnosti koji od njih je selektovan, ili ukoliko atribut value nije definisan prosleđuje se vrednost option taga.
[ Thugzsr @ 03.06.2011. 15:48 ] @
ne upisu je u bazu, ne ispisuje query evo kompletnog koda, i baze, pa ako imate vremena vidite u cemu je bug...
Code:

<html>
 <head>
 <title>Registracuja Studenata</title>
 </head>
 <body>
 <form action="index.php" method="POST" name="form">
Broj Index-a<br><input type="text" name="form_brindex" value=""><br>
Password<br><input type="password" name="form_pass" value=""><br>
Ime<br><input type="text" name="form_ime" value=""><br>
Prezime<br><input type="text" name="form_prezime" value=""><br>
Studijski program<br><select  name="stud_prog">
<option ></option>
<option value="it">Informaciona Tehnologija</option>
  <option value="zp">Zastita od pozara</option>
  <option value="wd">Web Dizajn</option>
  <option value="gd">Graficki Dizajn</option>
  <option value="gi">Graficko inzinjerstvo</option>
  <option value="en">Energetika</option>
  <option value="pf">Primenjena Fotografija</option>
</select><br>
Email<br><input type="text" name="form_email" value=""><br>
Godina studija<br><input type="text" name="form_god" value=""><br>
Mentor<br><input type="text" name="form_mentor" value=""><br>
<input type="submit" value="Submit">
 </form>
 <?php 
require_once ('config.php');
require_once ('studenti.php');
$student= new studenti();
$student -> ime=$_POST['form_ime'];
$student -> prezime=$_POST['form_prezime'];
$student -> sifra= $_POST['form_pass'];
$student -> br_index=$_POST['form_brindex'];
$student -> Stud_prog=$_POST['stud_prog'];
$student -> email =$_POST['form_email'];
$student -> god_studija =$_POST['form_god'];
$student -> mentor =$_POST['form_mentor'];
echo "$student";
//  i deo za upis u bazu
$student -> add();
 ?>
 </body>
 </html>


file 2
Code:

<?php 
require_once 'config.php';
class studenti {
          public $id_stud;
          public $ime;
          public $prezime;
          public $br_ind;
          public $stud_prog;
          public $email;
          public $sifra;
          public $mentor;
          public $god_studija;
          
public function add()
         {
            $query = "INSERT INTO studenti (ime, prezime, br_indexa, stud_prog, email, sifra, mentor, god_studija) VALUES 
            ('$student->ime','$student->prezime','$student->br_indexa','$student->Stud_prog',
            '$student->email','$student->sifra','$student->mentor','$student->god_studija')";
            $result = mysql_query($query) or die("Bule je debil ako je greska:" .mysql_error());
             // insert
             echo "$query";
         }   
}
 
?>

file 3
Code:

<?php
session_start();
 
$dbhost = "localhost"; // ovo je server host 
$dbname = "distance_learning"; // ime baze
$dbuser = "root"; // username
$dbpass = ""; // password
 
mysql_connect($dbhost, $dbuser, $dbpass) or die("MySQL Error: " . mysql_error());
mysql_select_db($dbname) or die("MySQL Error: " . mysql_error()); 
exit();

?>

ta tri file-a koristim trenutno...
nesto ne stima tu, ne upisuje se u bazu...sta ne znam!
u form action sam sad stavio index, stojala je # probao sam nesto sa index, u njoj nema nista, samo je trebao ispis da bude, kao i uspesno ste uneli...nista vise!
[ Br@nkoR @ 03.06.2011. 16:11 ] @
Ukloni exit(); iz config.php.

Već sam bio napisao, u upitu
Code:

$query = "INSERT INTO studenti (ime, prezime, br_indexa, stud_prog, email, sifra, mentor, god_studija) VALUES 
               ('$student->ime','$student->prezime','$student->br_indexa','$student->Stud_prog',
               '$student->email','$student->sifra','$student->mentor','$student->god_studija')";

Umesto $student napiši $this

Zatim u
index.php imaš
$student -> br_index=$_POST['form_brindex'];
u klasi studenti
public $br_ind;
a u upitu
$student->br_indexa
[ Thugzsr @ 03.06.2011. 17:25 ] @
Citat:

Umesto $student napiši $this

ne mogu da zamenim, jer posle u registraciji izbaci za svaki red u kom se koristi student gresku...

Notice: Undefined index: form_ime in C:\wamp\www\Admin\registracija.php on line 47
Call Stack
# Time Memory Function Location
1 0.0012 371216 {main}( ) ..\registracija.php:0
[ Br@nkoR @ 03.06.2011. 17:36 ] @
Izgleda da se nismo razumeli
Deo:
Code:
 $query = "INSERT INTO studenti (ime, prezime, br_indexa, stud_prog, email, sifra, mentor, god_studija) VALUES 
                 ('$student->ime','$student->prezime','$student->br_indexa','$student->Stud_prog',
                 '$student->email','$student->sifra','$student->mentor','$student->god_studija')";


Zameni sa:
Code:
$query = "INSERT INTO studenti (ime, prezime, br_indexa, stud_prog, email, sifra, mentor, god_studija) VALUES 
               ('$this->ime','$this->prezime','$this->br_indexa','$this->Stud_prog',
               '$this->email','$this->sifra','$this->mentor','$this->god_studija')";

[ Thugzsr @ 03.06.2011. 18:16 ] @
razumeli smo se, to sam i uradio, ali mi izbacuje gresku koju sam napisao iznad... moram da kreiram objekat klase studenti, u kojoj se nalazi taj upit, i kada upisujem vrednosti iz forme, ispisuje mi greske! tu sto sam napisao iznad.
[ Br@nkoR @ 03.06.2011. 18:40 ] @
Probaj ovako npr:
Code:

<html>
    <head>
    <title>Registracuja Studenata</title>
    </head>
    <body>
    <form action="index.php" method="POST" name="form">
   Broj Index-a<br><input type="text" name="form_brindex" value=""><br>
   Password<br><input type="password" name="form_pass" value=""><br>
   Ime<br><input type="text" name="form_ime" value=""><br>
   Prezime<br><input type="text" name="form_prezime" value=""><br>
   Studijski program<br><select  name="stud_prog">
   <option ></option>
   <option value="it">Informaciona Tehnologija</option>
     <option value="zp">Zastita od pozara</option>
     <option value="wd">Web Dizajn</option>
     <option value="gd">Graficki Dizajn</option>
     <option value="gi">Graficko inzinjerstvo</option>
     <option value="en">Energetika</option>
     <option value="pf">Primenjena Fotografija</option>
   </select><br>
   Email<br><input type="text" name="form_email" value=""><br>
   Godina studija<br><input type="text" name="form_god" value=""><br>
   Mentor<br><input type="text" name="form_mentor" value=""><br>
   <input type="submit" value="Submit">
    </form>
    <?php 
    if ($_SERVER['REQUEST_METHOD'] == 'POST') {
   require_once ('config.php');
   require_once ('studenti.php');
   $student= new studenti();
   $student -> ime=$_POST['form_ime'];
   $student -> prezime=$_POST['form_prezime'];
   $student -> sifra= $_POST['form_pass'];
   $student -> br_index=$_POST['form_brindex'];
   $student -> Stud_prog=$_POST['stud_prog'];
   $student -> email =$_POST['form_email'];
   $student -> god_studija =$_POST['form_god'];
   $student -> mentor =$_POST['form_mentor'];
   //echo "$student";
   //  i deo za upis u bazu
   $student -> add();
   }
    ?>
    </body>
    </html>

Takođe dodaj i one izmene koje sam naveo.
Ili pokušaj da razdvojiš u posebe fajlove html deo i php deo.

[Ovu poruku je menjao Br@nkoR dana 03.06.2011. u 20:08 GMT+1]
[ Thugzsr @ 06.06.2011. 11:20 ] @
da li neko zna zasto dobijam stalno ove dve greske, za svaki deo insert-a?
Notice: Undefined variable: student in C:\wamp\www\layout8\studenti.php on line 19
i
Notice: Trying to get property of non-object in C:\wamp\www\layout8\studenti.php on line 19
linija 19 je
Code:
('$student->ime','$student->prezime','$student->br_index','$student->stud_prog',

tu su vrednosti za upis u bazu, ispitao sam pre ovoga, u $student se nalaze podaci za upis, ali ne upise u bazu zbog onih gresaka!
mozda query nije dobar?
[ dakipro @ 06.06.2011. 11:42 ] @
stavi celu 19 liniju, ili probaj da zatvoris string za query pa tacka pa onda vrednost iz $student
Code:
('" . $student->ime . "','" . $student->prezime . "',
[ VladaSu @ 06.06.2011. 11:44 ] @
ili
Code (php):

('{$student->ime}','{$student->prezime}',
 
[ Br@nkoR @ 06.06.2011. 11:56 ] @
Biću dosadan, ali:

Citat:
a unutar metoda svuda gde piše $student promeni sa $this.


Citat:
Br@nkoR:
Već sam bio napisao, u upitu
Code:

$query = "INSERT INTO studenti (ime, prezime, br_indexa, stud_prog, email, sifra, mentor, god_studija) VALUES 
               ('$student->ime','$student->prezime','$student->br_indexa','$student->Stud_prog',
               '$student->email','$student->sifra','$student->mentor','$student->god_studija')";

Umesto $student napiši $this


Citat:
Br@nkoR: Izgleda da se nismo razumeli
Deo:
Code:
 $query = "INSERT INTO studenti (ime, prezime, br_indexa, stud_prog, email, sifra, mentor, god_studija) VALUES 
                 ('$student->ime','$student->prezime','$student->br_indexa','$student->Stud_prog',
                 '$student->email','$student->sifra','$student->mentor','$student->god_studija')";


Zameni sa:
Code:
$query = "INSERT INTO studenti (ime, prezime, br_indexa, stud_prog, email, sifra, mentor, god_studija) VALUES 
               ('$this->ime','$this->prezime','$this->br_indexa','$this->Stud_prog',
               '$this->email','$this->sifra','$this->mentor','$this->god_studija')";


Pseudo promenljiva $this predstavlja referencu na objekat koji je poziva, odnosno nešto kao link ka metodama i atributima objekta.
[ Thugzsr @ 06.06.2011. 15:46 ] @
proradilo je sa $this! hvala svima na pomoci, i savetima!