PHP, което се изпълня по веднъж на ден след сравнение.

iVAnn_rs

Registered
Здравейте!!!
Правя си joomla сайтче, което е почти изцяло интегрирано с AlphaUserPoints (като изключим проблемите на jdownloads), но ето че пак съм изправен пред една много объркваща мисия. На сайта си имам раздел игри, компонента е jvarcade и позволява да си качваш флаш игри. Измислил съм и начин за интеграция на игрите със AUP(компонента за точки). Искам обаче точките, който си спечелил при игрите да могат да се изпращат само по веднъж на ден. Това означава, че php то което изпраща ще може да се включва по 1 път на ден за дадена игра и даден потребител.

Понеже съм любител и досега съм си играл с ФЛАШчета и по простички неща не съм много наясно с php езика, затова ви моля за помощ. Не съм сигорен дали съм прав, но мисля да имам таблица с 3 колони:

id-потребител
id-игра
time-

С много четене успях да измъдря следния смешен за вас предполагам, но пък работещ код, които взема потребител и ид на играта. Само че сега трябва да ги сравня с тези в таблицата и ако ги няма да ги въведа, а и за времето нищо не намерих, поне което разбрах.

Предварително благодаря за отделеното време :)

Ето кода :

PHP:
<?php
 
$user =& JFactory::getUser();
$usr_id = $user->get('id');
$itemid = JRequest::getVar('Itemid');
 
?>
 
Успях да извлека всичко необходимо, но сега трябва да ги сравня, а както казах не съм много на ти с php опитвам се чета, но нещо не ми се получава. Ако може някой да помогне ще съм много благодарен. Значи имам си стойности за user_id и game_id искам да сравня дали в таблицата ми има ред със същите стойности, ако има да показва съобщение, ако не тогава ще използвам INSERT, която вече ги има и ще изпълни кода за даване на точки :)

Мисля че трябва да използвам нещо подобно на следният код, но ми дава грешка че иска още стойности за mysql_num_rows

Код:
$result = mysql_query('SELECT * FROM `testgame` WHERE `user-id` = '$user_id' AND `game-id` = '$game_id' ');

        if (mysql_num_rows($result) === 0) {
//тук пиша кода си ако не намери такъв ред
 } else {

                // тук пиша кода ако е намерил подобен ред
        }
 
Идеята, доколкото разбрах, не е невъзможна. Трябва да знаеш няколко неща:
1.time() ти дава информация за моментното време под формата на числа (най-просто казано)
2.time() + 60*60*24 ти дава информация за времето след 60 секунди по 60 минути по 24 часа, иначе казано след 1 денонощие от дадения момент.

Прост пример: Сега времето е time(), но утре по това време е time()+60*60*24.

След като потребителя играе, качи или каквото искаш да се прави, системата трябва да вкара в таблица от датабазата потребителското име, ид-то на играта и времето + периода от време който искаш да не може да прави повторно действието.

Table `igrani_igri`
1.id auto_increment
2.user
3.id_game
4.time

След това, трябва да направиш кода за проверка. Става с проста конструкция if/else.
$q = mysql_query("SELECT * FROM igrani_igri WHERE id_game='$id_na_segashnata_igra' DESC LIMIT 0,1");
$array = mysql_fetch_array($q);
$time_now = time();
if($array['time'] >= $time_now){
echo "Не може сега, трябва да чакаш!";
}else{
echo "Играй, играй, играй";
$newtime = time() + 60*60*24;
$q_nova = mysql_query("INSERT INTO igrani_igri VALUES ('', '$username', '$id_na_segashnata_igra', '$newtime')");
}

В общи линии, това е идеята ми за случая, която може да ти помогне. Модифицирай си я по твой вкус и питай ако има затруднения :)
 
Здравейте!!!

Успях да се справя стана страхотно, като се има в предвид, че съм съвсем нов в php и си го правих сам :) Все пак много благодаря вижте моят код, който мъдря вече няколко дена, поне понаучих някои неща за този така странен, но пък доста полезен език.

Ето го кода ми, като идеята ми е бутон от флаша да праща към този КОД, а флаша още ще интегрира и GAME_ID, така че ако някой просто отвори кода и GAME_ID му е празно ще му изписва НЕ БЪДИ ХАКЕР и няма да му добавя точки. Не знам защо но съм доста горд с кода ми по-долу може би защото не съм очаквал че ще успея така че не ме съдете ако има грешки, все пак ми е първи код.

Код:
<?php
define( '_JEXEC', 1 );
define('JPATH_BASE', $_SERVER["DOCUMENT_ROOT"]);
define( 'DS', DIRECTORY_SEPARATOR );

require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$mainframe->initialise();
$user =& JFactory::getUser();

$user_id = $user->get('id');
$game_id = $_POST['IDG'];
$timenow = time();

if (!empty($game_id))
	{ 
$con = mysql_connect('localhost', '*********', '*********');
if (!$con)
  {
die('Could not connect: ' . mysql_error());
  }
mysql_select_db('*********');
{
mysql_query('DELETE FROM `testgame` WHERE ' . (time() - 100) . ' >= `time`');
$a = mysql_query("SELECT * FROM `testgame` WHERE `user-id`='$user_id' AND `game-id`='$game_id' ") or die(mysql_error());
$b = mysql_num_rows($a);
if ($b > 0)
{
echo "Вече сте добавил точки от тази игра през последните 24 часа!";
}
else
{
echo "Успешно добави точки към профила си!!!";
mysql_query("INSERT INTO `testgame`(`user-id`, `game-id`, `time`) VALUES ('" . $user_id . "','" . $game_id. "','" . $timenow. "')");

//слагам кода от AUP за точки тук

}
}
mysql_close($con);

}
else
{
echo "Не бъди хакер!!!";
}

?>

Времето в скрипта е 100 секунди понеже е тестово.
Сега ми дава някаква грешка от кода за точките на AUP в libraries/joomla/plugin/plugin.php ред 102 (за пътя не съм сигурен, но нещо такова.)
 

Горе