Qualcuno mi dice dove sbaglio in questa classe ..

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Ho tentato di creare una classe ( contaclick ) che mi aggiungesse +1 alla voce click del mio db per ogni click su un prodotto.
Faccio arrivare l'id del prodotto selezionato tramite get es: www.miosito.it/paginaricevente.php?id=1

la ricevo così..

PHP:
<?php 
include 'classi.php';
$id = $_GET['id'];
$addclickclass = new Contaclick();
$addclickclass->addclick($id);
?>

La classe è la seguente.. cerco di commentarla così da spiegare come ho operato..

PHP:
/*Inizio classe contaclick*/
Class Contaclick {
	
	function addclick($id) {
		
		$this->id = $id; // setto l'id
		$this->ip = $_SERVER['REMOTE_ADDR']; // setto l' ip che mi servirà dopo per un controllo sui click 
		include 'db/connection.php'; // Posso includere così?? Primo dubbio ..
		 try
		{ 
		  $sql = "SELECT COUNT(*) FROM prodotti WHERE id = '".$this->id."' AND ip != '".$this->ip."'"; /* seleziono e conto tutti i record dove l'id è uguale a quello passato e l'ip non è uguale a quello attualmente in uso.. così evito che qualcuno che ha già cliccato venga ricontato..*/
		  $result = $pdo->query($sql);
		  $final = $result->fetch();
		  
		}
		catch (PDOException $e)
		{
		  $error = 'Error: ' . $e->getMessage();
		  include 'error.html.php';
		  exit();
		} 
		      
 	if ($final[0] > 0){ // se esiste quindi è maggiore di 0 ..
		include 'db/connection.php';
		  try
			{
			  $sql = 'SELECT linkprod FROM prodotti WHERE id = "'.$this->id.'"'; // mi prelevo il suo link
			  $result = $pdo->query($sql);
			}
			catch (PDOException $e)
			{
			  $error = 'Error: ' . $e->getMessage();
			  include 'ERRORDB/outputpage.php';
			  exit();
			}     
			foreach ($result as $row)
			{
			  $prodchange[] = array(
				'id' => $row['id'],
				'linkprod' => $row['linkprod']	
			  );
			}
	}
			if ($prodchange[id] > 0){  // Se ancora l'id è maggiore di 0..
				$this->link = $prodotto['linkprod'];   // setto il link
				include 'db/connection.php';
				try
				  {
						$sql = 'UPDATE prodotti SET  // provo ad aggiornare i click aggiungendone uno e aggiorno anche l'ip ( che di defoult è 0 )
								click = click + 1,
								ip = "'.$this->ip.'"
								WHERE id = "'.$this->id.'"';
						$pdo->query($sql);
				  }
				  catch (PDOException $e)
				  {
						$error = 'Errore aggiornamento click prodotti.';
						include 'db/ERRORDB/outputpage.php';
						exit();
				  }
		
				  header("location: ". $this->link);
				  exit();
		
						  } else { // se l'id non è maggiore di 0 quindi è un utente che ha fatto un secondo click reindirizza senza calcolare il click.. 
				  header("location: ". $this->link);
						  }
	
	}
}
/* fine classe contaclick*/

Ma avviato il tutto mi appare la pagina bianca.. ma non procede al reindirizzamento ne all'update dei valori nel db.. Secondo voi perchè??
Grazie per le eventuali risposte :)
 

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Corretta e funzionante.. In pratica, fa questo:
Quando qualcuno clicca sul link verifica che l'ip, non sia uguale all'ultimo ip registrato nel db ( per impedire che qualcuno si diverta a far aumentare i click appositamente ).
Se l'ip è diverso, aggiunge un click, altrimenti ci reindirizza nuovamente al link senza aggiungere alcun click.

P.S. per realizzarla ho preso spunto da un articolo trovato in questo forum, implementando la possibilità di filtrare per ip ( ringrazio l'autore che ora non ricordo :p ) ..

Qualora dovesse servire a qualcuno ecco la classe
Ovviamente a voi la scelta di utilizzare il foreach o semplicemente il fetch() nel secondo blocco try-catch ( così facendo la accorcereste un pò forse :p ):

PHP:
/*Inizio classe contaclick*/
Class Contaclick {
	
	function addclick($id) {
		
		$this->id = $id;
		$this->ip = $_SERVER['REMOTE_ADDR'];
		include 'db/connection.php';
		 try
		{ 
		  $sql = "SELECT COUNT(*) FROM prodotti WHERE id = '".$this->id."' AND ip != '".$this->ip."'";
		  $result = $pdo->query($sql);
		  $final = $result->fetch();
		  
		}
		catch (PDOException $e)
		{
		  $error = 'Error: ' . $e->getMessage();
		  include 'error.html.php';
		  exit();
		} 
		      
		include 'db/connection.php';
		  try
			{
			  $sql = 'SELECT click, linkprod, ip FROM prodotti WHERE id = "'.$this->id.'"';
			  $result = $pdo->query($sql);
			}
			catch (PDOException $e)
			{
			  $error = 'Error: ' . $e->getMessage();
			  include 'ERRORDB/outputpage.php';
			  exit();
			} 
			    
			foreach ($result as $row)
			{
			  $datiprodotti[] = array(
				'id' => $row['id'],
				'click' => $row['click'],				
				'linkprod' => $row['linkprod'],	
				'ip' => $row['ip']
			  );
			}
			foreach ($datiprodotti as $datoprodotto) {
			   	$this->idselect = $datoprodotto["id"];
				$this->click = $datoprodotto["click"];
				$this->link = $datoprodotto["linkprod"];
				$this->ipconfronta = $datoprodotto["ip"];
			}


			if ($this->ipconfronta != $this->ip AND $final[0] > 0){
				include 'db/connection.php';
				try
				  {
						$sql = 'UPDATE prodotti SET 
								click = click + 1,
								ip = "'.$this->ip.'"
								WHERE id = "'.$this->id.'"';
						$pdo->query($sql);
				  }
				  catch (PDOException $e)
				  {
						$error = 'Errore aggiornamento click prodotti.';
						include 'db/ERRORDB/outputpage.php';
						exit();
				  }
		
				  header("location: ". $this->link);
				  exit();
		
						  } else {
				  header("location: ". $this->link);
				  exit();
						  }
	
				}
}
/* fine classe contaclick*/
Ovviamente a migliorarla ci siamo sempre.. Sono un principiante .. non me ne vogliate :p
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
Per migliorarla potresti controllare che l'IP che ha cliccato non abbia già cliccato un'altra volta nella giornata.
 

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Io sul db salvo solo l'ultimo ip, sostituendolo con quello che clicca dopo il precedente.. quindi poi come confronto?? Dovrei salvare tutti gli ip??
 

Longo8

Utente Attivo
28 Mar 2011
1.694
0
36
si dovresti salvare tutti gli ip della giornata :)
Se vuoi avere un bel sistema di controllo avresti già dovuto prevedere una cosa del genere.
Se non l'hai fatto è il momento buono per farlo.
 
Discussioni simili
Autore Titolo Forum Risposte Data
P [Gratuito][Cerco] qualcuno per fare menu a tendina ottimizzato per mobile-responsive con css e html Offerte e Richieste di Lavoro e/o Collaborazione 3
I namecheap.com, qualcuno lo usa? Hosting 7
S Qualcuno si intende di lettori codici a barre? Presentati al Forum 1
S Creare videochat ce qualcuno Offerte e Richieste di Lavoro e/o Collaborazione 3
F Cerco qualcuno per un progetto java gratuito Java 1
S Cerco qualcuno che realizzi due pagine web per me Offerte e Richieste di Lavoro e/o Collaborazione 3
R Qualcuno ha mai provato Fastcomet? Server Dedicati e VPS 1
S [PHP] Qualcuno utilizza i grafici Google charts? PHP 1
M Qualcuno vende profili autenticati? Annunci servizi di Social Media Marketing 0
E Qualcuno puo' autarmi Guadagnare col Sito 8
S Qualcuno ha mai creato grafici "google chart" collegati a database mysql? PHP 7
filippino Numero Visualizzazioni falsate? Qualcuno ha avuto lo stesso problema? Google Analytics 2
L xmlrpc leggere le risposte. qualcuno mi aiuta? PHP 1
F [cerco] [non retribuito] qualcuno che mi sistemi il blog Offerte e Richieste di Lavoro e/o Collaborazione 3
R Ciao a tutti! sono nuovo e spero che qualcuno possa aiutarmi ad imparare a usare un mac book apple Presentati al Forum 1
Bostik Cerco qualcuno che mi insegni i fondamenti della gestione di un webserver Web Server 1
G qualcuno cortesemente può aiutarmi? PHP 0
glm2006ITALY Qualcuno conosce il CMS Quick.Cart? Content Management System (CMS) 0
M Chiedo una mano gentilmente se qualcuno mi aiuta. PHP 1
M SEOProfiler: qualcuno lo ha provato? SEO e Posizionamento 0
Task Mc Dove sbaglio? qualcuno mi può aiutare? Classic ASP 2
A Qualcuno può dirmi i codicI di questI esercizi???? PHP 4
G Qualcuno mi può spiegare? PHP 1
D Form di contatto e relativo file in php. Qualcuno mi salvi. PHP 9
S Qualcuno mi sa dire a cosa serve precisamente questo script? Javascript 1
Web Designer La crisi uccide, ma gliene frega a qualcuno? Discussioni Varie 1
voldemort Hipay: qualcuno lo ha provato? SEO e Posizionamento 0
voldemort DealExtreme: lo conoscete? qualcuno lo ha provato? opinioni? Discussioni Varie 0
novello88 Qualcuno ha provato AddyOn? Guadagnare col Sito 3
novello88 Qualcuno conosce VHosting Solution? Hosting 0
H Qualcuno mi può indicare programmi facili per realizzare siti web facilmente HTML e CSS 14
P C'è qualcuno che si intende di fotografia? Discussioni Varie 20
voldemort Qualcuno conosce il provider Vola? Hosting 0
J Qualcuno Può AIUTARMI Ajax 0
M Joomla: configurare jfusion con Moodle [era: Qualcuno sa usare jfusion] Joomla 1
D Qualcuno mi saprebbe aiutare ad installare JavaBridge con Tomcat 5.5 e win xp? Apache 13
M Qualcuno si è agganciato alla mia rete wireless? Reti LAN e Wireless 3
N Come si fa aiuto ce qualcuno la fuori ??! HTML e CSS 1
S Qualcuno lo ha provato BeRuby? Guadagnare col Sito 3
P Devo modificare una pagina ma non riesco... qualcuno mi aiuta? PHP 1
SolidSnake4 qualcuno sa come funziona la libreria gettext PHP 1
B qualcuno mi aiuti Flash 0
M Qualcuno riesce ad aiutarmi con questo script? PHP 0
G A qualcuno funzionano i colori multipli adsense? Google AdSense 0
S C'è qualcuno che ha testato lo script AGWS Directory - Gestione Link? PHP 1
D Disperazione CSS, qualcuno mi aiuta a ridurre le dimensioni? HTML e CSS 1
E Qualcuno può aiutarmi? PHP 3
T Qualcuno mi aiuto con Word? Windows e Software 1
S qualcuno si è intrufolato sul mio sito Sicurezza e Virus 10
MikiBella Qualcuno sai come si fa con TradeDoubler? Guadagnare col Sito 1

Discussioni simili