Newsgroup: it.comp.www.php
Titolo: Modificare votazione nella sezione TopSite

Salve a tutti,
vi sottopongo un problema che ho con la programmazione in PHP e
vediamo se gentilmentente qualche anima buona può darmi una mano :)
Il mio sito è 
www.helpinweb.it
 e si basa su un portale (MkPortal) che
nella sezione TopSite non permette la votazione agli utenti che hanno
già espletato la loro preferenza.
Ebbene, io vorrei fare in modo che il voto lo si potesse ripetere ogni
24 ore, anche dallo stesso utente.
Ecco la funzione da modificare:
-------------------------------------------------------------------------------------
function submit_rate() {
    	global $ibforums, $mklib, $Skin, $DB;
		$ide= intval($ibforums->input['ide']);
		$iduser = $ibforums->member['id'];
		$ipuser = $_SERVER['REMOTE_ADDR'];
		$module = "topsite";
		$query = $DB->query( "SELECT id FROM mkp_votes where
module = '$module' and id_entry = '$ide' and id_member = '$iduser'");
		$checkuser = $DB->get_num_rows();
		$query = $DB->query( "SELECT id FROM mkp_votes where
module = '$module' and id_entry = '$ide' and ip = '$ipuser'");
		$checkip = $DB->get_num_rows();
		if($checkuser || $checkip) {
			$message = "{$mklib->lang['to_justvote']}";
			$mklib->error_page($message);
			exit;
		}
-----------------------------------------------------------------------------------
Ho una mezza idea di cosa fare ma vorrei prima un vostro utile
consiglio in proposito, anche perchè non so se esiste già una funzione
in PHP che permetta di riconoscere la durata minima di 24 ore, oltre
la quale sarà possibile rivotare.
Grazie mille per la gentile attenzione e per il vostro prezioso aiuto.
A presto ;)

 in PHP che permetta di riconoscere la durata minima di 24 ore
le funzioni date() e mktime() fanno questo ed altro
-- 
The grabbing hands grab all they can
All for themselves, after all
Everything counts in large amounts

Allora, ragioniamo insieme e vediamo se ho fatto bene  [8(] 
Non ho creato il campo "vote_date" in quanto già presente nella
tabella "mkp_tosite" il campo "date" con la relativa variabile
richiamata nel codice ("$date").
Mi sono limitato ad aggiungere invece le seguenti righe di codice:
$query = $DB->query( "SELECT id FROM mkp_topsite where date='$date'");
per richiamare il contenuto del campo "date" tramite la variabile
"$date"
$date_domani = date('d/m/y', mktime(0, 0, 0, date("m") , date("d") +
1, date("Y")));
non so se sta bene ma dovrebbe cacolare il giorno successivo a "date"
poi ho aggiunto la seguene istruzione IF:
if($date_domani < $date) {
$message = "{$mklib->lang['to_justvote']}";
$mklib->error_page($message);
exit;
}
In parole povere ecco le due funzioni che ho modificato con le
stringhe appena menzionate:
 ------------------------------------------------------------ -
function submit_rate() {
global $ibforums, $mklib, $Skin, $DB;
$ide= intval($ibforums->input['ide']);
$iduser = $ibforums->member['id'];
$ipuser = $_SERVER['REMOTE_ADDR'];
$module = "topsite";
 
 
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and id_member = '$iduser'");
$checkuser = $DB->get_num_rows();
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and ip = '$ipuser'");
$checkip = $DB->get_num_rows();
[B]$query = $DB->query( "SELECT id FROM mkp_topsite where
date='$date'");
$date_domani = date('d/m/y', mktime(0, 0, 0, date("m") , date("d") +
1, date("Y")));[/B]
 
 
[B]if($date_domani < $date)[/B] {
$message = "{$mklib->lang['to_justvote']}";
$mklib->error_page($message);
exit;
}
$query = $DB->query( "SELECT title FROM mkp_topsite where id =
'$ide'");
$row = $DB->fetch_row($query);
$t_t = $row['title'];
$maintit = "{$mklib->lang['to_vote']} $t_t";
$users = $this->retrieve_online();
$content .= ".........................
............................................
}
function add_rate() {
global $ibforums, $DB, $mklib;
$ide= intval($ibforums->input['ide']);
$rating = intval($ibforums->input['rating']);
$iduser = $ibforums->member['id'];
$ipuser = $_SERVER['REMOTE_ADDR'];
$module = "topsite";
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and id_member = '$iduser'");
$checkuser = $DB->get_num_rows($query);
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and ip = '$ipuser'");
$checkip = $DB->get_num_rows($query);
[B]$query = $DB->query( "SELECT id FROM mkp_topsite where
date='$date'");
$date_domani = date('d/m/y', mktime(0, 0, 0, date("m") , date("d") +
1, date("Y")));[/B]
[B]if($date_domani < $date)[/B] {
$message = "{$mklib->lang['to_justvote']}";
$mklib->error_page($message);
exit;
}
$query="INSERT INTO mkp_votes(id_entry, module, id_member,
ip)VALUES('$ide', '$module', '$iduser', '$ipuser')";
$DB->query($query);
$query = $DB->query( "SELECT rate, trate FROM mkp_topsite where id =
'$ide'");
$row = $DB->fetch_row($query);
$rate = $row['rate'];
$trate = $row['trate'];
$votes = ($trate +1);
if ( $rating != 0 ) {
$rate = round ((($trate*$rate)+$rating)/($votes), 2);
                }
$DB->query("UPDATE mkp_topsite SET rate ='$rate', trate ='$votes'
where id = '$ide'");
$DB->close_db();
Header("Location: index.php?ind=topsite");
exit;
}
------ ------------------------------------------------------------ -
Prima di uplodare il tutto, per evitare complicazioni, sono corrette
le modifiche fatte al codice?
Grazie ancora e a presto  [;)] 

Allora, ragioniamo insieme e vediamo se ho fatto bene.
 
Non ho creato il campo "vote_date" in quanto già presente nella
tabella "mkp_tosite" il campo "date" con la relativa variabile
richiamata nel codice ("$date").
Mi sono limitato ad aggiungere invece le seguenti righe di codice:
$query = $DB->query( "SELECT id FROM mkp_topsite where date='$date'");
per richiamare il contenuto del campo "date" tramite la variabile
"$date"
$date_domani = date('d/m/y', mktime(0, 0, 0, date("m") , date("d") +
1, date("Y")));
non so se sta bene ma dovrebbe cacolare il giorno successivo a "date"
poi ho aggiunto la seguene istruzione IF:
if($date_domani < $date) {
$message = "{$mklib->lang['to_justvote']}";
$mklib->error_page($message);
exit;
}
In parole povere ecco le due funzioni che ho modificato con le
stringhe appena menzionate:
 ------------------------------------------------------------ -
function submit_rate() {
global $ibforums, $mklib, $Skin, $DB;
$ide= intval($ibforums->input['ide']);
$iduser = $ibforums->member['id'];
$ipuser = $_SERVER['REMOTE_ADDR'];
$module = "topsite";
 
 
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and id_member = '$iduser'");
$checkuser = $DB->get_num_rows();
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and ip = '$ipuser'");
$checkip = $DB->get_num_rows();
[B]$query = $DB->query( "SELECT id FROM mkp_topsite where
date='$date'");
$date_domani = date('d/m/y', mktime(0, 0, 0, date("m") , date("d") +
1, date("Y")));[/B]
 
 
[B]if($date_domani < $date)[/B] {
$message = "{$mklib->lang['to_justvote']}";
$mklib->error_page($message);
exit;
}
$query = $DB->query( "SELECT title FROM mkp_topsite where id =
'$ide'");
$row = $DB->fetch_row($query);
$t_t = $row['title'];
$maintit = "{$mklib->lang['to_vote']} $t_t";
$users = $this->retrieve_online();
$content .= ".........................
............................................
}
function add_rate() {
global $ibforums, $DB, $mklib;
$ide= intval($ibforums->input['ide']);
$rating = intval($ibforums->input['rating']);
$iduser = $ibforums->member['id'];
$ipuser = $_SERVER['REMOTE_ADDR'];
$module = "topsite";
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and id_member = '$iduser'");
$checkuser = $DB->get_num_rows($query);
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and ip = '$ipuser'");
$checkip = $DB->get_num_rows($query);
[B]$query = $DB->query( "SELECT id FROM mkp_topsite where
date='$date'");
$date_domani = date('d/m/y', mktime(0, 0, 0, date("m") , date("d") +
1, date("Y")));[/B]
[B]if($date_domani < $date)[/B] {
$message = "{$mklib->lang['to_justvote']}";
$mklib->error_page($message);
exit;
}
$query="INSERT INTO mkp_votes(id_entry, module, id_member,


 Mi sono limitato ad aggiungere invece le seguenti righe di codice:
<mi-quoto setecmode="on" smiley=":)">
posta la struttura della tabella mkp_votes
</mi-quoto>


</mi-quoto>
Struttura della tabella mkp_votes (Campo, Tipo, Null, Extra): 
id; int(10); No; auto_increment  
id_entry; int(10); No; 0 
module; varchar(40); No; 0 
id_member; int(10); No; 0 
ip; varchar(40); No; 0
-----------------------------
e della tabella "mkp_topsite":
-----------------------------
Struttura della tabella mkp_votes (Campo, Tipo, Null, Extra):
id;  int(10);   No;     auto_increment              
id_member;  int(10);   No;   0                
title;  varchar(80);   No                   
description;  varchar(200);   No                   
date;  int(10);   No;   0                
link;  varchar(255);   No                   
banner;  varchar(255);   No                   
banner2;  varchar(255);   No                   
click;  int(6);   No;   0                
rate;  varchar(40);   No                   
trate;  int(6);   No;   0                
validate;  tinyint(1);   No;   0                
email;  varchar(255);   No
---------------------------------

 date;  int(10);   No;   0                
dubito che questo abbia a che fare con la data di votazione
aggiungi una colonna alla tabella mkp_votes
`date` date NOT NULL default '0000-00-00'
inserisci le votazioni come:
$query="INSERT INTO mkp_votes(id_entry, module, id_member,
ip, date)VALUES('$ide', '$module', '$iduser', '$ipuser', NOW())";
ed effettua i controlli di prevoto nella maniera seguente:
// @ submit_rate, add_rate
$yesterday = date('Y-m-d', mktime(0, 0, 0, date("m") , date("d") -
1, date("Y")));
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and id_member = '$iduser' and date >
'$yesterday'");
/* verifica l'esistenza di un voto dal medesimo ID utente
   piu' recente di 24 ore
*/
$checkuser = $DB->get_num_rows();
$query = $DB->query( "SELECT id FROM mkp_votes where module =
'$module' and id_entry = '$ide' and ip = '$ipuser' and date >
'$yesterday'");
/* verifica l'esistenza di un voto dal medesimo indirizzo IP
   piu' recente di 24 ore
*/
$checkip = $DB->get_num_rows();
if($checkuser || $checkip) {
        $message = "{$mklib->lang['to_justvote']}";
        $mklib->error_page($message);
        exit;
}
-- 
