Autor Zpráva
grossik
Profil
Dobrý den mám, problém s komunikací mezi Javascript a PHP, mám udělaného hada v javascriptu a nejlepší skóre ukládám na localStorage a s localStorage to přes php chci poslat do databáze, ale kód nefunguje. Teprve se učím...

<?php
include_once("db.php");
session_start();

$foo = "<script>document.write(localStorage('nejskore'));</script>";

//Pripojenie k databazi a vkladanie hodnot do nej
mysql_connect($DBhost,$DBuser,$DBheslo) or die("Chyba: Nieje mozne sa pripojit k Databaze!");
@mysql_select_db($DBname) or die("Chyba: Nieje mozne vybrat nasledujucu 
tabulku! $DBname");
{ 
mysql_query("UPDATE `users` SET `skore_snake` = '".$foo."'");
}
?>
lionel messi
Profil
grossik:
Toto ti ani fungovať nemôže. V článku http://pehapko.cz/zakladni-kurz/15-php-a-javascript nájdeš alternatívne funkčné riešenia. Ich základnou ideou je iniciovanie nového požiadavku na server.
grossik
Profil
Stále nevím... jsem začátečník
Chamurappi
Profil
Reaguji na grossika:
PHP se odehrává na serveru, JS u klienta, nelze je takto kombinovat.

nejlepší skóre ukládám na localStorage
Proč ne do cookie? Vždyť localStorage je navržený právě na věci, které nechceš posílat na server (na rozdíl od cookies).
Pokud je výsledek určený při konci hry, proč ho neodešleš rovnou třeba formulářem?

Mimochodem, jestli sestavuješ tabulku rekordů z hraní javascriptové hry, budeš mít problém s podvrženými výsledky. Vyrábíš hru typu „vymysli si větší číslo“… protože vše, co se děje u klienta (v prohlížeči), je podvrhnutelné.
grossik
Profil
Je to jen to klasický had je tam jen číslo právě probíhané hry a nejlepší skóre a to nejlepší skóre chci vždy poslat do databáze (tam už je ten hráč zaregistrovaný) a nevím jak to udělat přes cookie...
grossik
Profil
Chamurappi:
Tak už jsem to přes to cookies udělal, ale mám problém, že tam chci (do té tabulky v databázi) jen to největší číslo, ale to mi nefunguje... z 1 na 0 to nedá, ale z 2 na 1 v pohodě (když se tabulka vytvoří je nejlepší skóre 0)

include_once("db.php");
session_start();

$skores = $_COOKIE["skore"];

mysql_connect($DBhost,$DBuser,$DBheslo) or die("Chyba: Není mozne se pripojit k databazi!");
@mysql_select_db($DBname) or die("Chyba: Není mozne vybrat nesledujici tabulku! $DBname");
{ 
   $pocet = mysql_query("SELECT skore_snake FROM users WHERE login='".$_SESSION['login']."'");
   
    if(mysql_num_rows($pocet) < $skores)
    {
           mysql_query("UPDATE `users` SET `skore_snake` = '".$skores."' WHERE login='".$_SESSION['login']."'");
           mysqli_refresh();
           header("Location: snake.php");
    }
    else
    {
           header("Location: snake.php");
    }
}
?>
Keeehi
Profil
mysql_num_rows vrací počet řádků výsledku, ne hodnotu uloženou v databázi což je to co chceš. Měl bys použít mysql_fetch_array nebo by v tomto případě úplně stačilo mysql_result.

Řádek 14 tam máš špatně (navíc)

Funkce mysql_* jsou zastaralé. Měl bys používat mysqli_*.
grossik
Profil
Keeehi:
O tom řádku 14 vím... a mysql_result mi nepomohlo furt to dělá to sáme a mysql_fetch_array mi nefunguje
Keeehi
Profil
grossik:
Bylo by naprosto skvělé, kdyby jsi ukázal kód, co ti nefunguje. Protože není důvod, aby to nefungovalo, takže jsi tam někde musel udělat chybu.
grossik
Profil
Keeehi:
    if(mysql_result($pocet) < $skores)
    {
           mysql_query("UPDATE `users` SET `skore_snake` = '".$skores."' WHERE login='".$_SESSION['login']."'");
           header("Location: snake.php");
    }
    else
    {
           header("Location: snake.php");
    }
Tady je podmínka která by měla zapisovat jen pokud je skore (co je v cookie) větší než to co je v databázi a pokud to je menší tak aby to nic nedělalo, ale zapisuje to každé číslo...
Keeehi
Profil
Problém je v tom, že funkce mysql_result má 2 povinné parametry a tys jí předal jen jeden. Nastuduj si manuál.
grossik
Profil
Keeehi:
Děkuju moc, tenhle kód funguje v pořádku...

    if(mysql_result($pocet, 0) < $skores)
    {
           mysql_query("UPDATE `users` SET `skore_snake` = '".$skores."' WHERE login='".$_SESSION['login']."'");
           header("Location: snake.php");
           header("Connection: close"); 
    }
    else
    {
           header("Location: snake.php");
           header("Connection: close"); 
    }
Keeehi
Profil
No, jen se to dá zapsat elegantněji.
if(mysql_result($pocet, 0) < $skores) {
    mysql_query("UPDATE `users` SET `skore_snake` = '".$skores."' WHERE login='".$_SESSION['login']."'");
}
header("Location: snake.php");

Slovo skores neexistuje. Ani v češtině ani v angličtině.
grossik
Profil
Keeehi:
Existuje, ale i tak díky
$skores = $_COOKIE["skore"];
juriad
Profil
Ono je mnohem lepší položit jediný dotaz, který řádek aktualizuje jen, když se má hodnota zvýšit; žádný SELECT není potřeba.

$update = "UPDATE `users` 
SET `skore_snake` = " . (int) $scores . " 
WHERE `login` = '" . mysql_real_escape_string($_SESSION['login']) . "' 
AND `skore_snake` < " . (int) $scores;
grossik
Profil
juriad:
Dobře, díky moc
Keeehi
Profil
grossik:
Existuje, ale i tak díky
To bylo o česko-anglickém patvaru, ne o neexistenci proměnné.

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:

0