Autor Zpráva
quest
Profil
Dobrý den.Chci se zeptat na toto:
Pokud mám stránku na kterou se člověk přihlásí a na ní je např:tlačítko které ubere 1 z y a přidá 1 k x.Jak mohu udělat to aby pokud přidá 3 k x (a tím odebere 3 z y) a potom se odhlásí a znovu přijde aby tam znovu bylo 13 x a 7 y a ne 10 x a 10 y?
Kód mám zatím takto a nevím co přidat dál:

<script type="text/javascript">
var x=10;
var y=10;
function nazev()
{
if (x>= 1)
     {
     x +=1;
     y -=1;
     }
window.document.getElementById("vysledek").innerHTML=x;
}
</script>
<div id="vysledek">10
</div>
<br>
<input type="button" onClick="nazev();" value="pridej x">
Moc děkuji za jakkoukoliv odpověď.
aDAm
Profil
musíš si to někam uložit a to buď do cookies pokud ti to stačí jen na tom daném PC a nebo někde na serveru (soubor/db) pokud to máš nějak ošetřeno pro přihlášeného uživatele.
nounejm
Profil *
musí se to někde uchovat - třeba v databázi
po načtení stránky se nejprve načtou hodnoty z db a pomocí php se vpíšou do javascriptu
zároveň při změně hodnoty se to musí v té javascriptové funkci zapsat do db
nějak takto (doufám, že tam nemám chyby):

<?php
  // tady z databáze načtu uloženou hodnotu $x a $y
?>
<script type="text/javascript">
  var x=<?php echo $x ?>;
  var y=<?php echo $y ?>;
  function nazev()
    {
    if (x>= 1)
       {
       x +=1;
       y -=1;
       }
    window.document.getElementById("vysledek").innerHTML=x;
    var temp = new Image();
    temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y;
    }
</script>
<div id="vysledek">10
</div>
<br>
<input type="button" onClick="nazev();" value="pridej x">

k tomu ještě musí existovat php skript ulozDoDatabaze.php, který po zavolání např. ulozDoDatabaze.php?x=13&y=7 uloží hodnoty x a y do db
quest
Profil
Děkuji za odpověď ale ještě se chci zeptat jestli mám dělat novou databázi a nebo jestli se to může uložit do databáze kde jsou uživatelé.


nounejm:
Mohl bych se ještě zeptat na ten skript ulozdodatabaze.php ?
Moje databáze:
CREATE TABLE `uzivatele` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`jmeno` varchar(255) COLLATE utf8_czech_ci NOT NULL,
`heslo` varchar(255) COLLATE utf8_czech_ci NOT NULL,
`email` varchar(255) COLLATE utf8_czech_ci NOT NULL,
`x` varchar(255) COLLATE utf8_czech_ci NOT NULL DEFAULT '10',
`y` varchar(255) COLLATE utf8_czech_ci NOT NULL DEFAULT '10',
PRIMARY KEY (`id`),
UNIQUE KEY `jmeno` (`jmeno`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=4 ;

Moje přihlašovací skripty:
<?php 
require_once dirname(__FILE__)."/config.php";

Přihlašovací skript pro ověření uživatele který ho hodí na soubor:
        header("Location: ./user.php", Přihlášen);
   
    } 
    else { 
        header("Location: ./401.html", 401);
    }
}
?>
Soubor config.php:
<?php
error_reporting(E_ALL);

define('DBHOST', 'aaa');          # databazovy server
define('DBNAME', 'aaaa');              # jmeno databaze
define('DBUSER', 'aaaaa');               # uzivatelske jmeno
define('DBPASS', ':-)))))heslo');                   # heslo k databazi

@mysql_connect(DBHOST, DBUSER, DBPASS) or die (mysql_error());
@mysql_select_db(DBNAME) or die (mysql_error());
mysql_query("SET NAMES utf8_czech_ci");

@session_start(); 
?>
Soubor user.php:
<?php 
require_once dirname(__FILE__)."/config.php";
if (!session_is_registered("x"))
    session_register("x");

if (!session_is_registered("y"))
    session_register("y");
?>
<script type="text/javascript">
  var x=<?php echo $x ?>;
  var y=<?php echo $y ?>;
  function nazev()
    {
    if (x>= 1)
       {
       x +=1;
       y -=1;
       }
    window.document.getElementById("vysledek").innerHTML=x;
    var temp = new Image();
    temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y;
    }
</script>
<div id="vysledek">10
</div>
<br>
<input type="button" onClick="nazev();" value="pridej x">
Nevím co dát do toho skriptu na uložení do databáze.Jinak děkuji za každou radu.
nounejm
Profil *
musím znát id uživatele - to se musí získat po přihlášení !
<?php
  // připojení k databázi
  // po přihlášení musím získat $id uživatele !
  $dotaz = mysql_query("SELECT x, y FROM uzivatele WHERE id='".$id."'") or die(mysql_error());
?>
<script type="text/javascript">
  var x=<?php echo $x ?>;
  var y=<?php echo $y ?>;
  function nazev()
    {
    if (x>= 1)
       {
       x +=1;
       y -=1;
       }
    window.document.getElementById("vysledek").innerHTML=x;
    var temp = new Image();
    temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y + "&id=" + id;
    }
</script>
<div id="vysledek">10
</div>
<br>
<input type="button" onClick="nazev();" value="pridej x">

ulozDoDatabaze.php
<?php
  // připojení k databázi
  $dotaz = mysql_query("UPDATE uzivatele SET x='".$_GET["x"]."', y='".$_GET["y"]."' WHERE id='".$_GET["id"]."'");
?>
quest
Profil
Můj celý login.php:
<?php 
require_once dirname(__FILE__)."/config.php";

if (!session_is_registered("jmeno"))
    session_register("jmeno");

if (!session_is_registered("heslo"))
    session_register("heslo");

$select = mysql_query("SELECT id from uzivatele where jmeno = '". $_SESSION["jmeno"] ."' and heslo = '". $_SESSION["heslo"] ."' ") or die (mysql_error());
$udaje = mysql_fetch_assoc($select);

if (isset($_POST['submit'])) {
    $_SESSION['jmeno'] = $_POST['jmeno'];
    $_SESSION['heslo'] = md5($_POST['heslo']);
    
    $select = mysql_query("SELECT id from uzivatele where jmeno = '". $_SESSION["jmeno"] ."' and heslo = '". $_SESSION["heslo"] ."' ") or die (mysql_error());
    $udaje = mysql_fetch_assoc($select);
    if (mysql_num_rows($select)==1) {
        session_regenerate_id();
        $_SESSION['jmeno'] = $_POST['jmeno'];
        $_SESSION['heslo'] = md5($_POST['heslo']);
        header("Location: ./user.php", Přihlášen);
   
    } 
    else { 
        header("Location: ./401.html", 401);
    }
}
?>
Jinak moc děkuju za radu a zítra 100% vyzkouším.(Dnes už nemám čas).
nounejm
Profil *
OK, jak je tam to ...SELECT id from uzivatele... , tak by se potom to id mělo načíst do proměnné $id
a ještě pod var y=<?php echo $y ?>; by mělo být var id=<?php echo $id ?>;
quest
Profil
nounejm:
Dobře, už jsem to udělal ale nefunguje to....a když se kouknu do databáze tak tam u sloupce id je jen jednociferné číslo a to v pořadí registrace tak nevím jestli je to správně.Jinak reg a login fungují.


Tento sql dotaz mi funguje na změnu proměnných..:UPDATE uzivatele SET x='11', y='9' WHERE id='5'


Můžu se jenom zeptat proč je za tím temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y + "&id=" + id; to x=" + x + "&y=" + y + "&id=" + id; ?
nounejm
Profil *
ulozDoDatabaze.php nedělá nic jiného, než že zapíše parametry předané v url do databáze. třeba ulozDoDatabaze.php?x=11&y=9&id=1 zapíše do databáze 11 do sloupce x, 9 do sloupce y tomu uživateli, který má id=1. Ta data se tomu skriptu musí předat v tom url, proto je tam to temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y + "&id=" + id;

a když se kouknu do databáze tak tam u sloupce id je jen jednociferné číslo a to v pořadí registrace tak nevím jestli je to správně - to je správně - podle toho id pozná skript uživatele

nefunguje to jediná možnost, proč by to nemělo fungovat je. že ten skript nezná id - to id se musí vybrat z databáze už při přidlášení!


1. při přihlášení SELECT id from uzivatele - by se mělo to id zapsat do session $_SESSION['id']
2. místo var id=<?php echo $id ?>; se dá var id=<?php echo $_SESSION['id'] ?>;
3. pro větší bezpečnost (aby někdo zvenčí nemohl zapisovat do databáze) se do ulozDoDatabaze.php dá session_start(); $dotaz = mysql_query("UPDATE uzivatele SET x='".$_GET["x"]."', y='".$_GET["y"]."' WHERE id='".$_SESSION['id']."'");


1. přidej zvýrazněný řádek do přihlašování:
session_regenerate_id();
$_SESSION['id'] = $udaje['id'];
$_SESSION['jmeno'] = $_POST['jmeno'];
2. a 3. je vyřešená výše


to id se vlastně už zbytečně předává, takže stačí temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y;
quest
Profil
Ahoj, to session start tam dávat nemusím protože já ho mám na konci souboru config.php.
Změnil jsem to a id se načte ale proměnné ne...Koukl jsem na zdrojový kód mé stránky a proměnné tam nejsou.
Kód:
<script type="text/javascript">
  var x=;
  var y=;
  var id=5; 

  function nazev()
    {
    if (x>= 1)
       {
       x +=1;
       y -=1;
       }
    window.document.getElementById("vysledek").innerHTML=x;
    var temp = new Image();
    temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y; 
    }
</script>
<div id="vysledek">10
</div>
<br>
<input type="button" onClick="nazev();" value="pridej x">
Možná budou proměnné fungovat jen jako var x=<?php echo $_SESSION['x'] ?>;.Jdu zkusit jestli budou fungovat jako session.Jinak mě už nic jiného nenapadá protože v databázi jsou.


Zkusil jsem to dát jako var x=<?php echo $_SESSION['x'] ?>; ale nefunguje..Už nevím co je s nima blbě


Tak už jsem vyřešil to že mi na stránce naběhne var x =11....atd.
ale po tom co naklikám třeba na 18 a odejdu tak se to neuloží a až se vrátím tak je tam zase 10.
quest
Profil
Nemůže být chyba v souboru ulozdodatabaze.php?


třeba neví na kolik jsem ho navolil přes funkci get..
nounejm
Profil *
v ulozdodatabaze.php chyba není - chyba bude asi v tom, že na začátku skriptu se z databáze nenačte x a y
úplně na žačátku - musí to být před
var x=<?php echo $x ?>;
var y=<?php echo $y ?>;
jak jsem psal navrchu
<?php
  // tady z databáze načtu uloženou hodnotu $x a $y
?>
quest
Profil
Já jsem zde napsal kód z načtené stránky(zdrojový kód..)Tak to asi vypadalo že to tam není ale mám to takhle:
user.php:
<?php
 require_once dirname(__FILE__)."/config.php";
if (!session_is_registered("x"))
    session_register("x");
 
if (!session_is_registered("y"))
    session_register("y");

if (!session_is_registered("id"))
    session_register("id");

  $dotaz = mysql_query("SELECT x, y FROM uzivatele WHERE id='".$id."'") or die(mysql_error());
?>
<script type="text/javascript">
  var x=<?php echo $x ?>;
  var y=<?php echo $y ?>;
  var id=<?php echo $_SESSION['id'] ?>; 

  function nazev()
    {
    if (y>= 1)
       {
       x +=1;
       y -=1;
       }
    window.document.getElementById("vysledek").innerHTML=x;
    var temp = new Image();
    temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y; 
    }
</script>
<div id="vysledek">10
</div>
<br>
<input type="button" onClick="nazev();" value="pridej x">

ulozdodatabaze.php:
<?php
  require_once dirname(__FILE__)."/config.php";
$dotaz = mysql_query("UPDATE uzivatele SET x='".$_GET["x"]."', y='".$_GET["y"]."' WHERE id='".$_SESSION['id']."'");
?>


Proměnné z databáze se mi načtou protože když se přihlásím z účtu a. tak mám základní hodnoty 10 a 10 ale pokud se přihlásím z účtu b. na kterém jsem změnil x na 11 a y na 9(změnil jsem to v administraci databáze ne přes tuhle funkci) tak se načte 11 a 9.Takže načítání z databáze funguje.
Takže:id,x,y se načtou správně ale po přičtení hodnoty se do databáze neuloží a při dalším načtení stránky se zobrazí zase jako předtím.

Teď už fakt nevím v čem to je...:-(((
Doufám že na něco přijdeme:-))
ts_istudio
Profil
quest:
V tom dotazu pracuješ s čísly, tak nevím, proč to obaluješ do apostrofů. Ale zdrojem problému to (bohužel) není. V databázi máš sloupec id nebo ID? Když si ten dotaz v tom ulozdodatabaze.php nejdřív složíš do proměnné. pak vypíšeš a zkusíš ho provést přes phpmyadmina, provede se? Ne-li, co zahlásí za chybu?
nounejm
Profil *
toto je zbytečné:
if (!session_is_registered("x"))
    session_register("x");
if (!session_is_registered("y"))
    session_register("y");

a toto NENAČTE z databáze hodnoty x a y
$dotaz = mysql_query("SELECT x, y FROM uzivatele WHERE id='".$id."'") or die(mysql_error());

je to jenom dotaz musí tam přece za tím dotazem nějaké $x=...


$dotaz = mysql_query("SELECT x, y FROM uzivatele WHERE id='".$id."'") or die(mysql_error());
if ($odpoved = mysql_fetch_array($dotaz))
  {
  $x = $odpoved['x'];
  $y = $odpoved['y'];
  }

samozřejmě to $id musí být už načtené po přihlášení - dej si třeba echo "id se rovná=".$id;
ať 100% víš, že to id je načtené!
quest
Profil
ts_istudio:
Mám tam id a jak už jsem psal zde:

quest:
Tento sql dotaz mi funguje na změnu proměnných..:UPDATE uzivatele SET x='11', y='9' WHERE id='5'
takže to funguje s čísly ale nevím jestli je to dobře napsané s proměnnými.

nounejm:
Změnil jsem ty věci co jsi psal ale pořád se to jen načte ale neuloží.
user.php:
<?php
 require_once dirname(__FILE__)."/config.php";

$dotaz = mysql_query("SELECT x, y FROM uzivatele WHERE id='".$id."'") or die(mysql_error());
if ($odpoved = mysql_fetch_array($dotaz))
  {
  $x = $odpoved['x'];
  $y = $odpoved['y'];
  }
?>
<script type="text/javascript">
  var x=<?php echo $x ?>;
  var y=<?php echo $y ?>;
  var id=<?php echo $_SESSION['id'] ?>; 

  function nazev()
    {
    if (y>= 1)
       {
       x +=1;
       y -=1;
       }
    window.document.getElementById("vysledek").innerHTML=x;
    var temp = new Image();
    temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y; 
    }
</script>
<div id="vysledek">10
</div>
<br>
<input type="button" onClick="nazev();" value="pridej x">

(Jinak id normálně naběhne na hodnotu která je přiřazena uživateli takže tam chyba není)

ulozdodatabaze.php:

<?php
  require_once dirname(__FILE__)."/config.php";
$dotaz = mysql_query("UPDATE uzivatele SET x='".$_GET["x"]."', y='".$_GET["y"]."' WHERE id='".$_SESSION['id']."'");
?>

(Nic nezměněno)
nounejm
Profil *
ulozdodatabaze.php mně funguje
var temp = new Image();
temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y; 
jsem testoval to funguje

pořád v tom skriptu nevidím to načítání z databáze
$dotaz = mysql_query("SELECT x, y FROM uzivatele WHERE id='".$id."'") or die(mysql_error());
if ($odpoved = mysql_fetch_array($dotaz))
  {
  $x = $odpoved['x'];
  $y = $odpoved['y'];
  }

přidej tam zato echo "Hodnota x=".$x." hodnota y=".$y." hodnota id=".$_SESSION['id'];
ať se otestují ty proměnné - nezapsat to může pouze z toho důvodu, že se nějaká proměnná nepředá správně

pro testování ulozdodatabaze.php tam přidej:
$file = fopen ("test.txt", "a"); 
fwrite ($file, "Hodnota x=".$_GET['x']." hodnota y=".$_GET['x']." hodnota id=".$_SESSION['id']."\r\n");
musí to být ale v adresáři do kterého se dá zapisovat - ten se může vytvořit a dát mu atributy 777 a pak se změní fopen ("jmenoAdresare/test.txt", "a");


oprava:fwrite ($file, "Hodnota x=".$_GET['x']." hodnota y=".$_GET['y']." hodnota id=".$_SESSION['id']."\r\n");
ts_istudio
Profil
quest:
Všechno je to jakési podivné bastlení plné děr. Ten update je sestaven tak, že první zvědavější člověk ti v těch datech udělá pořádný průvan. Doporučoval bych popsat trochu líp, o co ti vlastně jde, aby ses mohl dobrat lepších výsledků. Takže: musí to být napsané v JS? Musí se odesílat jak x, tak y? Mají ty hodnoty být dostupné i v tom skriptu, který je mění, nebo ti stačí předat informaci "zvyš x o jednu"? Tak jak to máš napsané, bych mohl bez námahy nastavit x y komukoliv na libovolnou hodnotu.
quest
Profil
Vyřešeno!!
nounejm----Moc Ti děkuji:-)))

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: