Šta je novo?

Update tabele u MYSQL bazi

  • Začetnik teme Začetnik teme esc12
  • Datum pokretanja Datum pokretanja

esc12

Slavan
Učlanjen(a)
28.12.2007
Poruke
4
Poena
301
Pozdrav svima,
Imam bazu firma i tabelu proizvodi i u tabeli polja id, prozvod1, prozvod2, prozvod3, prozvod4, prozvod5.
Sada pisem skript za modifikacuju unetih podataka i tu sam se zbunio, uradio sam ovo:
Kod:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sr" lang="sr"> 
<head><title>update</title></head> 
<body > 
<form name="forma" method=post action="update.php"  > <br />
<fieldset  >
<legend>update</legend>
Redni broj: <input type="text" name="id" ><br /><br />
Proizvod1: <input type="text" name="proizvod1" ><br /><br />
Proizvod2: <input type="text" name="proizvod2" ><br /><br />
Proizvod3: <input type="text" name="proizvod3" ><br /><br />
Proizvod4 <input type="text" name="proizvod4" ><br /><br />
Proizvod5:<input type="text" name="proizvod5" ><br /><br />
<input type="submit" name="se" value="update" > <br /><br />
</fieldset>
</form> 
</body> 
</html>

update.php :
Kod:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sr" lang="sr">
<head>
<title>update</title>
</head>
<body>
<?php
   $server = "localhost";
   $korisnik = "root";
   $lozinka = "";
   $baza = "firma";
   $tabela="proizvodi";
   
   $konekcija = mysql_connect("$server", "$korisnik", "$lozinka") or die(mysql_error());
   mysql_select_db("$baza",$konekcija) or die(mysql_error());
   $sql = sprintf( "UPDATE proizvodi SET proizvod1='$_POST[proizvod1]',proizvod2='$_POST[proizvod2]',proizvod3='$_POST[proizvod3]',
proizvod4='$_POST[proizvod4]',proizvod5='$_POST[proizvod5]' where id='$_POST[id]' ");
   $rez = mysql_query($sql) or die(mysql_error());
        if(mysql_affected_rows()>0)
   echo "Upisano!";
   else
   echo "Nije upisano";
?>
</body>
</html>

I sada, kad popunim sva polja onda je sve ok jer on onda promeni sva polja u tabeli koja su pod tim id, ali kao zelim da promenim samo npr. proizvod1 a ostala polja ostavim prazna onda promeni proizvod1 ali izbrise ostala polja pod tim id (posto nista nisam upisao za njih).
Ima neko ideju kako ovo da uradim, da promeni samo ono polje u koje sam nesto ukucao a da vrednosti za ostala polja ne izbrise(ne upise prazno mesto)
Unapred hvala
 
Najlakši način - učitaj vrednosti svih polja na prvoj stranici gde će korisnik moći da ih modifikuje, a potom ih sve prebaci na update.php preko post vrednosti proizvod1, 2, 3... Veoma je logično za korisnika da ima takav interfejs, a menjaćeš samo prvu stranicu. 😉

Javi da li je pomoglo.
 
ja obicno to radim preko jedne stranice koja u slucaju da ima submit updejtuje bazu, a inace samo iscita...

Alternativno proveris da li je neki proizvod prazan, pa pravis custom upit, koji ces izgraditi od samo onih elemenata koji su razliciti od nule. Mislim da je bolja i laksa ideja da ucitas vec stare vrednosti... (kao u postu gore)
 
Poslednja izmena:
Najlakši način - učitaj vrednosti svih polja na prvoj stranici gde će korisnik moći da ih modifikuje, a potom ih sve prebaci na update.php preko post vrednosti proizvod1, 2, 3... Veoma je logično za korisnika da ima takav interfejs, a menjaćeš samo prvu stranicu. 😉

Javi da li je pomoglo.

Pomoglo je toliko sto sada znam da je ipak moguce uradi na ovaj nacin koji sam zamislio 😀 A da li moze neki praktican primer posto sam pocenik i nije mi bas najjasnije kako da pocnem
 
Jedina izmena ti je u ovom fajlu:

PHP:
<?php
// Povezivanje na bazu stavis pre ovoga
$SQL_upit = mysql_query("SELECT * FROM `proizvodi` WHERE `id` = '$_POST[id]'");
$SQL_rezultat = mysql_fetch_array($SQL_upit);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sr" lang="sr"> 
<head><title>update</title></head> 
<body > 
<form name="forma" method=post action="update.php"  > <br />
<fieldset  >
<legend>update</legend>
Redni broj: <input name="id" type="text" value="<?=$SQL_rezultat['id']; ?>" >
<br /><br />
Proizvod1: <input type="text" name="proizvod1" value="<?=$SQL_rezultat['proizvod1']; ?>"><br /><br />
Proizvod2: <input type="text" name="proizvod2" value="<?=$SQL_rezultat['proizvod2']; ?>"><br /><br />
Proizvod3: <input type="text" name="proizvod3" value="<?=$SQL_rezultat['proizvod3']; ?>"><br /><br />
Proizvod4 <input type="text" name="proizvod4" value="<?=$SQL_rezultat['proizvod4']; ?>"><br /><br />
Proizvod5:<input type="text" name="proizvod5" value="<?=$SQL_rezultat['proizvod5']; ?>"><br /><br />
<input type="submit" name="se" value="update"" > <br /><br />
</fieldset>
</form> 
</body> 
</html>

On učita trenutne vrednosti iz baze i prikaže ih u poljima za izmenu. Sva polja će se izmeniti na stranici update.php ćak i ako su istih vrednosti, ali će izgledati da se menjaju samo ona koja treba.
 
Uradio sam sve ovako i sad mi u polju za izmenu ne ispise vrednost nego : <?=$SQL_rezultat['id']; ?>
 
Najcesce se pred upis u bazu uvek proverava sta si dobio u POST varijablama, narucito ako su to forme sa sajta koji imaju prostup svi posetioci. Proveru upisa u formu se moze raditi i sa javascriptom, ali on se moze iskljuciti i kao takav je beskoristan.
Moze da se uradi na mnogo nacina, ali prema tvom primeru mislim da je ovako najbolje.
Provera da li je prazna POST varijabla i onda upis.

$sql = sprintf( "UPDATE proizvodi SET %s, %s , %s, %s , %s WHERE id=%s",
(empty($_POST['proizvod1]'])) ? 'proizvod1=proizvod1' : 'proizvod1='.$_POST['proizvod1]'],
...
(empty($_POST['proizvod5]'])) ? 'proizvod5=proizvod5' : 'proizvod1='.$_POST['proizvod5]'],
$_POST[id]);

I jos posle queryja ne bi bilo lose dodati redirekciju, ako se PHP izvrsava pre ikakvog HTML-a.
header('Location: na_istu_stranu.php');

Da naprimer sa refresh tasterom u browseru ne uradis ponovni update ili slicne probleme sa back.
poz
 
Poslednja izmena:
Najcesce se pred upis u bazu uvek proverava sta si dobio u POST varijablama, narucito ako su to forme sa sajta koji imaju prostup svi posetioci. Proveru upisa u formu se moze raditi i sa javascriptom, ali on se moze iskljuciti i kao takav je beskoristan.
Moze da se uradi na mnogo nacina, ali prema tvom primeru mislim da je ovako najbolje.
Provera da li je prazna POST varijabla i onda upis.

$sql = sprintf( "UPDATE proizvodi SET %s, %s , %s, %s , %s WHERE id=%s",
(empty($_POST['proizvod1]'])) ? 'proizvod1=proizvod1' : 'proizvod1='.$_POST['proizvod1]'],
...
(empty($_POST['proizvod5]'])) ? 'proizvod5=proizvod5' : 'proizvod1='.$_POST['proizvod5]'],
$_POST[id]);

I jos posle queryja ne bi bilo lose dodati redirekciju, ako se PHP izvrsava pre ikakvog HTML-a.
header('Location: na_istu_stranu.php');

Da naprimer sa refresh tasterom u browseru ne uradis ponovni update ili slicne probleme sa back.
poz

Probao sam ovako, ne radi. Ima neko jednostavno resenje za moj problem? 😀
 
Probao sam ovako, ne radi. Ima neko jednostavno resenje za moj problem? 😀
Gde ces jednostavnije? 😀
Sto se tice onog <?=$SQL_rezultat['id']; ?>
proveri u php.ini da li je ukljucena podrska za skracene php tagove:
short_open_tag = On
sto se sprintf tice %s mora da bude pod apostrofima ( '%s' ) zato sto se radi o konverziji u string:
$sql = sprintf( "UPDATE proizvodi SET '%s', '%s' , '%s', '%s' , '%s' WHERE id='%s' ",
(empty($_POST['proizvod1]'])) ? 'proizvod1=proizvod1' : 'proizvod1='.$_POST['proizvod1]'],
...
(empty($_POST['proizvod5]'])) ? 'proizvod5=proizvod5' : 'proizvod1='.$_POST['proizvod5]'],
$_POST[id]);

mada posto je id obicno integer umesto %s treba koristiti %d, ali je pozeljno koristiti i nesto tipa mysql_escape_string() ili mysql_real_escape_string() ili neku ozbiljniju proveru pre nego sto se izvrsi query, ali da ne komplikujemo previse :d
 
Poslednja izmena:
Gde ces jednostavnije? 😀
Sto se tice onog <?=$SQL_rezultat['id']; ?>
proveri u php.ini da li je ukljucena podrska za skracene php tagove:
short_open_tag = On
sto se sprintf tice %s mora da bude pod apostrofima ( '%s' ) zato sto se radi o konverziji u string:
$sql = sprintf( "UPDATE proizvodi SET '%s', '%s' , '%s', '%s' , '%s' WHERE id='%s' ",
(empty($_POST['proizvod1]'])) ? 'proizvod1=proizvod1' : 'proizvod1='.$_POST['proizvod1]'],
...
(empty($_POST['proizvod5]'])) ? 'proizvod5=proizvod5' : 'proizvod1='.$_POST['proizvod5]'],
$_POST[id]);

mada posto je id obicno integer umesto %s treba koristiti %d, ali je pozeljno koristiti i nesto tipa mysql_escape_string() ili mysql_real_escape_string() ili neku ozbiljniju proveru pre nego sto se izvrsi query, ali da ne komplikujemo previse :d
Slazem se da je to otprilike najjednostavnije, i ne vidim razlog da ti kod ne radi posle ovde navedenih intervencija. Ako nema gresaka u sintaksi, i ako PHP ne izbaci gresku to bi trebalo da radi. Mada sam ja pogresio malo, ali si verovatno uvideo gresku kad si ih razmnozavao(broj, i viska zagrade):
(empty($_POST['proizvod5]'])) ? 'proizvod5=proizvod5' : 'proizvod5='.$_POST['proizvod5]'],
Kao sto sam i ranije rekao prema datom primeru su ova resenja medju najednostavnijima. Za neko krace u kodu (ne kazem jednostavnije) resenje, pomoglo bi koriscenje nizova, mada bi onda verovatno trebalo menjati i sve ostalo.
Jos nesto empty($varijabla) vraca FALSE ako je vrednost $varijable 0 (nula), tj. nece se izvrsi update. Ako nula ordinira kao vrednost za update mozda umesto empty koristiti npr: ($_POST['proizvod5']=='').
poz
 
Poslednja izmena:
Nazad
Vrh Dno