Jump to content
KS_Scream

[Resolvido] Como fazer contador de cliques em php e mysql?

Recommended Posts

Boa tarde pessoal.

Preciso fazer um contador de cliques para um projeto, tenho o campo "click" na tabela do BD, mas não sei como fazer o contador funcionar, eu fiz até essa parte:

 

<?php
include 'inc/top.php';
require("conect.php");

$id =$_GET['id'];
$sql = "UPDATE usuarios SET click='click+1' WHERE link_id='$id'";
$query = mysql_query($sql) or die (mysql_error());
if ($query){
	header("Location: ".$_GET['link_url']);
}
else {
	echo 'Erro';
	mysql_query($sql) or die (mysql_error());
}
?>

 

Mas o php acusa erro sempre na mesma linha, no "header("Location: ".$_GET['link_url']);", o erro é: "Notice: Undefined index: link_url...". Tentei fazer um select depois do update e antes do header, para pegar o link, mas ele retorna o mesmo erro.

 

Minha index está assim:

 

<?php
require("conect.php");
include 'inc/top.php';
include 'inc/menu.php';

 $sql= "SELECT * FROM usuarios WHERE status=1 ORDER BY click DESC";
$query = mysql_query($sql);
$qtd=mysql_num_rows($query);

while ($resultado = mysql_fetch_assoc($query)) {		
	echo '			
	<div class="mag">
				<div class="category">
					<p>'.$resultado['link_categoria'].'</p>
				</div>
		<img src="img/'.$resultado['foto'].'" alt="img"/>
			<div class="tittle">
				<a href="click.php?id='.$resultado['link_url'].'">'.$resultado['link_title'].'</a>
			</div>
			<div class="cont"><p>Cliques: '.$resultado['click'].'</p></div>
	</div>';
}
mysql_close();
?>

 

Será que alguem pode me dar um auxilio? Ainda estou iniciando no php e tenho algumas dificuldades.

Share this post


Link to post
Share on other sites

tenta assim mano

 

$click = $clicks + 1;

$sql = "UPDATE usuarios SET clicks = $click WHERE link_id=$id";

mysql_query($sql);

Não deu certo também, deu a mesma coisa que antes, nenhum erro, porém não faz update.

Share this post


Link to post
Share on other sites

click é um int ou varchar?

 

$sql = "UPDATE usuarios SET click='click+1' WHERE link_id='$id'";

 

se for int remova as aspas simples, que deve funcionar.

Share this post


Link to post
Share on other sites

Tente o seguinte SQL:

 

        $sql = "UPDATE usuarios SET click=click+1 WHERE link_id='$id'";

 

O erro que está acontecendo não é relacionado ao problema de não estar atualizando.

Share this post


Link to post
Share on other sites

Tente o seguinte SQL:

 

        $sql = "UPDATE usuarios SET click=click+1 WHERE link_id='$id'";

 

O erro que está acontecendo não é relacionado ao problema de não estar atualizando.

 

Obrigado, era as aspas mesmo o erro, o campo é int, agora está atualizando, verifiquei que por erro meu tinha definido:

 

<div class="tittle">
        <a href="click.php?id='.$resultado['link_url'].'">'.$resultado['link_title'].'</a>
                               </div>

Quando o correto seria:

<a href="click.php?id='.$resultado['link_id'].'">'

 

Porém o erro de redirecionamento continua.

 

Segue a tabela do banco:

 

CREATE TABLE IF NOT EXISTS `usuarios` (
 `link_id` int(11) NOT NULL AUTO_INCREMENT,
 `link_title` varchar(255) NOT NULL,
 `link_url` varchar(255) NOT NULL,
 `foto` varchar(100) NOT NULL,
 `link_categoria` varchar(255) NOT NULL,
 PRIMARY KEY (`link_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=19 ;

  • Obrigado! 1

Share this post


Link to post
Share on other sites

Mas exibe algum erro?

 

Tente dar um exit logo depois do header, assim a requisição terminará logo ali e ficará claro pro navegador que você quer um redirect, já que a mensagem HTTP não possuirá um corpo.

 

header("Location: ".$_GET['link_url']);
exit;

Share this post


Link to post
Share on other sites

aqui você vai ter a variavel $_GET['id']

<a href="click.php?id='.$resultado['link_id'].'">'

 

 

não seria $_GET['id'] no lugar de $_GET['link_url']?

onde esta definido $_GET['link_url']?

header("Location: ".$_GET['link_url']);

 

ou você passa mais uma variavel no $_GET

<a href="click.php?id='.$resultado['link_url'].'&link_url='. $resultado['link_url'] .'">'.$resultado['link_title'].'</a>

Edited by shini

Share this post


Link to post
Share on other sites
Mas exibe algum erro?

 

Tente dar um exit logo depois do header, assim a requisição terminará logo ali e ficará claro pro navegador que você quer um redirect, já que a mensagem HTTP não possuirá um corpo.

 

header("Location: ".$_GET['link_url']);

exit;

 

Não deu certo, ele exibe o mesmo erro de antes: "Notice: Undefined index: link_url in..."

 

 

aqui você vai ter a variavel $_GET['id']

<a href="click.php?id='.$resultado['link_id'].'">'

 

 

não seria $_GET['id'] no lugar de $_GET['link_url']?

onde esta definido $_GET['link_url']?

header("Location: ".$_GET['link_url']);

 

ou você passa mais uma variavel no $_GET

<a href="click.php?id='.$resultado['link_url'].'&link_url='. $resultado['link_url'] .'">'.$resultado['link_title'].'</a>

 

Obrigado pela ajuda, mas eis um problema, não sei responder isso ao certo, mas pensei que o $_GET puxava o dado direto do banco, após o select, abaixo vou postar a index:

 

<?php
 $sql= "SELECT * FROM usuarios WHERE status=1 ORDER BY click DESC";
$query = mysql_query($sql);
$qtd=mysql_num_rows($query);

while ($resultado = mysql_fetch_assoc($query)) {		
	echo '			
	<div class="mag">
				<div class="category">
					<p>'.$resultado['link_categoria'].'</p>
				</div>
		<img src="img/'.$resultado['foto'].'" alt="img"/>
			<div class="tittle">
				<a href="click.php?id='.$resultado['link_id'].'">'.$resultado['link_title'].'</a>
			</div>
			<div class="cont"><p>Cliques: '.$resultado['click'].'</p></div>
	</div>';
}
mysql_close();
?>

 

Será que devo mudar algo nessa pag, já que é ela que direciona para o contador "click"?

Sou leigo ainda.

Share this post


Link to post
Share on other sites

deixe assim, veja q agora você esta passando uma variavel chamada link_url e atribuindo o valor $resultado['link_url'] q vem do banco.

<a href="click.php?id='.$resultado['link_url'].'&link_url='. $resultado['link_url'] .'">'.$resultado['link_title'].'</a>

 

 

para ter certeza q esta vindo algum valor no $_GET faça assim:

echo "<pre>";
print_r($_GET);

  • +1 1

Share this post


Link to post
Share on other sites

deixe assim, veja q agora você esta passando uma variavel chamada link_url e atribuindo o valor $resultado['link_url'] q vem do banco.

<a href="click.php?id='.$resultado['link_url'].'&link_url='. $resultado['link_url'] .'">'.$resultado['link_title'].'</a>

 

 

para ter certeza q esta vindo algum valor no $_GET faça assim:

echo "<pre>";
print_r($_GET);

 

Deu certo, ele imprimiu o link, então mudei a saida para:

 

		header("Location: ".$_GET['link_url']);

 

Então ele começou a direcionar, ams parou de fazer o update, então fiz uma pequena alteração nessa linha:

 

<a href="click.php?id='.$resultado['link_url'].'&link_url='. $resultado['link_url'] .'">'.$resultado['link_title'].'</a>

 

para:

 

<a href="click.php?id='.$resultado['link_id'].'&link_url='. $resultado['link_url'] .'">'.$resultado['link_title'].'</a>

 

e funcionou, muito obrigado pela ajuda.

Share this post


Link to post
Share on other sites

usei parte do seu código e fiz assim: index.php

<?php
include_once("conexao.php");

$sql= "SELECT * FROM livros";
$query = $conexao->query($sql);
$dados = $query->fetch_array();
echo $query->num_rows;//testando

while ($resultado = $query->fetch_array()) {		
	echo '			
	<div class="mag">
				<div>
					<p>'.$resultado['titulo'].'</p>
				</div>
		<img src="_galeria/'.$resultado['img1'].'" alt="img"/>
			<div>
				<a href="contaclique.php?id='.$resultado['id'].'&views='.$resultado['cliques'].'">'.$resultado['descricao'].'</a>
			</div>
			<div><p>Cliques: '.$resultado['cliques'].'</p></div>
	</div><hr>';
}
?>

envio dois gets o id do registro e o total de cliques ja registrados. Agora recebendo.. contaclique.php

<?php
require("conexao.php");
$views =$_GET['views'];//recebo os cliques do bd
$id =$_GET['id'];//recebo o id do registro
$conta_c = $views +1;//soma-se mais um
$sql = "UPDATE anuncios SET cliques='$conta_c' WHERE id='$id'";
$query = $conexao->query($sql) or die (mysql_error());
if ($query){
	header("Location: index.php");
}
else {
	echo 'Erro';
	mysql_query($sql) or die (mysql_error());
}
?>

simples neah?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.