Inregistrare resurse utilizator joc php

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
Komfort
Mesaje:157

Inregistrare resurse utilizator joc php

Buna ziua.
Cum as putea sa stochez in baza de date ultima accesare a utilizatorului si resursele pe care le are la momentul x
Apoi, la urmatoarea accesare citeste cate secunde s-au scurz de la momentul x si inmultesti cu rata de crestere, apoi adaugi la ce exista in baza de date.
Un exemplu mi-ar fi de mare ajutor.

Edit;

Cod: Selectaţi tot

//login.php
if(isset($_POST['password'])){
$nickname=$_POST['nickname'];
$password=$_POST['password'];
if(!isset($_SESSION['nickname'])) $_SESSION['nickname']=$_POST['nickname'];
$timp = time();
$sql3="UPDATE `users` SET `timp`='$timp' WHERE `nickname`='".$_POST['nickname']."'"; 
$result3=mysql_query($sql3);
echo $result3;

$cerereSQL3="SELECT * FROM users WHERE nickname='{$_SESSION['nickname']}'   ";
   $rezultat3 = mysql_query($cerereSQL3);
   while($rand = mysql_fetch_array($rezultat3)){ $rand['timp']=$timp3;}

$data_actuala = time(); 
 $diferenta = intval(($data_actuala-$timp3)/86400); 
$sql34="UPDATE `users` SET `timp`='$diferenta' WHERE `nickname`='".$_POST['nickname']."'"; 
$result4=mysql_query($sql4);
echo $result4;
 
Nu stiu unde nu e bine..eu as vrea sa salvez numarul de secunde de la ultimul login si de la cel precedent ..apoi le scad sa aflu cate secunde sunt de la ultimul login? Multumesc
As vrea sa aflu ultimele secunde de la ultimul login ca apoi sa cresc resursele ? Un ajutor

MarPlo Mesaje:4343
Salut
Cand utilizatorul se logheaza, cred ca trebuie sa faci intai SELECT-ul in tabelul "users" ca sa preiei timpul precedentei logari. Retii acel timp intr-o variabila si-l scazi din timpul curent, time(), ca sa ai numarul de secunde de la logarea anterioara pana la cea actuala. Acest numar il poti retine intr-o sesiune, daca mai ai nevoie de el.
Apoi faci UPDATE in tabelul "users" cu timpul actualei logari.
La urmatoarea autentificare, la fel, intai SELECT, preiei timpul inregistrat ultima data, se scade din timpul curent, apoi UPDATE ca sa inlocuiesti timpul precedent (deja preluat) cu cel curent.

Komfort Mesaje:157
time() imi da un numar din 10 cifre:| nu prea inteleg.

Cod: Selectaţi tot

if(isset($_POST['password'])){
$nickname=$_POST['nickname'];
$password=$_POST['password'];
if(!isset($_SESSION['nickname'])) $_SESSION['nickname']=$_POST['nickname'];

$cerereSQL3="SELECT * FROM users WHERE nickname='{$_SESSION['nickname']}'   ";
   $rezultat3 = mysql_query($cerereSQL3);
   while($rand = mysql_fetch_array($rezultat3)){ $rand['timp']=$timp3;}

$data_actuala = time(); 
 $diferenta = intval(($data_actuala-$timp3)/86400); 
$sql34="UPDATE `users` SET `timp`='$diferenta' WHERE `nickname`='".$_SESSION['nickname']."'"; 
$result4=mysql_query($sql4);
echo $result4;
 
Asa e bine?

MarPlo Mesaje:4343
time() returneaza numarul de secunde de la 1 Ianuarie 1970 pana in prezent. Poti verifica si in manualul PHP ( php.net ), cand nu stii ceva legat de vreo functie.
Nu stiu daca e bine, nu am cum sa testez si nici nu ma bag sa fac scriptul. Experienta mea in script-uri de jocuri e zero, dar ca idee, am cum este explicat mai sus.

Incearca sa adaugi la UPDATE $data_actuala in loc de $diferenta, cam asa:

Cod: Selectaţi tot

$sql4 = "UPDATE `users` SET `timp`=$data_actuala WHERE `nickname`='".$_SESSION['nickname']."'"; 
$result4 = mysql_query($sql4);
echo diferenta;
  
Si cred ca trebuie inlocuit:

Cod: Selectaţi tot

$rand['timp']=$timp3;
Cu

Cod: Selectaţi tot

$timp3 = $rand['timp'];
  
Ca sa retina data din $rand['timp'] (din mysql) in $timp3 .
- Si poate nu e nevoie sa imparti la /86400 ; tu stii.

Komfort Mesaje:157
Multumesc!!!:) merge
si daca as vrea minutele:utiliztorul x are y min de la ultimul login
cum as putea face?
Multumesc

MarPlo Mesaje:4343
Incearca sa aplici codul din acest exemplu:

Cod: Selectaţi tot

$diferenta = 1212;    // secunde
$minute = floor($diferenta / 60);
$secunde = $diferenta % 60;
echo $minute. ' minute si '. $secunde. ' secunde';      // 20 minute si 12 secunde
 

Komfort Mesaje:157
merge...si inca o intrebare..

Cod: Selectaţi tot

$sql5 = "UPDATE `users` SET `porumb`='$diferenta'  WHERE `nickname`='".$_SESSION['nickname']."'"; 
$result5 = mysql_query($sql5);
echo $result5;
am acest cod care face urmatorea retine nr de sec de la ultmiul login....dar as vrea sa se adune secundele...adica de ex:de la ultmiul login am 18 sec ..si cand mai ma loghez inca odata sa nu imi apara to 18 sec ci 36 de secunde
o idee? eu am gandeam la insert into da nu stiu cum:(

MarPlo Mesaje:4343
Daca am inteles bine, vrei sa aduni $diferenta actuala la valoarea deja existenta in mysql.
Incearca asa instructiunea UPDATE:

Cod: Selectaţi tot

$sql5 = "UPDATE `users` SET `porumb`=`porumb` + $diferenta  WHERE `nickname`='".$_SESSION['nickname']."'";

Komfort Mesaje:157
Chiar nu stiu unde e greseala, de ce nici sa ma loghez nu mai merge, si pt la porumb nu se mai adauga.

Cod: Selectaţi tot

<?php
session_start();
include 'cfg.php';
include 'css.php';
if(!$_SESSION['logat']) $_SESSION['logat']='';

if(!$_SESSION['nickname']) $_SESSION['nickname']='';

if(isset($_POST['password'],$_POST['nickname'])) {
$nickname=$_POST['nickname'];
$password=$_POST['password'];

$sql="SELECT nickname,password FROM users WHERE nickname='".$nickname."' AND password='".$password."'  ";
$result=mysql_query($sql);

if(mysql_num_rows($result) == 1){
 $_SESSION['nickname']=$nickname;
 $_SESSION['logat']='Da';

$cerereSQL3="SELECT * FROM users WHERE nickname='".$nickname."'   ";
   $rezultat3 = mysql_query($cerereSQL3);
   while($rand = mysql_fetch_array($rezultat3)) {
$timp3=$rand['timp'];
$porumb=$rand['porumb'];
$wood=$rand['wood'];
$wool=$rand['wool'];
$milk=$rand['milk'];

$data_actuala=time();
$diferenta =$data_actuala-$timp3;

$query5 = mysql_query("UPDATE users SET timp='".$data_actuala."', porumb ='".$porumb+$diferenta."'  WHERE nickname='".
$nickname."'");

if(!$query5){
echo "Eroare la update";
die();
}}}}
if($_SESSION['logat'] != 'Da'){
 $_SESSION['logat']='Nu';
echo '<div style="position:absolute;top:540px;left:380px"><font size=3 color=red face="Poor Richard">Failed! <Br>
      Press <a class=failed href="?sheepfarm=Register"><b>here</b></a> for going to previous page.</font></div>';
}

if($_SESSION['logat']=='Da'){
echo '<META HTTP-EQUIV=Refresh CONTENT="0; URL=?sheepfarm=Myaccount">';
}
?>

MarPlo Mesaje:4343
In loc de:

Cod: Selectaţi tot

if(isset($_POST['password'],$_POST['nickname']))
Ar trebui:

Cod: Selectaţi tot

if(isset($_POST['password']) && isset($_POST['nickname']))
Iar in loc de:

Cod: Selectaţi tot

$query5 = mysql_query("UPDATE users SET timp='".$data_actuala."', porumb ='".$porumb+$diferenta."'  WHERE nickname='".$nickname."'");
Cred ca merge asa (valorile numerice si calculele se scriu fara ghilimele):

Cod: Selectaţi tot

$query5 = mysql_query("UPDATE `users` SET `timp`=$data_actuala, `porumb`=(`porumb`+$diferenta)  WHERE `nickname`='$nickname'");
- Daca or mai f8i si alte greseli, nu stiu.

Komfort Mesaje:157

Cod: Selectaţi tot

$data_actuala=time();
$diferenta =$data_actuala-$timp3;
$xz = $porumb+$diferenta;
$query5 = mysql_query("UPDATE `users` SET `timp`=$data_actuala, porumb ='".$xz."'  WHERE `nickname`='".$nickname."'");
 
Chestai asat imi da de cap.....can ma loghez incepe la porumb cu 134356 si adauga bine , adica daca dau logout si ma loghez peste 10 sec va fi 134356 +10 si e f bine...nuami ca eu vreau sa inceapa cu 100, ca asa am adaugta eu la register.php si sa adauag de la 100 nu de la 13143354 care habar nu am de unde apare.
mUTLUMESC

URL: vocab.comuf.com : user = admin , parola = admin . Inregistrati-va din nou.

MarPlo Mesaje:4343
Daca vrei sa inceapa de la 100, cred ca in codul SQL de creare a tabelului in MySQL trebuie sa adaugi la coloana "porumb" optiunea: NOT NULL DEFAULT 100 .
Sau acel numar e adaugat prin codul de inregistrare, ori poate a ramas de la teste anterioare.