[ Ivan Golubović @ 18.09.2002. 00:31 ] @
Code:

$query = mysql_query("update tabela set prikazi=$prikaz where id=$rb");


E sada ovde mi se javlja problem i nece da mi promeni vrednost u tabeli u koloni prikazi i da zameni sa vrednošću promenljive prikaz.
kaze:

Unknown column 'da' in 'field list'


???
[ vsego @ 18.09.2002. 00:53 ] @
$query = mysql_query("update tabela set prikazi='$prikaz' where id='$rb'");

Zaboravio si dodatne navodnike. Onda se desi (recimo za $prikazi="PHP rulez"):
update tabela set prikazi=PHP rulez where id=...
pa "rulez" ispadne (iz perspektive MySQLa) zasebna rijec.

Neki DBEovi su osjetljivi na navodnike (npr. kod brojeva), ali kod MySQLa ih mozes uvijek koristiti (zato sam dodao i kod id-a).

Sretno!
[ maliX @ 20.09.2002. 11:37 ] @
samo bi se nadovezao na vsego-ov odgovor: pri unosu koristi addslashes() funkciju, a pri ispisu na stranici ih izbaci stripslashes() funkcijom

Code:

/ / unos, izmena
if ($submit) {
$prikaz = addslashes($prikaz);
...
$izmeni = mysql_query(UPDATE tablename SET prikaz='$prikaz' WHERE id='$rb');
...


Code:

/ / prikaz na stranici
...
$prikaz = stripslashes($prikaz);
...


naravno, ukoliko vrednost prikaza moze da sadrzi apostrofe/navodnike
[ Dejan Topalovic @ 20.09.2002. 13:14 ] @
Ja bih se nadovezao dalje:

Tvoja nadopuna bi vjerovatno radila u vecini slucajeva, ali u slucajevima kad imas u unesenoj vrijednosti npr. " \\ Rock 'n' Roll slashes \\ " ( primjera radi :) ), sta bi se desilo u slucajevima kad je magic_quotes_gpc ukljucen, a sta kad nije? I sta bi bilo da koristis dodatno addslashes pri upisu i stripslashes pri ispisu iz baze?
Idemo redom...

Ako je u php.ini ukljucen magic_quotes_gpc = On , onda ce taj dopunski addslashes dodati slasheve na vec automatski dodane slasheve, pa ce ti onda npr. izgledati ovako:
Imas polje u koje se unosi neki tekst, kojeg onda proslijedjujesh dalje skripti klikom na submit. Recimo da taj uneseni tekst ima vrijednost:
\\ Rock 'n' Roll slashes \\

Kad submitash tu vrijednost skripti, te pod uslovom da je ukljuchen magic_quotes_gpc, automatski ce se dodati slashevi i imaces onda vrijednost:
\\\\ Rock \'n\' Roll slashes \\\\

Ako ti sad uradish jos jedan dodatni potez sa addslashes funkcijom, imaces:
\\\\\\\\ Rock \\\'n\\\' Roll slashes \\\\\\\\

Kad sve to stavis u bazu, pa potom izvadis iz baze, uradis stripslashes i ispises, trebalo bi da radi.
Medjutim, sta ako magic_quotes_gpc nije ukljucen? U novim verzijama PHP-a, ta opcija je po defaultu iskljucena. Sta ce se desiti onda?

Kad na isti nacin ubacis u bazu tu vrijednost, na kraju ces kao ispis imati:
\ Rock 'n' Roll slashes \

Zashto?
+ 1. ako je magic_quotes_gpc ukljucen, automatski se dodaju slashevi
+ 2. ti dodajesh dopunske funkcijom addslashes
- 3. kad vadis iz baze, automatski se uklanjaju escape slashevi
- 4. sa stripslashes skidash slasheve dodane funkcijom addslashes

Medjutim, ako je magic:quotes_gpc iskljucen, kao sto jeste u vecini slucajeva, onda imas:
-
+
-
-

Dakle, nesto ne valja, imas manjka slashovanja :)

Mnogi koriste slijedecu metodu da bi otkrili da li je ukljucen magic_quotes_gpc i na osnovu toga rade daljnje operacije:

Code:

  if (get_magic_quotes_gpc()) {
  // Overrides GPC variables
  for (reset($HTTP_GET_VARS); list($k, $v) = each($HTTP_GET_VARS); )
  $$k = $HTTP_GET_VARS[$k] = stripslashes($v);
  for (reset($HTTP_POST_VARS); list($k, $v) = each($HTTP_POST_VARS); )
  $$k = $HTTP_POST_VARS[$k] = stripslashes($v);
  for (reset($HTTP_COOKIE_VARS); list($k, $v) = each($HTTP_COOKIE_VARS); )
  $$k = $HTTP_COOKIE_VARS[$k] = stripslashes($v);
  ini_set("magic_quotes_gpc",0);
  }


Ako ovo ubacis na pocetak skripte, sve bi trebalo da radi.

Btw. pogledaj i funkciju mysql_escape_string(), koja je slicna funkciji addslashes(), samo sto ima neke dodatne karaktere koje "escapea".
Nadam se da ce ovo mnogima koristiti, iako nije bash ontopic.
Moderatori bi mogli ovo staviti u FAQ, ako smatraju da je korisno.
[ -zombie- @ 21.09.2002. 02:10 ] @
bravo! ovo obavezno u faq!

i ja sam jedared lupao glavu zbog ovakvog problema.

u sustini nije nista strasno, ali moze da prodje neprimeceno prilikom instalacije skripte na server, i da se javi nekoliko dana (nedelja) kasnije, kada je malo teze provaliti sta je uzrok problema...
[ Extremko @ 10.10.2002. 07:58 ] @
Kad smo vec kod toga... gde je taj efejkju?
Hocem da citam
[ Dejan Topalovic @ 10.10.2002. 13:05 ] @
FAQ vezan za PHP na ovom forumu, mozes naci na adresi:

http://www.elitesecurity.org/tema/6994