[ Frane Marinković @ 27.12.2007. 18:58 ] @
Radim jedan malo poveci projekt i gotov sam, sad cekam hosting, i radim neke detalje i evo dođem do tu i zapnem, ne znam zašto, ali već koristim slicnu funkciju na drugim pageovima i radi bez problema....

evo tog spornog dijela


znaci u bazi imam jedan column "out" koji broji izlazne klikove za pojedine stvari i njega treba kad se pokrene ovaj script da se uveća za +1

Code:
<?php
include("connect.php"); 
    $koji_id = addslashes($_GET['id']); // id znaci getam ga ?id=2 npr.
    
    function out($id) //count the vote and save ip of last voter to avoid cheating
{
        $rezultat= mysql_query("select * from toplist where id='$id'"); //
    while($uzmi = mysql_fetch_array($rezultat)){                               // to je dodano jer sam mislio da
        $do_sada = $uzmi['out'];                                                  //  out= out+1 nece da radi, ali eto
        $nova=$do_sada++;                                                        //                    ne radi ni ovako
        }
        $update="UPDATE linkovi SET out= '$nova' WHERE id= '$id'";
    mysql_query($update)
    or die('brojac - greska: '.mysql_errno().', '.mysql_error());
}

        out($koji_id);  //pozivam ispod u if-u ali nije bitno sad
        

?>


na update sam stavljao i .... SET out= out+1 ali opet grešku daje istu, pa sam onda pokušao s vađenjem pa onda $do_sada++;
Code:

1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'out= '1' WHERE id= '2'' at line 1
[ dakipro @ 27.12.2007. 20:03 ] @
Mislim da bi ovo proradelo

Code:
SET `out`= `out`+1

jer je OUT kljucna rec (nisam siguran tacno od koje verzije)
http://dev.mysql.com/doc/refman/5.0/en/reserved-words.html
[ Frane Marinković @ 27.12.2007. 21:59 ] @
idem probat, ali zašto onda u drugoj funkciji isto u kojoj updatea bazu samo drugi column 'in' sve radi super na principu in= in+1 ...

evo sa 'out'='$do_sada'
Code:
error: 1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''out'= '1' WHERE id= '2'' at line 1


i evo sa 'out'='out'+1
Code:
error: 1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''out'= 'out'+1 WHERE id= '2'' at line 1



... nemam pojma koji k**** se događa
[ dakipro @ 27.12.2007. 22:21 ] @
Ne, ne citas pazljivo... I nema potrebe da se tako izrazavas jer ovaj forum prate i dame, tako da nije prikladno bar prema njima
Nisam napisao ' kao apostrof, nego ` (backticks, znak koje je levo od jedinice na tastaturi)
Da si procitao prvih par recenica na linku koji sam ti ostavio to bi i sam ukapirao.

Btw. i IN je takodje mysql kljucna rec koju bi trebalo izbegavati u davanju imena tabelama i poljima u mysql-u, sto se opet spominje na istom linku koji sam ti dao. (bar pise da trebaju "special treatment for use as identifiers such as table and column names").
[ Frane Marinković @ 27.12.2007. 22:52 ] @
Code:

error: 1064, You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '¸out¸= ¸out¸+1 WHERE id= '2'' at line 1



opet isto
[ Nemanja Avramović @ 28.12.2007. 16:25 ] @
Koliko ja vidim, ti koristiš ¸ a ne ` znak u query-ju...

Takođe, pre bih rekao da je ovo pitanje za SQL forum a ne za PHP...
[ Frane Marinković @ 28.12.2007. 16:32 ] @
okok, riješio, meni je inaće ` AltGr + 7...

thx na pomoći
[ 1r0nM4n @ 28.12.2007. 19:05 ] @
Citat:
AltGr + 7

Wtf?!
Taj znak ti je levo od jedinice (ispod esc)..

p0z
[ BigFoot @ 01.01.2008. 20:15 ] @
Citat:
Frane Marinković:
Code:

//...
$do_sada = $uzmi['out'];
$nova=$do_sada++;                 // GREŠKA!!!
}
$update="UPDATE linkovi SET out= '$nova' WHERE id= '$id'";


Koristio si postinkrement operator ++, dakle prvo je izvšena dodela $nova=$do_sada, pa tek onda uvećano $do_sada++. Uradi prvo inkrementiranje, pa dodelu i biće ok.
Mada, čudna ti je ovo konstrukcija. U komentaru stoji "count the vote and save ip of last voter to avoid cheating". Šta je "last voter"? Upit koji koristiš nema ORDER klauzulu. Osim toga, vrtiš prazne komande u petlji da bi uzeo vrednost poslednjeg sloga, ma šta to značilo, umesto da to uradiš u samom upitu, a da umesto petlje imaš samo jedan, traženi rezultat. Potencijalno, upit može vratiti mnogo slogova, pa ćeš usporiti odziv. Upit može biti npr.
Code:
$rezultat= mysql_query("select * from toplist where TopListID = (select MAX(TopListID) from toplist where id='$id')");

Polje TopListID je auto_increment ID polje koje i inače treba da sadrži svaka tabela, što je dobra praksa.
[ Frane Marinković @ 03.01.2008. 19:03 ] @
ma to je ostalo od varijable stare koju sam uzimao, i ne znam kako je vama ali evo šta meni izađe kad stitnem "Tildo" ili ti ga botun ispod Esc
Code:
¸


evo Shift + taj gumb
Code:
¨


i evo AltGr + 7
Code:
`



možda su srpske tipkovnice drugaćije nego ove naše :S

nebih znao
[ Miroslav Ćurčić @ 04.01.2008. 09:07 ] @
Backtick (http://en.wikipedia.org/wiki/Backtick)
se nalazi ispod Esc na ASCII tastaturama,
ili na AltGr+7 na SR/HR (koje vode poreklo od slovenačke koja je opet napravljena od nemačke tastature).

I, jel radi sa: `out`=`out`+1 ?
[ Frane Marinković @ 04.01.2008. 13:07 ] @
Citat:
okok, riješio, meni je inaće ` AltGr + 7...

thx na pomoći


to sam napisao već prije par dana
[ Nemanja Avramović @ 04.01.2008. 14:55 ] @
Ljudi, tema ove rasprave nije gde se nalazi backtick već update MySQL baze, pa vas molim da se držite teme.
[ BigFoot @ 05.01.2008. 22:33 ] @
Nema veze ni sa update-om MySQL baze, nego sa elementarnim programiranjem. U navedenom primeru, konstrukcija:
Code:

$do_sada = $uzmi['out'];
$nova=$do_sada++;

ne čuva za jedan uvećanu, već originalnu vrednost $uzmi['out'] i tu je greška. Nema veze sa srpsko/hrvatskim "tipkovnicama"
[ Zmaj @ 06.01.2008. 00:51 ] @
problem sa tasturom/tipkovnicom je sto se ne koristis engleski kodni raspored [EN], nego srpski, tj. hrvatski i slicno.

druga stvar je sto se pise los i neoptimalan kod pa ovo

Code:

$do_sada = $uzmi['out'];
$nova=$do_sada++;


moze da se napise

Code:

$nova = $uzmi['out'] + 1;


kao sto vidis nema $do_sada, inace vise volim da pisem nazive promenjljivih i funkcija na engleskom jer nema padeza pa je samim tim i manja mogucnost greske. isto vazi i za nazive tabela i polja u bazama