Autor | Zpráva | ||
---|---|---|---|
quest Profil |
#1 · Zasláno: 3. 6. 2013, 13:05:39
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"> |
||
aDAm Profil |
#2 · Zasláno: 3. 6. 2013, 15:02:34
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 * |
#3 · Zasláno: 3. 6. 2013, 16:19:42
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 |
#4 · Zasláno: 3. 6. 2013, 19:48:00 · Upravil/a: quest
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); } } ?> <?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(); ?> <?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"> |
||
nounejm Profil * |
#5 · Zasláno: 3. 6. 2013, 21:17:09
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 |
#6 · Zasláno: 3. 6. 2013, 21:57:49
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); } } ?> |
||
nounejm Profil * |
#7 · Zasláno: 3. 6. 2013, 22:10:52
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 |
#8 · Zasláno: 4. 6. 2013, 11:41:45 · Upravil/a: quest
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 * |
#9 · Zasláno: 4. 6. 2013, 12:33:16 · Upravil/a: nounejm
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']; to id se vlastně už zbytečně předává, takže stačí temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y; |
||
quest Profil |
#10 · Zasláno: 4. 6. 2013, 13:52:09 · Upravil/a: quest
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"> 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 |
#11 · Zasláno: 4. 6. 2013, 15:20:27 · Upravil/a: quest
Nemůže být chyba v souboru ulozdodatabaze.php?
třeba neví na kolik jsem ho navolil přes funkci get.. |
||
nounejm Profil * |
#12 · Zasláno: 4. 6. 2013, 15:30:19
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 ?>; <?php // tady z databáze načtu uloženou hodnotu $x a $y ?> |
||
quest Profil |
#13 · Zasláno: 4. 6. 2013, 20:06:27
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 |
#14 · Zasláno: 4. 6. 2013, 21:29:09
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 * |
#15 · Zasláno: 4. 6. 2013, 22:04:43 · Upravil/a: nounejm
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 |
#16 · Zasláno: 4. 6. 2013, 22:47:17
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 * |
#17 · Zasláno: 4. 6. 2013, 23:19:50 · Upravil/a: nounejm
ulozdodatabaze.php mně funguje
var temp = new Image(); temp.src = "ulozDoDatabaze.php?x=" + x + "&y=" + y; 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"); oprava: fwrite ($file, "Hodnota x=".$_GET['x']." hodnota y=".$_GET['y']." hodnota id=".$_SESSION['id']."\r\n");
|
||
ts_istudio Profil |
#18 · Zasláno: 5. 6. 2013, 02:14:18
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 |
#19 · Zasláno: 6. 6. 2013, 22:29:57
Vyřešeno!!
nounejm----Moc Ti děkuji:-))) |
||
Časová prodleva: 11 let
|
0