[ dozetfkvsv @ 03.09.2009. 11:37 ] @
pomagajte ljudi,

kupio sam neki cms koji solidni radi ali ima problem

primetio sam da googleboot kad prodje straicama sajta oceni fotografiju ili tekst sa 0
iako je u ponudi ocenjivanje od 1 do 5

http://fkvsv.org/catalog/house.html

ne znam kako to resiti nema smisla da blokiram IP adrese googla, mozda da se samo ubaci neki kod da sistem ne zabelezi ocenu 0

nasa sam jedan fajl ne znam da li je dovoljno samo njega editovati:

vote_add.php ima sledeci kod:
Code:

<?include("../admin/function/db.php");?>
<?include("JsHttpRequest.php");?>
<?
$JsHttpRequest =& new JsHttpRequest($mtg);


$sql="select ip,id from voteitems where ip='".result($_SERVER["REMOTE_ADDR"])."' and id=".(int)$_GET["id_parent"];
$ds->open($sql);
if($ds->eof)
{
$sql="insert into voteitems (id,ip,vote) values (".(int)$_GET["id_parent"].",'".result($_SERVER["REMOTE_ADDR"])."',".(int)$_REQUEST["vote"].")";
$ds->open($sql);
}





$item_rating=0.00;
$item_count=0;
$sql="select sum(vote) as sum_vote,count(ip) as count_user from voteitems where id=".(int)$_GET["id_parent"];
$dr->open($sql);
if(!$dr->eof)
{
if($dr->row["count_user"]!=0)
{

$item_rating=$dr->row["sum_vote"]/$dr->row["count_user"];
$item_count=$dr->row["count_user"];

$sql="update photos set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);

$sql="update videos set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);

$sql="update audio set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);

$sql="update vector set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);



}
}




$rating_text="<table border='0' cellpadding='1' cellspacing='0'><tr>";
for($j=1;$j<6;$j++)
{
$tt="2";
if($j<=$item_rating){$tt="1";}
if($j>$item_rating and $j-$item_rating>0.25 and $j-$item_rating<0.75){$tt="3";}
$rating_text.="<td><img src='".site_root."/".$site_template_url."images/rating".$tt.".gif' width='11' height='11' border='0'></td>";
}
$rating_text.="</tr></table>";

echo($rating_text);
?>


izmenio Nemanja: Kôd stavljajte u CODE tagove!

[Ovu poruku je menjao Nemanja Avramović dana 03.09.2009. u 14:34 GMT+1]
[ kazil @ 03.09.2009. 11:49 ] @
Ovaj deo

Citat:
dozetfkvsv:
Code:
$sql="update photos set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);

$sql="update videos set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);

$sql="update audio set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);

$sql="update vector set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);



Promeni u:

Code:

if($item_rating != 0){
$sql="update photos set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);

$sql="update videos set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);

$sql="update audio set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);

$sql="update vector set rating=".$item_rating." where id_parent=".(int)$_GET["id_parent"];
$db->execute($sql);
}


To bi trebalo biti to. Mislim.
[ djoka_l @ 03.09.2009. 12:09 ] @
Možeš da izmeniš doVote JavaScript funkciju da reaguje na value=0 tako da ne registruje taj glas.
[ kazil @ 03.09.2009. 12:49 ] @
Da, ali googlebot ne poziva JS funkciju, nego direkt ucitava stranicu koja se poziva preko JS funkcije.
[ dozetfkvsv @ 03.09.2009. 13:10 ] @
hvala momci na odvojenom vremenu i trudu.
uneo sam kazilovu izmenu ali i dalje prolazi ocenjivanje sa nulom
[ bojan_bozovic @ 03.09.2009. 13:14 ] @
Ne koristi GET nego POST metod i sve ce biti u redu.
[ Tudfa @ 03.09.2009. 13:15 ] @
Ostavi to sto ti je Kazil rekao, jer je ta provera na serverskoj strani uvek dobrodosla...Jedino mislim da se taj deo odnosi na update ocene, a da je za insert ocene u voteitems tabelu zaduzen ovaj deo... Nisam siguran proveri ...
Code:

$sql="select ip,id from voteitems where ip='".result($_SERVER["REMOTE_ADDR"])."' and id=".(int)$_GET["id_parent"];
$ds->open($sql);
if($ds->eof)
{
$sql="insert into voteitems (id,ip,vote) values (".(int)$_GET["id_parent"].",'".result($_SERVER["REMOTE_ADDR"])."',".(int)$_REQUEST["vote"].")";
$ds->open($sql);
}


Proveris ovo (int)$_REQUEST["vote"] da li je ispravno itd ...

[ dozetfkvsv @ 03.09.2009. 18:45 ] @
promenio sam get u post ali se nastavilo ocenjivanje nulom

Tudfa da li ti imas resenje, ne znam kako da proverim ovo sto si mi naveo?
[ bojan_bozovic @ 03.09.2009. 18:52 ] @
Probaj

Code:

if(($ds->eof)&&((int)$_REQUEST["vote"]!=0))
{
$sql="insert into voteitems (id,ip,vote) values (".(int)$_GET["id_parent"].",'".result($_SERVER["REMOTE_ADDR"])."',".(int)$_REQUEST["vote"].")";
$ds->open($sql);
}


[ mitke013 @ 05.09.2009. 15:29 ] @
Au.... Koliko vidim, sajt ti je rizican za medalju; SQL injection ovde moze da prodje kao od sale!

Vidi ovo:
insert into voteitems (id,ip,vote) values (".(int)$_GET["id_parent"].",'".result($_SERVER["REMOTE_ADDR"])."',".(int)$_REQUEST["vote"].")";

Raditi bilo kakav sql bez mysql_real_escape_string ili neke prepare funkcije je ekstra rizicno; cak nije ni u pitanju da li ce vec kada ce neki bot na internetu da ti uradi drop baze ili izvuce mailove korisnika (ako ih imas) pa da ih spamuje reklamama.

Mozda i gresim jer nema sorsa za $ds->open($sql); metodu, ali 99% da sam u pravu.

[ bojan_bozovic @ 05.09.2009. 16:28 ] @
Ne mozes biti siguran dok ne vidis open metodu! Mozda bas tamo ima
Code:

$var=mysql_real_escape_string($var);

Cak stavise najbolje je bas tamo da se stavi, jer je to i smisao klase, da se metodi koriste bez poznavanja low-level organizacije klase.
[ dozetfkvsv @ 07.09.2009. 14:35 ] @
Hvala svima, bojanov savet je resio problem,
sto se ostalog o cemu se prepisujete to su za mene su to spanska sela.




tu sam zipova dva fajla koja se pominju, mozda se u njima nalazi odgovor na vase pitanje.
zanima me da li tu ima toga o cemu govorite i kako ocenjujete kod ovog programera, da li mu je verovati



[Ovu poruku je menjao dozetfkvsv dana 07.09.2009. u 16:42 GMT+1]
[ mitke013 @ 07.09.2009. 21:54 ] @
Pogledaj ovaj deo:
$ds->open($sql) ;

Iznad ove linije nadji nesto poput
$ds = new ime_klase() ;

Ako se ovo ne nalazi u fajlu koji si naveo, pretresi sve fajlove koji se nalaze u include komandama (kao na primer "/admin/function/db.php" )

Kad nadjes tu liniju, pogledaj kako se klasa zove, tj. sta je vrednost 'ime_klase()' sto sam gore napisao. Na primer, neka stoji

$ds = new Database() ;

Ako se klasa zove Database, onda opet pretreses fajlove i nadjes nesto poput ovog:

Code:

<?php
  class  Database {

    public function open($sql)
     {
      //// neki kod
     }

  }



Vrlo verovatno je da postoji neki direktorijum 'class' ili 'classes' pa tamo pogledaj prvo. Verovatno ce i sam fajl da se zove isto ili slicno kao ime klase.

Prebaci nam ovde sadrzaj funkcije 'open()' da bi mogli da ti kazemo mozes li da verujes programu.