Autor Zpráva
quest
Profil
Dobrý den, zkoušel jsem si udělat jednoduchou Prohlížečovou hru a při vylepšování statů jsem narazil na problém.
Pokud uživatel klikne na tlačítko: zkontroluje se jestli má peníze a jestli jo tak to odešle požadavek na další soubor..vylepsi.php?sila
a ten odečte zlato a přidá sílu a uloží do db.Ale jde mi to dělat jen jednou a pak musím stránku aktualizovat ale to nechci.A já nevím jak to změnit aby se stránka nemusela aktualizovat..
pokus.php:
.......Připojení do DB a načtení proměnných.....
.....JS...
....JS proměnné se rovnají PHP proměnným.....
  function vylepsisilu()
   {
    if (zlato>=(sila*sila*sila))
    {
    zlato -=(sila*sila*sila);
    sila +=1;
    csily =(sila*sila*sila);
    window.document.getElementById("vysledeksily").innerHTML=sila;
    window.document.getElementById("c1").innerHTML=csily;
    window.document.getElementById("gold").innerHTML=yourgold;
    var temp = new Image();
    temp.src = "vylepsi.php?sila";
    }
    else
    {
    document.getElementById("c1").innerHTML=nemas;
    }
   }

vylepsi.php:
.......Připojení do DB a načtení proměnných.....
.......A tento kód funguje ale jen jednou (nelze použít vícekrát za sebou)....
if (isset($_GET['sila'])) {
 if ($zlato>=($sila*$sila*$sila))
    {
    $zlato -=($sila*$sila*$sila);
    $sila++;
    $dotaz = mysql_query("UPDATE uzivatele SET sila='$sila', zlato='$zlato' WHERE id='".$_SESSION['id']."'");
    }
}

(Jsou to jen kousky celých souborů)

Dá se to tedy nějak udělat?Pokud ano tak jak?
Děkuji za odpověď.

David
Anonymní
Profil *
Jediné co mě v tuto chvíli napadá je to vyřešit pomocí Ajaxu.
quest
Profil
Nemohli by jste mi s tím pomoct nějak konkrétbněji..něco jsem zkoušel ale nefunguje to.
_es
Profil
quest:
něco jsem zkoušel
Čo?

nefunguje to.
Ako sa tá „nefunkčnosť“ prejavuje?
quest
Profil
V AJAXu ani v JQUERY se nevyznám a tak jsem zkusil aspoň tohle:

pokus.php:
...Připojení do DB...
<script type="text/javascript">
  function vylepsisilu()
   {
    if (zlato>=(sila*sila*sila))
    {
    zlato -=(sila*sila*sila);
    sila +=1;
    csily =(sila*sila*sila);
    window.document.getElementById("vysledeksily").innerHTML=sila;
    window.document.getElementById("c1").innerHTML=csily;
    window.document.getElementById("gold").innerHTML=yourgold;
    $.get("jquery.php", { sila: 'sila', zlato: 'zlato' } );
    }
    else
    {
    document.getElementById("c1").innerHTML=nemas;
    }
   }
</script>

jquery.php:
...Připojení do DB......
<?php
..Připojení do DB....
$sila= $_GET['sila'];
$zlato= $_GET['zlato'];

 if ($zlato>=($sila*$sila*$sila))
    {
    $zlato -=($sila*$sila*$sila);
    $sila++;
    $dotaz = mysql_query("UPDATE uzivatele SET sila='$sila', zlato='$zlato' WHERE id='".$_SESSION['id']."'");
    }
?>

Problém se projevuje tak že mi to v Webový konzoli napíše:--
ReferenceError: $ is not defined @ ......./pokus.php:144
řádek 144= $.get("jquery.php", { sila: 'sila', zlato: 'zlato' } );

Děkuji za odpovědi.
(Ještě jednou radši říkám že JQUERY a AJAXu nerozumím...)

EDIT:ani když zaměním tohle $.get("jquery.php", { sila: 'sila', zlato: 'zlato' } ); za tohle $.get("jquery.php", { sila: "100", zlato: "100" } ); tak to nejde.
_es
Profil
quest:
ReferenceError: $ is not defined @ ......./pokus.php:144
Nemáš definovanú premennú s názvom $ - teda tam asi nemáš skript s definíciou jQuery, v jQuery dokumentácii máš predsa návod, ako tú knižnicu do stránky pridať. Okrem toho, na AJAX nepotrebuješ jQuery, napríklad Univerzální funkce pro AJAX.
quest
Profil
Problém je vyřešen.
Ale tento systém se dá obejít pokud do prohlížeče napíšu:
například http://www...........cz/jquery.php?sila=113&zlato=1.0E%2B40
nebo http://www...........cz/jquery.php?sila=99999999999&zlato=9999999999
Jak to udělat aby to nešlo obejít?

Děkuji
juriad
Profil
Nevěř klientovi, že ti pošle správnou informaci; tzn. nepředávej sílu a zlato parametrem, ale vytáhni si ji z databáze.
Anonymní
Profil *
Já nevím ale celý tenhle systém je prakticky na nic. Přidávání síly musí probíhat na straně serveru. Už jenom z důvodu, že pokud tu hru myslíš vážně( i přesto, že se mě zdá, že podobné pokusy končí neúspěchem - už jenom z důvodu že provoz a různý marketing by stal více než ti ta hra někdy vydělá. A naivní myšlenky že ta hra je něčím extra je už taky dost mimo. Už jenom z důvodu, že v dnešní době jsou lidi vůči těmto hrám dost skeptičtí, to není jako před pár lety, kdy hrát Tr*vian bylo naprosto cool), tak něco takovéhle ti někdo obejde během 10 minut. Takže udělej si nějakej skript, který ti vytáhne původní údaje z databáze(sílu, stav zlata) podle nějakého klíče vypočítá výslednou sílu a výsledné zlato a prostě ten údaj přepiš novou sílou a zlatem. Můžeš to nějak oživit javascriptem popř. již mnou zmíněným ajaxem(mohlo by to ušetřit opětovné načítání stránky), ale v tomhle případě to není pořádně ani podmínka a pokud nevíš co děláš tak se na js radši vykašli a jeď pouze na straně serveru.
quest
Profil
Jen chci říct že já si nemyslím že ta hra bude mít úspěch, dělám to kvůli sobě abych pochopil na jakých principech to funguje a protože mě to baví.Jinak děkuju za radu.
quest
Profil
Pokud si sílu a zlato načtu z DB tak se mi to provede jen jednou:
function vylepsisilu(){
    if (zlato>=(sila*sila*sila))
    {
    zlato -=(sila*sila*sila);
    sila +=1;
    csily =(sila*sila*sila);
    window.document.getElementById("vysledeksily").innerHTML=sila;
    window.document.getElementById("c1").innerHTML=csily;
    window.document.getElementById("gold").innerHTML=yourgold;
    <?php
    $zlato -=(sila*sila*sila);
    $sila +=1;
    $dotaz = mysql_query("UPDATE uzivatele SET sila='$sila', zlato='$zlato' WHERE id='".$_SESSION['id']."'");
    ?>
    }
    else
    {
    document.getElementById("c1").innerHTML=nemas;
    }
   }

A pokud po kliknutí na vylepši odkazuji na soubor tak to trvá moc dlouho (kliknu 30x a ono se to přidá jen 4x):

function vylepsisilu(){
    if (zlato>=(sila*sila*sila))
    {
    zlato -=(sila*sila*sila);
    sila +=1;
    csily =(sila*sila*sila);
    window.document.getElementById("vysledeksily").innerHTML=sila;
    window.document.getElementById("c1").innerHTML=csily;
    window.document.getElementById("gold").innerHTML=yourgold;
    $.get("jquery.php");
    }
    else
    {
    document.getElementById("c1").innerHTML=nemas;
    }
   }
jquery.php:
...DB...
if ($zlato>=($sila*$sila*$sila))
     {
     $zlato -=($sila*$sila*$sila);
     $sila +=1;
     $dotaz = mysql_query("UPDATE uzivatele SET sila='$sila', zlato='$zlato' WHERE id='".$_SESSION['id']."'");
     }
?>
Jak to mám udělat aby to šlo rychle bez aktualizování stránky?
Děkuji.
juriad
Profil
Počítej si kolikrát uživatel kliknul a pokud od posledního kliknutí uběhlo už dost času (třeba 5 sekund), odešli dotaz na server s počtem kliků.
Stejně tak odešli dotaz při události beforeUnload, pokud existují kliknutí, která nebyla odeslána na server.

Uživatel uvidí optimistický výsledek klikání okamžitě, stav na serveru bude o několik sekund opožděn; jelikož na serveru budeš mít podmínky, které budou hlídat konzistenci (aby nebylo možné vylepšit v případě, že zlato je nedostatečné), nemělo by zpoždění vadit (bude se to ale chovat divně, pokud bude provádět manipulace se zlatem z různých panelů.

Ono by mělo fungovat i těch 30 dotazů, problém nejspíš bude v transakčnosti zpracování.
30 procesů si vytáhne sílu a zlato z databáze (jelikož jsou příliš blízko sebe, tak to většinou bude stejná hodnota) a následně všechny procesy zapíšou novou hodnotu do databáze (samozřejmě, že po celé dávce tam bude jen ten poslední údaj).

Promysli si následující posloupnost:
proces1: SELECT zlato FROM tabulka -> $zlato
proces2: SELECT zlato FROM tabulka -> $zlato
proces3: SELECT zlato FROM tabulka -> $zlato
proces1: UPDATE tabulka SET zlato = $zlato-1
proces2: UPDATE tabulka SET zlato = $zlato-1
proces3: UPDATE tabulka SET zlato = $zlato-1
Musíš ho transakcí donutit aby vždy spustil SELECT a UPDATE za sebou – nesmí vloži jiné příkazy.
quest
Profil
Ale jak to udělám se zlatem pokud mám tento vzorec: $zlato -=($sila*$sila*$sila);?? když uživatel klikne 30 tak přičtu 30 síly ale kolik odečtu zlata?Budu to muset udělat po jednom dotazu nebo stačí jeden dotaz ve kterém to vynásobím?
Jinak děkuji za radu.
juriad
Profil
for($i=0; $i<$pocet_kliknuti; $i++) {
  $nove_zlato = $zlato - $sila*$sila*$sila;
  if($nove_zlato < 0) {
    break;
  }
  $zlato = $nove_zlato;
  $sila++;
}
$sql = "UPDATE uzivatele SET zlato = $zlato, sila = $sila WHERE …";
quest
Profil
Mám to takhle ale dá se to vylepšit jen po jednom ( asi proto že počet kliknutí se přičte jen jednou):
function vylepsisilu(){
    if (zlato>=(sila*sila*sila))
    {
    zlato -=(sila*sila*sila);
    sila +=1;
    csily =(sila*sila*sila);
    window.document.getElementById("vysledeksily").innerHTML=sila;
    window.document.getElementById("c1").innerHTML=csily;
    window.document.getElementById("gold").innerHTML=yourgold;
    <?php
    $pocet_kliknuti += 1;
     for($i=0; $i<$pocet_kliknuti; $i++) {
      $nove_zlato = $zlato - $sila*$sila*$sila;
       if($nove_zlato < 0) {
       break;
       }
      $zlato = $nove_zlato;
      $sila++;
      $sql = mysql_query("UPDATE uzivatele SET sila='$sila', zlato='$zlato' WHERE id='".$_SESSION['id']."'");
      }
    ?>
    }
    else
    {
    document.getElementById("c1").innerHTML=nemas;
    }
   }
juriad
Profil
quest:
Ten skript (stejně jako první skript v [#11]), dělá něco jiného než si myslíš: zvýší sílu bez ohledu na tom, jestli klikneš nebo ne, stačí provést refresh stránky a síla se ti bude zvětšovat.
Takto nelze kombinovat PHP s JS, pro vykonání PHP musíš vždy odeslat požadavek na server.

Myslel jsem něco jako:
var pocetKliknuti = 0;
var timeout = undefined;

function vylepsiSilu() {
  pocetKliknuti++;
  // následující část zruší časovač a začne počítat 5 sekund znova
  if(timeout != undefined) {
    window.clearTimeout(timeout);
  }
  timeout = window.setTimeout(function() {
    // po pěti sekundách odešle požadavek na server
    $.get('zvysSilu.php?pocetKliknuti=' + pocetKliknuti);
    pocetKliknuti = 0;
    timeout = undefined;
  }, 5000);
}
quest
Profil
Už to funguje ale pokud to použiju na víc věcí najednou tak to už nejde..dá se vylepšovat jen jedna věc pak se musí stránka aktualizovat a pak jde zase jen jedna atd. jinak pokud kliknu třeba na sílu a obratnost tak se nevylepší ani jedna.
kód:
  var pocetsily = 0;
  var pocetobratnosti = 0;
  var pocetodolnosti = 0;
  var pocetobrany = 0;
  var timeout1 = undefined;
  var timeout2 = undefined;
  var timeout3 = undefined;
  var timeout4 = undefined;
 
function vylepsisilu(){
    if (zlato>=(sila*sila*sila))
    {
    zlato -=(sila*sila*sila);
    sila +=1;
    csily =(sila*sila*sila);
    window.document.getElementById("vysledeksily").innerHTML=sila;
    window.document.getElementById("c1").innerHTML=csily;
    window.document.getElementById("gold").innerHTML=yourgold;
    pocetsily++;
    if(timeout1 != undefined) {
      window.clearTimeout(timeout1);
    }
    timeout1 = window.setTimeout(function() {
      $.get('vylepsisilu.php?pocetsily=' + pocetsily);
      pocetsily = 0;
      timeout1 = undefined;
     }, 5000);
    }
    else
    {
    document.getElementById("c1").innerHTML=nemas;
    }
   }
   

function vobratnost()
{
 if (zlato>= (obratnost*obratnost*obratnost))
     {
     zlato -=(obratnost*obratnost*obratnost);
     obratnost +=1;
     cobrat =(obratnost*obratnost*obratnost);
     window.document.getElementById("obratnost+").innerHTML=obratnost;
     window.document.getElementById("c2").innerHTML=cobrat;
     window.document.getElementById("gold").innerHTML=yourgold;
     pocetobratnosti++;
     if(timeout2 != undefined) {
       window.clearTimeout(timeout2);
     }
     timeout2 = window.setTimeout(function() {
       $.get('vylepsiobratnost.php?pocetobratnosti=' + pocetobratnosti);
       pocetobratnosti = 0;
       timeout2 = undefined;
      }, 5000);
     }
    else
    {
    document.getElementById("c2").innerHTML=nemas;
    }
}

function vodolnost()
{
if (zlato>= (odolnost*odolnost*odolnost))
     {
     zlato -=(odolnost*odolnost*odolnost);
     odolnost +=1;
     zdravi +=20;
     codol =(odolnost*odolnost*odolnost);
     window.document.getElementById("odo1").innerHTML=odolnost;
     window.document.getElementById("c2").innerHTML=codol;
     window.document.getElementById("gold").innerHTML=yourgold;
     pocetodolnosti++;
     if(timeout3 != undefined) {
       window.clearTimeout(timeout3);
     }
     timeout3 = window.setTimeout(function() {
       $.get('vylepsiodolnost.php?pocetodolnosti=' + pocetodolnosti);
       pocetodolnosti = 0;
       timeout3 = undefined;
      }, 5000);
     }
    else
    {
    document.getElementById("c3").innerHTML=nemas;
    }
}

function vobrana()
{
if (zlato>= (obrana*obrana*obrana))
     {
     zlato -=(obrana*obrana*obrana);
     obrana +=1;
     cobran =(obrana*obrana*obrana);
     window.document.getElementById("obrana+").innerHTML=obrana;
     window.document.getElementById("c4").innerHTML=cobran;
     window.document.getElementById("gold").innerHTML=yourgold;
     pocetobrany++;
     if(timeout4 != undefined) {
       window.clearTimeout(timeout4);
     }
     timeout4 = window.setTimeout(function() {
       $.get('vylepsiobranu.php?pocetobrany=' + pocetobrany);
       pocetobrany = 0;
       timeout4 = undefined;
      }, 5000);
     }
    else
    {
    document.getElementById("c4").innerHTML=nemas;
    }
}
vylepsisilu.php
$pocetsily = $_GET["pocetsily"];

for($i=0; $i<$pocetsily; $i++) {
  $nove_zlato = ($zlato-($sila*$sila*$sila));
  if($nove_zlato < 0) {
    break;
  }
  $zlato = $nove_zlato;
  $sila++;
}
$sql = mysql_query("UPDATE uzivatele SET sila='$sila', zlato='$zlato' WHERE id='".$_SESSION['id']."'");
?>
(U ostatních je to jen zaměněno za pocetobratnosti...atd.
Půjde to udělat tak aby jsem mohl vylepšovat jakoukoliv vlastnost?
Děkuju za odpověď.
juriad
Profil
Klíčový nejspíš bude ten PHP skript, konkrétně část, kde se získávají proměnné $sila a $zlato.
Zkontroluj ještě ve vývojářských nástrojích (v prohlížeči stiskni F12) na kartě síť, jestli se opravdu posílají všechny požadavky správně.
quest
Profil
Nastroje vývoje mám zapnuté celou dobu co to zkouším a všechny požadavky jako je
př.:http://www...cz/vylepsisilu.php?pocetkliknuti=10
http://www.........cz/vylepsiobranu.php?pocetobrany=1
Tyhle požadavky se odesílají ale teď jsem zkoušel klikat různě na staty a zjistil jsem že se mezi sebou odečítají podle toho který je zmáčknutý dřív a kolik ho přibude tak že pokud máš př:
15 síly
9 obratnosti
11 odolnosti
29 obrany
a vylepšíš: +1 síla...+1 obrana..+1síla..1+obratnost..+1odolnost tak budeš mít:
11 síly
8 obratnosti
10 odolnosti
28 obrany
což mi přijde takhle: každá síla odečte všechno ostatní..všechno ostatní odečte sílu..pokud vylepším sílu tak se s ní nic nestane ale pokud jí vylepším po jiněm statu tak se odečte...Což nechápu:-)))
Koukni se zde: medievalfighter.ezin.cz pokud se nechceš registrovat tak se přihlaš jako jméno:aa heslo:aa
juriad
Profil
V celém kódu, který jsi tady zatím ukázal se nikde síla, obratnost, odolnost ani obrana nesnižuje; vždy je přičítá jednička.
Chyba tedy musí být v části, kterou jsi neukázal.

Na ten tvůj web se nedokážu dostat, dej sem prosím klikací odkaz.
A ukaž jeden celý PHP skript (jméno a heslo k databázi vyhvězdičkuj).
quest
Profil
pokus.php
<?php
 require_once dirname(__FILE__)."/config.php";
$select = mysql_query("SELECT id, zlato, lvl, exp, sila, obratnost, odolnost, obrana, zdravi, mindmg, maxdmg, cata, vyhral, prohral, souboj, body FROM uzivatele WHERE id='".$id."'") or die(mysql_error());
 if ($odpoved = mysql_fetch_array($select))
  {
  $zlato = $odpoved['zlato'];
  $lvl = $odpoved['lvl'];
  $exp = $odpoved['exp'];
  $sila = $odpoved['sila'];
  $obratnost = $odpoved['obratnost'];
  $odolnost = $odpoved['odolnost'];
  $obrana = $odpoved['obrana'];
  $zdravi = $odpoved['zdravi'];
  $mindmg = $odpoved['mindmg'];
  $maxdmg = $odpoved['maxdmg'];
  $prohral = $odpoved['prohral'];
  $vyhral = $odpoved['vyhral'];
  $souboj = $odpoved['souboj'];
  $cata = $odpoved['cata'];
  $body = $odpoved['body'];

  $gold = "Zlato: ";
  }


if (mysql_num_rows($select)!=1) {
    header("Location: ./neprihlasen.php", odhlášení);
}
if (isset($_GET['logout'])) {
    unset($_SESSION['jmeno']);
    unset($_SESSION['heslo']);
    session_destroy();
    header("Location: ./logouting.php", odhlášení);
} 

?>        
<html>
<head>

 <title>Hlavní strana</title>

</head>
<body>
<script type="text/javascript">
  var zlato=<?php echo $zlato ?>;
  var lvl =<?php echo $lvl ?>;
  var exp=<?php echo $exp ?>;
  var sila=<?php echo $sila ?>;
  var obratnost=<?php echo $obratnost ?>;
  var odolnost=<?php echo $odolnost ?>;
  var obrana=<?php echo $obrana ?>;
  var zdravi=<?php echo $zdravi ?>;
  var mindmg=<?php echo $mindmg ?>;
  var maxdmg=<?php echo $maxdmg ?>;
  var cata="<?php echo $cata ?>";
  var vyhral=<?php echo $vyhral ?>;
  var prohral=<?php echo $prohral ?>;
  var souboj=<?php echo $souboj ?>;
  var body=<?php echo $body ?>;
  var id=<?php echo $_SESSION['id'] ?>; 

  var plati = "Nyní máš lvl <?php echo $lvl +1?>";
  var neplati = "Nemáš dostatek zkušeností";
  var nemas = "Nemáš dostatek zlata";
  var csily =(sila*sila*sila);
  var cobrat =(obratnost*obratnost*obratnost);
  var codol =(odolnost*odolnost*odolnost);
  var cobran =(obrana*obrana*obrana);
  var clvl =(lvl*lvl*lvl);


  var pocetsily = 0;
  var pocetobratnosti = 0;
  var pocetodolnosti = 0;
  var pocetobrany = 0;
  var timeout1 = undefined;
  var timeout2 = undefined;
  var timeout3 = undefined;
  var timeout4 = undefined;
 
function nlvl(){
 if (exp>(lvl*lvl*lvl)){
  zlato +=(100*lvl);
  lvl +=1;
  clvl =(lvl*lvl*lvl);
  window.document.getElementById("newlvl").innerHTML=plati;
  window.document.getElementById("c5").innerHTML=clvl;
  window.document.getElementById("gold").innerHTML=zlato;
 }
 else{
 document.getElementById("c5").innerHTML=neplati;
 }
}

function vylepsisilu(){
    if (zlato>=(sila*sila*sila))
    {
    zlato -=(sila*sila*sila);
    sila +=1;
    csily =(sila*sila*sila);
    window.document.getElementById("vysledeksily").innerHTML=sila;
    window.document.getElementById("c1").innerHTML=csily;
    window.document.getElementById("gold").innerHTML=zlato;
    pocetsily++;
    if(timeout1 != undefined) {
      window.clearTimeout(timeout1);
    }
    timeout1 = window.setTimeout(function() {
      $.get('vylepsisilu.php?pocetsily=' + pocetsily);
      pocetsily = 0;
      timeout1 = undefined;
     }, 5000);
    }
    else
    {
    document.getElementById("c1").innerHTML=nemas;
    }
   }
   

function vobratnost()
{
 if (zlato>=(obratnost*obratnost*obratnost))
     {
     zlato -=(obratnost*obratnost*obratnost);
     obratnost +=1;
     cobrat =(obratnost*obratnost*obratnost);
     window.document.getElementById("obratnost+").innerHTML=obratnost;
     window.document.getElementById("c2").innerHTML=cobrat;
     window.document.getElementById("gold").innerHTML=zlato;
     pocetobratnosti++;
     if(timeout2 != undefined) {
       window.clearTimeout(timeout2);
     }
     timeout2 = window.setTimeout(function() {
       $.get('vylepsiobratnost.php?pocetobratnosti=' + pocetobratnosti);
       pocetobratnosti = 0;
       timeout2 = undefined;
      }, 5000);
     }
    else
    {
    document.getElementById("c2").innerHTML=nemas;
    }
}

function vodolnost()
{
if (zlato>=(odolnost*odolnost*odolnost))
     {
     zlato -=(odolnost*odolnost*odolnost);
     odolnost +=1;
     zdravi +=20;
     codol =(odolnost*odolnost*odolnost);
     window.document.getElementById("odo1").innerHTML=odolnost;
     window.document.getElementById("c2").innerHTML=codol;
     window.document.getElementById("gold").innerHTML=zlato;
     pocetodolnosti++;
     if(timeout3 != undefined) {
       window.clearTimeout(timeout3);
     }
     timeout3 = window.setTimeout(function() {
       $.get('vylepsiodolnost.php?pocetodolnosti=' + pocetodolnosti);
       pocetodolnosti = 0;
       timeout3 = undefined;
      }, 5000);
     }
    else
    {
    document.getElementById("c3").innerHTML=nemas;
    }
}

function vobrana()
{
if (zlato>=(obrana*obrana*obrana))
     {
     zlato -=(obrana*obrana*obrana);
     obrana +=1;
     cobran =(obrana*obrana*obrana);
     window.document.getElementById("obrana+").innerHTML=obrana;
     window.document.getElementById("c4").innerHTML=cobran;
     window.document.getElementById("gold").innerHTML=zlato;
     pocetobrany++;
     if(timeout4 != undefined) {
       window.clearTimeout(timeout4);
     }
     timeout4 = window.setTimeout(function() {
       $.get('vylepsiobranu.php?pocetobrany=' + pocetobrany);
       pocetobrany = 0;
       timeout4 = undefined;
      }, 5000);
     }
    else
    {
    document.getElementById("c4").innerHTML=nemas;
    }
}


</script>

 <div style="position: absolute; top: 50px; left: 500px"><b>Vítej ve hře Medieval Fighter</b></div>

 <div style="position: absolute; top: 130px; left: 350px"><p>Nyní jste přihlášen jako <b><?php echo $_SESSION['jmeno'] ?></b>.</p></div>

 <div style="position: absolute; top: 160px; left: 380px"><p>Zde je vaše postava</p></div>

 <div style="position: absolute; top: 20px; left: 1100px"><p><a href="../user.php?logout">Odhlásit</a></p></div>


 <div style="position: absolute; top: 120px; left: 0px"><a href="/postava.php"><img src="postava.jpg" border="0"></a></div>
 <div style="position: absolute; top: 180px; left: 0px"><a href="/uspech.php"><img src="uspech.jpg" border="0"></a></div>
 <div style="position: absolute; top: 240px; left: 0px"><a href="/dobrodruzstvi.php"><img src="vypravy.jpg" border="0"></a></div>
 <div style="position: absolute; top: 300px; left: 0px"><a href="/zapas.php"><img src="zapas.jpg" border="0"></a></div>
 <div style="position: absolute; top: 360px; left: 0px"><a href="/turnaj.php"><img src="turnaj.jpg" border="0"></a></div>
 <div style="position: absolute; top: 420px; left: 0px"><a href="/obchod.php"><img src="obchod.jpg" border="0"></a></div>
 <div style="position: absolute; top: 480px; left: 0px"><a href="/slava.php"><img src="slava.jpg" border="0"></a></div>
 <div style="position: absolute; top: 540px; left: 0px"><a href="/prace.php"><img src="prace.jpg" border="0"></a></div>

 <div style="position: absolute; top: 350px; left: 500px"><input type="button" onClick="nlvl();" value="Vylepši lvl"></div>


<div style="position: absolute; top: 250px; left: 500px"><input type="button" onClick="vylepsisilu();" value="Vylepši sílu"></div>

<div style="position: absolute; top: 275px; left: 500px"><input type="button" onClick="vobratnost();" value="Vylepši obratnost"></div>

<div style="position: absolute; top: 300px; left: 500px"><input type="button" onClick="vodolnost();" value="Vylepši odolnost"></div>

<div style="position: absolute; top: 325px; left: 500px"><input type="button" onClick="vobrana();" value="Vylepši obranu"></div>







<div style="position: absolute; top: 250px; left: 650px"><div id="vysledeksily"><?php echo $sila ?></div></div>

<div style="position: absolute; top: 275px; left: 650px"><div id="obratnost+"><?php echo $obratnost ?></div></div>

<div style="position: absolute; top: 300px; left: 650px"><div id="odo1"><?php echo $odolnost ?></div></div>

<div style="position: absolute; top: 325px; left: 650px"><div id="obrana+"><?php echo $obrana ?></div></div>

<div style="position: absolute; top: 350px; left: 650px"><div id="newlvl"><?php echo $lvl ?></div></div>



<div style="position: absolute; top: 250px; left: 850px"><div id="c1"><?php echo ($sila*$sila*$sila) ?></div></div>

<div style="position: absolute; top: 275px; left: 850px"><div id="c2"><?php echo ($obratnost*$obratnost*$obratnost) ?></div></div>

<div style="position: absolute; top: 300px; left: 850px"><div id="c3"><?php echo ($odolnost*$odolnost*$odolnost) ?></div></div>

<div style="position: absolute; top: 325px; left: 850px"><div id="c4"><?php echo ($obrana*$obrana*$obrana) ?></div></div>

<div style="position: absolute; top: 350px; left: 850px"><div id="c5"><?php echo ($lvl*$lvl*$lvl) ?></div></div>

<div style="position: absolute; top: 160px; left: 830px"><div id="gold"><?php echo $zlato ?></div></div>
<div style="position: absolute; top: 160px; left: 780px"><div id="goldtext"><?php echo $gold ?></div></div>



</body>
</html>
vylepsisilu.php:
[pre]
<?php
require_once dirname(__FILE__)."/config.php";
$select = mysql_query("SELECT id, zlato, lvl, exp, sila, obratnost, odolnost, obrana, zdravi, mindmg, maxdmg, cata, vyhral, prohral, souboj, body FROM uzivatele WHERE id='".$id."'") or die(mysql_error());
if ($odpoved = mysql_fetch_array($select))
{
$zlato = $odpoved['zlato'];
$lvl = $odpoved['lvl'];
$exp = $odpoved['exp'];
$sila = $odpoved['sila'];
$obratnost = $odpoved['obratnost'];
$odolnost = $odpoved['odolnost'];
$obrana = $odpoved['obrana'];
$zdravi = $odpoved['zdravi'];
$mindmg = $odpoved['mindmg'];
$maxdmg = $odpoved['maxdmg'];
$prohral = $odpoved['prohral'];
$vyhral = $odpoved['vyhral'];
$souboj = $odpoved['souboj'];
$cata = $odpoved['cata'];
$body = $odpoved['body'];
}
$pocetsily = $_GET["pocetsily"];

for($i=0; $i<$pocetsily; $i++) {
$nove_zlato = ($zlato-($sila*$sila*$sila));
if($nove_zla


Nevím proč ale ve vylepsisilu.php se mi usekl kód
celý kód:
<?php
 require_once dirname(__FILE__)."/config.php";
$select = mysql_query("SELECT id, zlato, lvl, exp, sila, obratnost, odolnost, obrana, zdravi, mindmg, maxdmg, cata, vyhral, prohral, souboj, body FROM uzivatele WHERE id='".$id."'") or die(mysql_error());
 if ($odpoved = mysql_fetch_array($select))
  {
  $zlato = $odpoved['zlato'];
  $lvl = $odpoved['lvl'];
  $exp = $odpoved['exp'];
  $sila = $odpoved['sila'];
  $obratnost = $odpoved['obratnost'];
  $odolnost = $odpoved['odolnost'];
  $obrana = $odpoved['obrana'];
  $zdravi = $odpoved['zdravi'];
  $mindmg = $odpoved['mindmg'];
  $maxdmg = $odpoved['maxdmg'];
  $prohral = $odpoved['prohral'];
  $vyhral = $odpoved['vyhral'];
  $souboj = $odpoved['souboj'];
  $cata = $odpoved['cata'];
  $body = $odpoved['body'];
  }
$pocetsily = $_GET["pocetsily"];

for($i=0; $i<$pocetsily; $i++) {
  $nove_zlato = ($zlato-($sila*$sila*$sila));
  if($nove_zlato < 0) {
    break;
  }
  $zlato = $nove_zlato;
  $sila++;
}
$sql = mysql_query("UPDATE uzivatele SET sila='$sila', zlato='$zlato' WHERE id='".$_SESSION['id']."'");
?>



odkaz: http://www.medievalfighter.ezin.cz/index.php
juriad
Profil
Mě se to chová tak, že se dotaz na server se vždy odešle správně a občas se skoro náhodně mění síla (nahoru i dolu), nic jiného se mi nepodařilo změnit.
Zkus schválně ten prováděný dotaz (řádek 32) : "UPDATE uzivatele SET sila='$sila', zlato='$zlato' WHERE id='".$_SESSION['id']."'" vypsat echem na výstup (bude pak vidět v detailu spojení na kartě sít v části odpověď). A přidej také výpis, zdali se ten UPDATE povedl (výsledek mysql_query).

Já nikde chybu nevidím, dokázal bych to svést jen na „kvalitní hosting“.
quest
Profil
Děkuju už to funguje(měl jsem proházené set sila='$obratnost' atd.)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: