[ alfa-pro @ 25.04.2010. 23:23 ] @
Pre par meseci sam uradio ovu scriptu za jedan sajt i sada sam hteo da je iskoristim na nekom drugom i nece nesto da radi.

Problem je to sto kada unesem vrednost u polje NASLOV u formi i text sadrzaj u textareu on u bazu kao naslov upisuje sadrzaj?? Nezam zasto proverio sam vise puta i nemogu da nadjem gresku...

Baza se sastoji od nekoliko polja u ovom sucaju sta ja koristim tabelu sadrzaj i polja ID, SADRZAJ, TEXT.
Imam na sajtu polje za naslov
<input type="text" name="naslov"> i <textarea name="text">
Kada na primer unesem u polje naslov " NASLOV1 " i u polje za text "TEKST1 " i potvrdim podaci se posalju u bazu ali vrednos textarea se ubacuje u obe kolone???
Neznam zasto jesam nesto pogresio proverio sam SQL UPDATE svi podaci su dobri...
Umesto da iz polje naslov smesti u bazu u polje naslov i tako za text a ne text da smesta i u naslov??

Ajde pogledajte ovaj kod mozda nadjete gresku....

Code (php):
 <?php

      if (isset($_GET['id']) && is_numeric($_GET['id'])) $id = $_GET['id'];
      elseif(isset($_POST['id']) && is_numeric($_POST['id'])) $id = $_POST['id'];
      else die("greska");

      if (isset($_POST['submitted'])) {

            errors = array();

            if (empty($_POST['naslov'])) $errors[] = 'Zaboravili Ste Da Unesete Naslov Teksta.';
            else $naslov = $_POST['tekst'];

            if (empty($_POST['tekst'])) $errors[] = 'Zaboravili Ste Da Unesete Tekst Poruke';
            else $tekst = $_POST['tekst'];

            if (empty($errors)) {
                  $query = "UPDATE sadrzaj SET naslov='$naslov', tekst='$tekst' WHERE id=$id";
                  if($result = mysql_query($query)) echo 'Changes have been saved.';
                  else echo 'greska';
            }
            else foreach ($errors as $msg) echo " - $msg<br/>\n";

      }
      else {
            $query = "SELECT naslov, tekst, id FROM sadrzaj WHERE id=$id";
            ... prikaži tekst ...
      }
?>



[Ovu poruku je menjao Goran Rakić dana 26.04.2010. u 00:38 GMT+1]

[Ovu poruku je menjao Goran Rakić dana 26.04.2010. u 00:42 GMT+1]
[ Goran Rakić @ 25.04.2010. 23:31 ] @
Code (php):

      $naslov = $_POST['tekst'];
 


treba $_POST['naslov']. Duguješ mi piće.

Nauči da testiraš kod. Običan var_dump($_POST) bi ti za početak rekao da su podaci uspešno stigli, a onda var_dump($naslov) bi ti rekao da ova promenljiva nije dobro inicijalizovana.

Nauči da lepo formatiraš (uvlačiš) kod i da na forum objaviš samo odgovarajući deo koda tako što izbaciš sve što nije relevantno (HTML, if-ove koji nemaju veze sa problemom itd.). Potrudi se da uložiš vreme u oblikovanje poruke i opisivanje problema. Sažeto, jasno i poštujući pravopis.

Vodi računa da u ovom kodu nisi koristio nikakvu zaštitu od SQL ubrizgavanja. Vodi računa da nisi koristio nikakvu zaštitu od ubrizgavanja neželjenog JavaScript i HTML koda. Ako stranu koristiš samo ti za postavljanje vesti, to je ok, ali ako je skripta šire dostupna, to može biti opasan problem.




[Ovu poruku je menjao Goran Rakić dana 26.04.2010. u 00:44 GMT+1]
[ alfa-pro @ 25.04.2010. 23:50 ] @
Vidi stvarno jeste ja sam sat vremena znaci gledao trazio gresku i nije mi to palo za oko.. Dugujem ti 5 pica bro...
Ajde zaradi i veceru :D

Daj neki link ili kljucne reci za zastitu pri upisu u bazi to za javascript sto si pominjao...
Ovo koristim u admin panelu kada kliknem na neki naslov vesti i otvara mi edit stranu..
[ Goran Rakić @ 26.04.2010. 00:00 ] @
Ako to koristiš samo ti, nema problema (nećeš ti sam hakovati svoj sajt).

Ako koristiš isti kod da mogu i posetioci da unose tekstove, komentare,... onda si ranjiv.

http://phpsec.org/projects/guide/2.html#2.3
[ alfa-pro @ 26.04.2010. 00:07 ] @
Ne ovo samo ja koristim ali verujem da cemi ovo dobro doci da znam za u buduce kada budem radio nesto gde ce korisnici sami postavljati... Ok hvala ti puno pa da castim kad se vidimo