helldanger1
GForum VIP
- Entrou
- Ago 1, 2007
- Mensagens
- 29,629
- Gostos Recebidos
- 1
Avaliações dos usuários em PHP
Sistema criado em PHP e MySQL para implementar a possibilidade de que os usuários possam votar uma página web.
Por Emmanuel García De Caro
O processo é parecido, ou melhor, é o mesmo empregado para tirar qualquer média, por exemplo: a média de notas de um estudante.
PTOS ACUMULADOS / TOTAL DE ACUMULAÇÕES
Para isso, utilizaremos uma tabela de dados:
<? CREATE TABLE `avaliacoes` (
`id_noticia` int(9) NOT NULL default '0',
`num_votos` int(20) NOT NULL default '0',
`ptos` int(20) NOT NULL default '0'
) TYPE=MyISAM;
?>
Cabe destacar que não é necessário utilizar uma tabela de dados individual, sempre e quando se conte com uma tabela geral de artigos ou conteúdos e obviamente se disponham pelo menos dos dois últimos campos desta tabela, para o funcionamento do script.
Este sistema trabalha com 1 só registro por artigo ou conteúdo, onde o campo id_noticia, se refere ao identificador de nossa notícia ou conteúdo, num_votos; o total de votos realizados em torno desse conteúdo e ptos a soma de todos os votos:
Por exemplo:
id_noticia= 00001 - nossa primeira notícia
num_votos= 3 - somente três votos nesta notícia.
Ptos= 15 - é provável que os três tenham votado por 5 pontos.
Então, logicamente, a avaliação média é de 5 ptos.
Código Fonte:
<?
#####CONEXÃO A MYSQL
@mysql_connect('localhost','usuario','pass')or die ('Falhou a conexão: '.mysql_error());
@mysql_select_db('base_de_dados')or die ('Erro ao selecionar a BD: '.mysql_error());
////end conexão
$SSQL_=mysql_query("SELECT * FROM avaliações WHERE id_noticia='".$_GET[id]."'")or die(mysql_erro());
$array_d=mysql_fetch_array($SSQL_);
$avaliacaO_total=@round($array_d[ptos]/$array_d[num_votos],2);
if(isset($_POST[valor])){
if(mysql_num_rows($SSQL_)==0){
@mysql_query("INSERT INTO avaliacoes VALUES('".$_GET[id]."','1','".$_POST[valor]."')")or die ('ERRO AO INSERIR REGISTRO: '.mysql_error());
}else{
@mysql_query("UPDATE avaliacoes SET num_votos=num_votos+1,ptos=ptos+".$_POST[valor]." WHERE id_noticia='".$_GET[id]."'")or die ('ERRO AO MODIFICAR REGISTRO: '.mysql_error());
}
header('Location:'.$REQUEST_URI);
exit;
}
'<strong>Avaliação Média : '.$avaliacaO_total.'</strong> <div style="background-color:#EFEFEF; width:50px"><img width="'.($ avaliacaO _total*5).'" height="6" style="background-color: #000099"></div> <br>Total de votos: '.$array_d[num_votos];
?><hr>
<form action="<? $REQUEST_URI;?>" method="post">
Nova avaliação:
<select name="valor" id="valor">
<? for ($i=1; $i<=10 ; $i++) '<option value="'.$i.'">'.$i.'</option>';?>
</select>
<input type="submit" value="Votar por este artigo">
</form>
Explicando:
Antes de nada, como de costume criamos a conexão ao servidor de mysql; onde devemos fornecer nossos dados de acesso reais.
Selecionamos a base de dados sobre a qual trabalharemos.
E geramos uma petição ao servidor Mysql mysql_query(); onde solicitamos os registros armazenados previamente por cada conteúdo ou artigo.
Atribuímos à variável $array_d, a matriz devolvida por mysql_fetch_array(), para logo agrupar na variável $avaliacaO_total; o valor devolvido pela divisão entre $array_d[ptos] y $array_d[num_votos], arredondamos o valor com 2 decimais round(), colocamos o @ ao começo da função para evitar que se mostrem possíveis erros se por acaso a divisão for entre 0 (zero).
Finalmente, iniciamos uma condição para comprovar se ($_POST[valor]) está definida, ou seja, se está se processando o formulário para inserir novas avaliações. Se a condição avalia TRUE então executamos uma série de instruções, sendo a primeira uma nova condição:
if(mysql_num_rows($SSQL_)==0):
Para comprovar se ainda não há nenhum registro e avaliação e inserir um novo.
@mysql_query("INSERT INTO…
Do contrário ( else) quer dizer nesta ocasião que pelo menos uma pessoa já votou e por isso não podemos fazer um novo registro, ou melhor, uma modificação do já existente.
@mysql_query("UPDATE avaliações…
Posteriormente, sem importar qual das duas rotinas encontra selecionado o script, realiza um encaminhamento header(Location: … ) a .$REQUEST_URI, que é exatamente a mesma URL , para que o usuário veja os dados atualizados. Ou seja, seu voto adicionado na lista.
Finalmente, imprimimos o resultado, com um gráfico e adicionamos o formulário que será utilizado para uma próxima votação.
Já ficaria a sua escolha, modificá-lo um pouco (se desejar) para que o usuário possa votar somente 1 vez.
Sistema criado em PHP e MySQL para implementar a possibilidade de que os usuários possam votar uma página web.
Por Emmanuel García De Caro
O processo é parecido, ou melhor, é o mesmo empregado para tirar qualquer média, por exemplo: a média de notas de um estudante.
PTOS ACUMULADOS / TOTAL DE ACUMULAÇÕES
Para isso, utilizaremos uma tabela de dados:
<? CREATE TABLE `avaliacoes` (
`id_noticia` int(9) NOT NULL default '0',
`num_votos` int(20) NOT NULL default '0',
`ptos` int(20) NOT NULL default '0'
) TYPE=MyISAM;
?>
Cabe destacar que não é necessário utilizar uma tabela de dados individual, sempre e quando se conte com uma tabela geral de artigos ou conteúdos e obviamente se disponham pelo menos dos dois últimos campos desta tabela, para o funcionamento do script.
Este sistema trabalha com 1 só registro por artigo ou conteúdo, onde o campo id_noticia, se refere ao identificador de nossa notícia ou conteúdo, num_votos; o total de votos realizados em torno desse conteúdo e ptos a soma de todos os votos:
Por exemplo:
id_noticia= 00001 - nossa primeira notícia
num_votos= 3 - somente três votos nesta notícia.
Ptos= 15 - é provável que os três tenham votado por 5 pontos.
Então, logicamente, a avaliação média é de 5 ptos.
Código Fonte:
<?
#####CONEXÃO A MYSQL
@mysql_connect('localhost','usuario','pass')or die ('Falhou a conexão: '.mysql_error());
@mysql_select_db('base_de_dados')or die ('Erro ao selecionar a BD: '.mysql_error());
////end conexão
$SSQL_=mysql_query("SELECT * FROM avaliações WHERE id_noticia='".$_GET[id]."'")or die(mysql_erro());
$array_d=mysql_fetch_array($SSQL_);
$avaliacaO_total=@round($array_d[ptos]/$array_d[num_votos],2);
if(isset($_POST[valor])){
if(mysql_num_rows($SSQL_)==0){
@mysql_query("INSERT INTO avaliacoes VALUES('".$_GET[id]."','1','".$_POST[valor]."')")or die ('ERRO AO INSERIR REGISTRO: '.mysql_error());
}else{
@mysql_query("UPDATE avaliacoes SET num_votos=num_votos+1,ptos=ptos+".$_POST[valor]." WHERE id_noticia='".$_GET[id]."'")or die ('ERRO AO MODIFICAR REGISTRO: '.mysql_error());
}
header('Location:'.$REQUEST_URI);
exit;
}
'<strong>Avaliação Média : '.$avaliacaO_total.'</strong> <div style="background-color:#EFEFEF; width:50px"><img width="'.($ avaliacaO _total*5).'" height="6" style="background-color: #000099"></div> <br>Total de votos: '.$array_d[num_votos];
?><hr>
<form action="<? $REQUEST_URI;?>" method="post">
Nova avaliação:
<select name="valor" id="valor">
<? for ($i=1; $i<=10 ; $i++) '<option value="'.$i.'">'.$i.'</option>';?>
</select>
<input type="submit" value="Votar por este artigo">
</form>
Explicando:
Antes de nada, como de costume criamos a conexão ao servidor de mysql; onde devemos fornecer nossos dados de acesso reais.
Selecionamos a base de dados sobre a qual trabalharemos.
E geramos uma petição ao servidor Mysql mysql_query(); onde solicitamos os registros armazenados previamente por cada conteúdo ou artigo.
Atribuímos à variável $array_d, a matriz devolvida por mysql_fetch_array(), para logo agrupar na variável $avaliacaO_total; o valor devolvido pela divisão entre $array_d[ptos] y $array_d[num_votos], arredondamos o valor com 2 decimais round(), colocamos o @ ao começo da função para evitar que se mostrem possíveis erros se por acaso a divisão for entre 0 (zero).
Finalmente, iniciamos uma condição para comprovar se ($_POST[valor]) está definida, ou seja, se está se processando o formulário para inserir novas avaliações. Se a condição avalia TRUE então executamos uma série de instruções, sendo a primeira uma nova condição:
if(mysql_num_rows($SSQL_)==0):
Para comprovar se ainda não há nenhum registro e avaliação e inserir um novo.
@mysql_query("INSERT INTO…
Do contrário ( else) quer dizer nesta ocasião que pelo menos uma pessoa já votou e por isso não podemos fazer um novo registro, ou melhor, uma modificação do já existente.
@mysql_query("UPDATE avaliações…
Posteriormente, sem importar qual das duas rotinas encontra selecionado o script, realiza um encaminhamento header(Location: … ) a .$REQUEST_URI, que é exatamente a mesma URL , para que o usuário veja os dados atualizados. Ou seja, seu voto adicionado na lista.
Finalmente, imprimimos o resultado, com um gráfico e adicionamos o formulário que será utilizado para uma próxima votação.
Já ficaria a sua escolha, modificá-lo um pouco (se desejar) para que o usuário possa votar somente 1 vez.