problema con il contaggio dei click sugli annunci

searedone

Utente Attivo
11 Giu 2010
508
0
0
Buongiorno a tutti ho un problema:

Le pagine del dito si autoincrementano in base alla categ ecc ecc e le richiamo tramite l'id dal db.

Più precisamente ho un admin, dove ogni persona registrata può 'inserire delle ricette, e ovviamente ogni ricetta postata la richiamo tramite uno script in base alla categoria, e per semplificarmi la vita utilizzo un db relazionale, dove ho la tabella annunci con i campi e le varie sotto tabelle che mi collagano l'annuncio alla tipologia, alla regione, ecc ecc.

Il principio è uguale a quello di un cms , l'annuncio viene messo nel db , e richiamando l'id della ricetta in base alla categoria, mi posta la ricetta.

Spero di essere stato chiaro.

Ora vorrei calcolare quante volte è stato cliccato ogni singolo annuncio con questo script, funziona ma non so perché anche modificandolo in mille modi mi prende il click, me lo conteggia, ma non me lo conteggia con l'id che è stato cliccato ma con l'intimo id della tabella.

Spero che qualcuno possa aiutarmi.

(la tabella annunci è la tabella principale, inizia con id_annunci, r poi i vari campi, tipo, descrizione, click_annuncio, id_tipologia ecc ecc ) non so se può' aiutarvi.

PHP:
if (isset($_GET['click_annuncio'])); 
$click_annuncio = $_GET['click_annuncio'];  
$jokelist = mysql_query ("UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id_annunci=id_annunci " ) or die (mysql_error());
 
Non capisco cosa significa questa query:
PHP:
$jokelist = mysql_query ("UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id_annunci=id_annunci " ) or die (mysql_error());
Praticamente aggiunge un click a tutti gli annunci. Dovresti scrivere invece:
PHP:
$jokelist = mysql_query("UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id_annunci = {$_GET['click_annuncio']}") or die(mysql_error());
E poi sarebbe meglio se usassi mysql_real_escape_string o addslashes sulla variabile $_GET['click_annuncio'] per evitare SQL injection. Così è facile cancellare l'intera tabella.
 
Ciao e grazie ..

Se aggiungo
$jokelist = mysql_query ("UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id_annunci=id_annunci " ) or die (mysql_error());
Praticamente aggiunge un click a tutti gli annunci. Dovresti scrivere invece:
Codice PHP:
$jokelist = mysql_query("UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id_annunci = {$_GET['click_annuncio']}") or die(mysql_error());

Mi da il seguente errore

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
 
eccolo:)

PHP:
<?php


require ('db_connect.php');




$jokelist = @mysql_query(
"SELECT * FROM
    annunci INNER JOIN regione ON (annunci.regioneid=regione.id AND provinciaid=provinciaid)
     INNER JOIN provincia ON (annunci.provinciaid=provincia.id)
     
WHERE
    provincia.name='agrigento'");
    
    



    
    
    


if (!$jokelist) {
  exit('<p>Error performing query: ' . mysql_error() . '</p>');
}

while ($joke = mysql_fetch_array($jokelist)) {
$click_annuncio = $joke['click_annuncio'];
$id_annunci = $joke['id_annunci'];
  $descrizione = $joke['descrizione'];
  $mq = $joke['mq'];
  $prezzo = $joke['prezzo'];
  $tipologia = $joke['tipologia'];
  
  $name = $joke['name'];
  $citta = $joke['citta'];
  $user_name = $joke['user_name'];
  $user_email = $joke['user_email'];
   $condizioni = $joke['condizioni'];
    $regione = $joke['regione'];
     $tipo = $joke['tipo'];
      $condizioni = $joke['condizioni'];
       $logo_cliente = $joke['logo_cliente'];
         
  
   $nome_file = $joke['nome_file'];
  $tipo_file = $joke['tipo_file'];
  $dati_file = $joke['dati_file'];
  
  // Display the joke with author information
  echo "<p>$descrizione<br />" .
      "(by <a href=\"http://localhost:8888/sicilia/rannunci.php?id=$id_annunci\"/>$id_annunci</a>)<br />" . "$name</br>" . "$mq</br>" . "$prezzo</br>". "$tipologia</br>" . "$citta<br />" . "$regione<br />" . "$logo_cliente<br />" . "$condizioni<br />" . "$tipo</br></p>";

  echo "<img src='immagini1.php?id=$id_annunci' name='nome_file'  alt'' width='110' height='90'  />";  


}





?>

<?php

if (isset($_GET['click_annuncio']));  
$click_annuncio = $_GET['click_annuncio'];  
$jokelist = mysql_query("UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id_annunci = {$_GET['click_annuncio']}") or die(mysql_error()); 

?>
 
Che cosa significa questo?
PHP:
if (isset($_GET['click_annuncio']));
Cambia in:
PHP:
if (isset($_GET['click_annuncio'])) {
    $_GET['click_annuncio'] = (int)$_GET['click_annuncio'];
    // ...
}
Dove ci sono i puntini aggiungi le altre due linee.
 
ho provato così ma non prende i click :(

PHP:
<?php


require ('db_connect.php');




$jokelist = @mysql_query(
"SELECT * FROM
    annunci INNER JOIN regione ON (annunci.regioneid=regione.id AND provinciaid=provinciaid)
     INNER JOIN provincia ON (annunci.provinciaid=provincia.id)
     
WHERE
    provincia.name='agrigento'");
    
    



    
    
    


if (!$jokelist) {
  exit('<p>Error performing query: ' . mysql_error() . '</p>');
}

while ($joke = mysql_fetch_array($jokelist)) {
$click_annuncio = $joke['click_annuncio'];
$id_annunci = $joke['id_annunci'];
  $descrizione = $joke['descrizione'];
  $mq = $joke['mq'];
  $prezzo = $joke['prezzo'];
  $tipologia = $joke['tipologia'];
  
  $name = $joke['name'];
  $citta = $joke['citta'];
  $user_name = $joke['user_name'];
  $user_email = $joke['user_email'];
   $condizioni = $joke['condizioni'];
    $regione = $joke['regione'];
     $tipo = $joke['tipo'];
      $condizioni = $joke['condizioni'];
       $logo_cliente = $joke['logo_cliente'];
         
  
   $nome_file = $joke['nome_file'];
  $tipo_file = $joke['tipo_file'];
  $dati_file = $joke['dati_file'];
  
  // Display the joke with author information
  echo "<p>$descrizione<br />" .
      "(by <a href=\"http://localhost:8888/sicilia/rannunci.php?id=$id_annunci\"/>$id_annunci</a>)<br />" . "$name</br>" . "$mq</br>" . "$prezzo</br>". "$tipologia</br>" . "$citta<br />" . "$regione<br />" . "$logo_cliente<br />" . "$condizioni<br />" . "$tipo</br></p>";

  echo "<img src='immagini1.php?id=$id_annunci' name='nome_file'  alt'' width='110' height='90'  />";  


}





?>

<?php
if (isset($_GET['click_annuncio'])) { 
    $_GET['click_annuncio'] = (int)$_GET['click_annuncio']; 
   
 
$click_annuncio = $_GET['click_annuncio'];  
$jokelist = mysql_query("UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id_annunci = {$_GET['click_annuncio']}") or die(mysql_error()); 
} 
?>
 
cosa intendi ?

Al momento l'url come la vedi dallo script la prendo dall'id dell'annuncio ....
 
Prova un po' cambiando così:
PHP:
if (isset($_GET['id'])) {
    $_GET['id'] = (int)$_GET['id'];

$jokelist = mysql_query("UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id_annunci = {$_GET['id']}") or die(mysql_error());
}
 
L'ho modificato così perché l'id è id_annunci ma niente non prende il click

PHP:
if (isset($_GET['id_annunci'])) { 
    $_GET['id_annunci'] = (int)$_GET['id_annunci']; 

$jokelist = mysql_query("UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id_annunci = {$_GET['id_annunci']}") or die(mysql_error()); 
}

Ti posto anche la tabella magari ti aiuta ... ;(

PHP:
-- phpMyAdmin SQL Dump
-- version 3.3.7
-- http://www.phpmyadmin.net
--
-- Host: localhost
-- Generato il: 11 set, 2011 at 06:20 PM
-- Versione MySQL: 5.1.44
-- Versione PHP: 5.3.2

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;

--
-- Database: `sicilia`
--

-- --------------------------------------------------------

--
-- Struttura della tabella `annunci`
--

CREATE TABLE IF NOT EXISTS `annunci` (
  `id_annunci` int(11) NOT NULL AUTO_INCREMENT,
  `descrizione` longtext NOT NULL,
  `mq` varchar(255) NOT NULL,
  `locali` varchar(255) NOT NULL,
  `prezzo` varchar(255) NOT NULL,
  `tipologia` varchar(255) NOT NULL,
  `altro` varchar(255) NOT NULL,
  `timesviewed` int(11) NOT NULL,
  `nome_file` varchar(255) NOT NULL,
  `tipo_file` varchar(255) NOT NULL,
  `dati_file` longblob NOT NULL,
  `nome_file2` varchar(200) NOT NULL,
  `tipo_file2` varchar(255) NOT NULL,
  `dati_file2` longblob NOT NULL,
  `nome_file3` varchar(255) NOT NULL,
  `tipo_file3` varchar(255) NOT NULL,
  `dati_file3` longblob NOT NULL,
  `nome_file4` varchar(255) NOT NULL,
  `tipo_file4` varchar(255) NOT NULL,
  `dati_file4` longblob NOT NULL,
  `nome_file5` varchar(255) NOT NULL,
  `tipo_file5` varchar(255) NOT NULL,
  `dati_file5` longblob NOT NULL,
  `ts` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `provinciaid` int(255) NOT NULL,
  `user_id` int(11) NOT NULL,
  `cittaid` int(11) NOT NULL,
  `regioneid` int(11) NOT NULL,
  `clienteid` int(11) NOT NULL,
  `tipoid` int(11) NOT NULL,
  `condizioniid` int(11) NOT NULL,
  `id_image` int(5) NOT NULL,
  `click_annuncio` int(11) NOT NULL,
  PRIMARY KEY (`id_annunci`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=193 ;
 
Nienete rimane a 0 :(


Ma perché le ho provate tutteeeee :((((

Mi sorge solo un dubbio ???

Io utilizzo text wrangler, ma anche con aptana che mi da i vari colori,la variabile WHERE id = {$_GET['id']}" non diventa blu ma rimane rossa
come "UPDATE annunci SET click_annuncio = click_annuncio + 1 WHERE id = {$_GET['id']}" .....

Invece in questa interrogazione user_id=".$_SESSION['user_id']." la variabile $_SESSION e blu, potrebbe essere un problema ???
 
Ultima modifica:

Discussioni simili