Jump to content


Photo

Sistema De Enquete


  • Faça o login para participar
51 replies to this topic

#1 MastersRoX

MastersRoX

    EDITADO

  • Banidos
  • PipPipPipPipPipPipPipPip
  • 774 posts
  • Sexo:Não informado

Posted 14/12/2005, 23:12

Ae galera!

Precizo fazer um sistema onde possam ser adicionadas quantas enquetes quiserem.
Fiz uma tabela chamada enquetes, com os campos (n sei se a logica está correta... é o 1° sistema de enquete que desenvolvo):

id int(2)
data varchar(10)
pergunta varchar(200)
resposta1 varchar(50)
resposta2 varchar(50)
resposta3 varchar(50)
resposta4 varchar(50)
resposta5 varchar(50)
votos_total varchar(5)
votos_resp1 varchar(5)
votos_resp2 varchar(5)
votos_resp3 varchar(5)
votos_resp4 varchar(5)
votos_resp5 varchar(5)

No caso, eu to fazendo o sistema pra cada enquete ter no maximo 5 respostas.
Bom, eu consigo adicionar enquetes no bd sem problemas...

Mas travei agora... pq... vamos supor q eu criei uma enquete com 5 respostas... OK.. vai imprimir a enquete corretamente ... pq ela possui 5 respostas.

Mas se eu criar uma enquete com 2 respostas apenas... como vou fazer para ele exibrir apenas os campos de resposta do BD q tenham algo escrito ? pq se nao, vai ter 3 bottoes de rádio sem nada escrito...

Ai ..começei a fazer assim:

(pag q exibe a enquete) enquete.php

<?
include("info.php");
$sql = mysql_query("SELECT * FROM enquetes where id='$id'");
while($dados = mysql_fetch_array($sql)) {
$id = $dados["id"];
$data = $dados["data"];
$pergunta = $dados["pergunta"];

$resposta1 = $dados["resposta1"];
$resposta2 = $dados["resposta2"];
$resposta3 = $dados["resposta3"];
$resposta4 = $dados["resposta4"];
$resposta5 = $dados["resposta5"];

$votos_resp1 = $dados["votos_resp1"];
$votos_resp2 = $dados["votos_resp2"];
$votos_resp3 = $dados["votos_resp3"];
$votos_resp4 = $dados["votos_resp4"];
$votos_resp5 = $dados["votos_resp5"];
$votos_total = $dados["votos_total"];
?>
<title><? echo"$pergunta"; ?></title>

<?
echo"
<font size='2' face='Verdana, Arial, Helvetica, sans-serif'><b>$pergunta</b><br><br></font>
//---------------------------------------------------
//
//            aqui??? como faço ?
//
//---------------------------------------------------
<font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">Total de votos: $votos_total</font><BR>
<font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">Enquete iniciada em: $data</font><br>";
}
?>
<body bgcolor="#FFFFCC">


É isso.. vlw!

#2 Thales Medeiros

Thales Medeiros

    24 Horas

  • Usuários
  • 426 posts
  • Sexo:Não informado
  • Localidade:Juiz de Fora/MG
  • Interesses:Programação em geral. Programo em PHP, ASP, PERL, VB, Delphi, C/C++, Java e com banco d dados&lt;br&gt;&lt;br&gt;Gosto tb d ajudar. Se precisar d mim, basta postar uma msg no Forum! Se eu souber, te responderei...

Posted 14/12/2005, 23:56

Fala, Master! Tudo bem?

Kra... Te parabenizo imensamente pela iniciativa! Só aprendemos uma linguagem quando desenvolvemos nossos sistemas. Aquele papo de q na internet tudo se copia só ajuda a quem precisa de coisas simples. Quem quer aprender a se virar sozinho tem q por a mão na massa, mesmo! Afinal... Que sistema que baixamos da internet que tem tudo aquilo que precisamos com a nossa cara? Sistemas personalizados, só nossos!

Portanto, chega de baboseira e vamos à ajuda q vc pediu..

Em primeiro lugar... Vamos criticar um pouco sua tabela. Não é criticar pejorativamente, ok? É uma crítica pra te ajudar a crescer...

- Sugiro que o campo data seja realmente do tipo DATE. Use TIMESTAMP, DATETIME, qualquer coisa. Mas não VARCHAR. Isto ajuda na velocidade da pesquisa qdo vc desejar ordenar pela data. Pode não ser necessário neste sistema, mas habitue-se a fazer assim, pois um dia vc vai precisar disto!

- Sei q ainda não teve nem tempo de testar este modelo de dados pra saber se os campos a serem usados seriam estes, mesmo, ou se tem algo desnecessário, mas já te digo de antemão que o campo votos_total não é necessário, visto que o número total de votos é a soma dos campos de votos. Certo?

- Como vc guardará SEMPRE números nos campos dos votos, faça-os do tipo INT, ou SMALLINT, ou MEDIUMINT, ou BIGINT, ou qquer coisa! Mas não os deixe como VARCHAR. Qdo alguém votar, por exemplo, sua consulta poderá ser simplesmente esta: "UPDATE enquetes SET votos_resp1=votos_resp1+1", no caso de um voto para a resposta 1.

Agora, um último detalhe a respeito do seu código, antes de falar o q realmente interessa...

Quando vc faz a busca pelos dados da enquete em questão, vc usa o seguinte código:

$sql = mysql_query("SELECT * FROM enquetes where id='$id'");
while($dados = mysql_fetch_array($sql)) {
...
}

Entenda que o while a gente só usa no caso de muitos registros sendo retornados (mais de um). Desta forma podemos ir "varrendo" entre os registros encontrados e ir imprimindo um a um seus valores. No entanto, no caso em questão, vc ainda faz a busca que mais prova a não necessidade de usar o while: vc utiliza "where id=$id". Se vc quer buscar apenas um registro cujo id é um específico, então vc tem a certeza de q somente um registro será retornado. Ao invés de ter a preocupação de abrir chaves depois do while e fechar depois de trabalhar com os registros, faça exatamente isto:

$sql = mysql_query("SELECT * FROM enquetes where id='$id'");
$dados = mysql_fetch_array($sql);

E pronto! Nada de while.

Bom... Agora à real questão...

//---------------------------------------------------
//
//            O que fazer aqui ?
//
//---------------------------------------------------

Ao meu ver, só existem duas possibilidades neste ponto. Uma gambiarra e outra com um modelo de dados mais bem definido. Vamos à gambiarra primeiro:

//---------------------------------------------------
//
//            Faça assim, usando gambiarra:

for($i=1;i<=5;i++) {
    if($dados["resposta$i"]<>"")
        echo "<input type=radio name=voto value=$i> ".$dados["resposta$i"]."<br>";
}

//
//---------------------------------------------------

Este jeito funciona! Afinal, se o campo respostaX estiver vazio, significa que não existe aquela resposta. Mas nem conte q um dia te mostrei isto, hein? Isto foge completamente ao modelo ideal de um sistema de enquetes. Pq? Simplesmente pq todo sistema deve ter sua tabela modelada para que o computador saiba de dados concretos. Quem ensinou pro sistema que campo vazio significa que aquela resposta não existe? Isto é simplesmente inaceitável.

O correto seria vc acrescentar um campo dizendo o número de respostas existentes.

Me lembro de um dos sistemas de enquetes q já fiz no qual eu fiz até uns efeitos de JavaScript fazendo o formulário de cadastro das enquetes conter um campo no qual vc seleciona qts respostas a enquete vai ter. Pode ter entre 2 e 6 respostas neste sistema. Qdo vc seleciona 3, por exemplo, os campos de 4 a 6 são desabilitados e ficam inativos. E qdo vc manda salvar a enquete, o sistema verifica se realmente aquele número de respostas foram digitados (se não possui nenhum campo vazio).

Portanto, sugiro q vc mude sua estrutura de dados para a seguinte:

id int(2)
data DATE
pergunta varchar(200)
resposta1 varchar(50)
resposta2 varchar(50)
resposta3 varchar(50)
resposta4 varchar(50)
resposta5 varchar(50)
num_respostas int(1)
votos_resp1 int(5)
votos_resp2 int(5) 
votos_resp3 int(5) 
votos_resp4 int(5) 
votos_resp5 int(5)

E o código ficará assim:

<?
include("info.php");
$sql = mysql_query("SELECT a.*,DATEFORMAT(data,'%d/%m/%Y') as data_formatada,SUM(a.votos_resp1, a.votos_resp2, a.votos_resp3, a.votos_resp4, a.votos_resp5) as total FROM enquetes where id='$id'");
$dados = mysql_fetch_array($sql))
$id = $dados["id"]; 
$data = $dados["data"];
$pergunta = $dados["pergunta"]; 

$resposta1 = $dados["resposta1"]; 
$resposta2 = $dados["resposta2"]; 
$resposta3 = $dados["resposta3"]; 
$resposta4 = $dados["resposta4"]; 
$resposta5 = $dados["resposta5"]; 

$votos_resp1 = $dados["votos_resp1"]; 
$votos_resp2 = $dados["votos_resp2"]; 
$votos_resp3 = $dados["votos_resp3"]; 
$votos_resp4 = $dados["votos_resp4"]; 
$votos_resp5 = $dados["votos_resp5"]; 
$votos_total = $dados["total"]; 
?>
<title><? echo"$pergunta"; ?></title>

<? 
echo"
<font size='2' face='Verdana, Arial, Helvetica, sans-serif'><b>$pergunta</b><br><br></font>
//---------------------------------------------------
//
//            Faça assim:

for($i=1;$i<=$dados["num_respostas"];$i++)
        echo "<input type=radio name=voto value=$i> ".$dados["resposta$i"]."<br>";
}

//
//---------------------------------------------------
<font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">Total de votos: $votos_total</font><BR>
<font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">Enquete iniciada em: $data</font><br>";
}
?>
<body bgcolor="#FFFFCC">

Bom... Saiba que não existe um CERTO. Existe só o COMUMENTE USADO. Pra mim, falar q algo é padrão é bobagem. Modelo de dados padrão... Besteira! O bom-senso é quem manda! Mas e se vc fizesse d outro jeito, ou daquele q ali em cima eu chamei d gambiarra? Vai funcionar do mesmo jeito, ok?

Por favor, não se chateie com minhas críticas. D boa q quero q vc aprenda pra valer!

Espero ter ajudado d alguma forma!

Um abraço,
Thales Medeiros.

P.S.: Não imprima nada antes do <body>, ok? Afinal, o q é pra ser visto na página faz parte do corpo dela, tem q estar dentro do <body>. É só mais uma "boa conduta".
Sucesso é ganhar dinheiro fazendo o que você faria de graça.

#3 MastersRoX

MastersRoX

    EDITADO

  • Banidos
  • PipPipPipPipPipPipPipPip
  • 774 posts
  • Sexo:Não informado

Posted 15/12/2005, 00:14

Caraca manow! vlw mesmo!! .. vc me deu uma aula cara!

Ele deu erro.. na linha 4:

Parse error: parse error in c:\apache\htdocs\xxx\enquete.php on line 4

$sql = mysql_query("SELECT a.*,DATEFORMAT(data,'%d/%m/%Y') as data_formatada,SUM(a.votos_resp1, a.votos_resp2, a.votos_resp3, a.votos_resp4, a.votos_resp5) as total FROM enquetes where id='$id'");


Você tbm poderia explicar pra mim essa linha...
achei meia confusa... assim.. nao intendi os comando.

Aproveitandoo topico... antes dvc postar isso.. eu fiz assim:

<?
include("info.php");
$sql = mysql_query("SELECT * FROM enquetes where id='$id'");
$dados = mysql_fetch_array($sql);
$id = $dados["id"];
$data = $dados["data"];
$pergunta = $dados["pergunta"];

$resposta1 = $dados["resposta1"];
$resposta2 = $dados["resposta2"];
$resposta3 = $dados["resposta3"];
$resposta4 = $dados["resposta4"];
$resposta5 = $dados["resposta5"];

$votos_resp1 = $dados["votos_resp1"];
$votos_resp2 = $dados["votos_resp2"];
$votos_resp3 = $dados["votos_resp3"];
$votos_resp4 = $dados["votos_resp4"];
$votos_resp5 = $dados["votos_resp5"];
$votos_total = $dados["votos_total"];
?>
<title><? echo"$pergunta"; ?></title>

<?
echo"<font size='2' face='Verdana, Arial, Helvetica, sans-serif'><b>$pergunta</b><br><br></font>
<form name=\"form1\" method=\"post\" action=\"enquete_votar.php?id=$id\">
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
    <tr>
      <td>
<input type=\"radio\" name=\"votar\" value=\"re2\"><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>$resposta2
      </td>
  </tr>
  <tr>
  <input type=\"radio\" name=\"votar\" value=\"re1\"><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>$resposta1
  </tr>
      <tr>
      <td>
<input type=\"radio\" name=\"votar\" value=\"re3\"><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>$resposta3
      </td>
  </tr>
      <tr>
      <td>
<input type=\"radio\" name=\"votar\" value=\"re4\"><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>$resposta4
      </td>
  </tr>
      <tr>
      <td>
<input type=\"radio\" name=\"votar\" value=\"re5\"><font size='2' face='Verdana, Arial, Helvetica, sans-serif'>$resposta5
      </td>
  </tr>
</table><br>
<input type=\"submit\" class=\"campos\" name=\"Submit\" value=\"Votar\"> <font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">| Ver resultado parcial |<br><br>
</form>


<font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">Total de votos: $votos_total</font><BR>
<font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">Enquete iniciada em: $data</font><br>";

?>
<link href="link.css" rel="stylesheet" type="text/css">
<body bgcolor="#FFFFCC">


enquete_votar.php

<?
$voto = $_POST['votar'];
include("info.php");

//--------- Adiciona 1 voto no total e 1 voto se a resposta for a 1° --------------
if($voto == "re1") {
$sql = mysql_query("SELECT * FROM enquetes where id='$id'");
$rows = mysql_fetch_array($sql);
$votos_resp1 = $rows["votos_resp1"];
$votos_total = $rows["votos_total"];
$id = $rows["id"];
$votos_resp1 = $votos_resp1 + 1;
$votos_total = $votos_total + 1;
$sql = mysql_query("UPDATE enquetes SET votos_resp1='$votos_resp1', votos_total='$votos_total' WHERE id='$id'");
} else {
}
//--------- Adiciona 1 voto no total e 1 voto se a resposta for a 2° --------------
if($voto == "re2") {
$sql2 = mysql_query("SELECT * FROM enquetes where id='$id'");
$rows2 = mysql_fetch_array($sql2);
$votos_resp2 = $rows2["votos_resp2"];
$votos_total = $rows2["votos_total"];
$id = $rows2["id"];
$votos_resp2 = $votos_resp2 + 1;
$votos_total = $votos_total + 1;
$sql2 = mysql_query("UPDATE enquetes SET votos_resp2='$votos_resp2', votos_total='$votos_total' WHERE id='$id'");
} else {
}
//--------- Adiciona 1 voto no total e 1 voto se a resposta for a 3° --------------
if($voto == "re3") {
$sql3 = mysql_query("SELECT * FROM enquetes where id='$id'");
$rows3 = mysql_fetch_array($sql3);
$votos_resp3 = $rows3["votos_resp3"];
$votos_total = $rows3["votos_total"];
$id = $rows3["id"];
$votos_resp3 = $votos_resp3 + 1;
$votos_total = $votos_total + 1;
$sql3 = mysql_query("UPDATE enquetes SET votos_resp3='$votos_resp3', votos_total='$votos_total' WHERE id='$id'");
} else {
}
//--------- Adiciona 1 voto no total e 1 voto se a resposta for a 4° --------------
if($voto == "re4") {
$sql4 = mysql_query("SELECT * FROM enquetes where id='$id'");
$rows4 = mysql_fetch_array($sql4);
$votos_resp4 = $rows4["votos_resp4"];
$votos_total = $rows4["votos_total"];
$id = $rows4["id"];
$votos_resp4 = $votos_resp4 + 1;
$votos_total = $votos_total + 1;
$sql4 = mysql_query("UPDATE enquetes SET votos_resp4='$votos_resp4', votos_total='$votos_total' WHERE id='$id'");
} else {
}
//--------- Adiciona 1 voto no total e 1 voto se a resposta for a 5° --------------
if($voto == "re5") {
$sql5 = mysql_query("SELECT * FROM enquetes where id='$id'");
$rows5 = mysql_fetch_array($sql5);
$votos_resp5 = $rows5["votos_resp5"];
$votos_total = $rows5["votos_total"];
$id = $rows5["id"];
$votos_resp5 = $votos_resp5 + 1;
$votos_total = $votos_total + 1;
$sql4 = mysql_query("UPDATE enquetes SET votos_resp5='$votos_resp5', votos_total='$votos_total' WHERE id='$id'");
} else {
}
?>
<link href="link.css" rel="stylesheet" type="text/css">
<body bgcolor="#FFFFCC">


Mas.. vou tentaar fazer como vc está dizendo... ^^
Novamente agradeço pela sua ajuda cara!
Abraço.

Edição feita por: MastersRoX, 15/12/2005, 00:17.


#4 Thales Medeiros

Thales Medeiros

    24 Horas

  • Usuários
  • 426 posts
  • Sexo:Não informado
  • Localidade:Juiz de Fora/MG
  • Interesses:Programação em geral. Programo em PHP, ASP, PERL, VB, Delphi, C/C++, Java e com banco d dados&lt;br&gt;&lt;br&gt;Gosto tb d ajudar. Se precisar d mim, basta postar uma msg no Forum! Se eu souber, te responderei...

Posted 15/12/2005, 02:53

Vortemos!

Bom... Muito estranho o erro q está dando. Eu até vi um erro na consulta, mas não é motivo pra dar "parse error". Veja se na linha anterior (a do include "info.php";) vc não esqueceu do ponto-e-vírgula.

Aliás... Me sinto MUITO envergonhado, pq a consulta que eu te passei está COMPLETAMENTE errada!!! Estou mto acostumado com consultas no banco Oracle, lidando todo dia com este banco, então só falei coisas q não funcionam no MySql...

Vou te explicar o q me pediu!

Vc está bem habituado ao famoso "select * from tabela", certo? Pois vc está bem no início... Aos poucos vc vai começando a fazer umas consultas bem mais cabeludas e vai vendo q SQL é bem mais interessante do q vc imagina...

Vamos entender a consulta que mandei (errada, mas corrigirei agora) para o MySql:

SELECT
    a.*,
    DATE_FORMAT(data,'%d/%m/%Y') AS data_formatada,
    (votos_resp1+votos_resp2+votos_resp3+votos_resp4+votos_resp5) as total
FROM enquetes AS a
WHERE id='$id'

Esqueça a função SUM(), ok? Ela não existe no MySql! Pra somar campos, basta usar o +, mesmo!

Para começar, pra que serve este "a" que tanto uso?

Vamos voltar ao famoso "SELECT * FROM tabela"... Ele é idêntico a isto:

SELECT a.* FROM tabela AS a

Estou simplesmente dando um "apelido" pra minha tabela. Toda vez que uso a palavra AS, significa que estou apelidando o que estava definido anteriormente. Portanto, quando fiz SELECT a.*, significa que eu queria todos os campos da tabela "a", que no caso, é a "tabela" que foi apelidada de "a". É só uma mania que tenho por trabalhar com consultas gigantescas o dia todo... Não era nem necessário seu uso na consulta q te mandei, portanto, me desculpe pela confusão.

Próximo passo, e aquele DATE_FORMAT? Bem... Se vc tem um campo do tipo DATE, toda vez q vc fizer um SELECT buscando este campo, ele virá no seguinte formato: "2005-12-15", por exemplo. Portanto, para exibi-lo de forma mais bonitinha, a gente formata a exibição usando a função DATE_FORMAT. Assim eu especifico em qual formato ele virá. Veja:

DATE_FORMAT(data,'%d/%m/%Y')

Isto fará com que se busque o campo 'data' formatado como sendo dd/mm/yyyy. Pq aqui eu tb uso o "AS data_formatada"? Pq se eu fizer isto:

SELECT DATE_FORMAT(data,'%d/%m/%Y') FROM tabela

E depois eu der um mysql_fetch_array() na variável de busca, não existirá $campo['data']. Somente o campo $campo["DATE_FORMAT(data,'%d/%m/%y')"]. Sabia? Por isso a gente "renomeia" este nome grande para simplesmente data_formatada. Desta forma eu consigo acessar o dado retornado usando $campo['data_formatada'].

O (campo1+campo2+campo3+...) no lugar do SUM(campo1,campo2,...) vc já deve imaginar... Vai retornar a soma de todos os campos dentro do parênteses. Depois eu renomeio esta expressão gigante para simplesmente "total" usando "(a+b+c...) AS total".

Agora entenda... Consulta boa é aquela que trás exatamente os dados que você irá precisar. Portanto, o SELECT ideal seria este:

SELECT
    DATE_FORMAT(data,'%d/%m/%Y') AS data,
    pergunta,
    resposta1,
    resposta2,
    resposta3,
    resposta4,
    resposta5,
    votos_resp1,
    votos_resp2,
    votos_resp3,
    votos_resp4,
    votos_resp5,
    (votos_resp1+votos_resp2+votos_resp3+votos_resp4+votos_resp5) AS total
FROM
    enquetes AS a
WHERE id=$id

Desta forma não viria o campo "data" no formato do MySql, nem o campo ID, que é desnecssário, pois vc já sabe que ele está na variável $id. No entanto, para não ter que escrever isto tudo na consulta que eu te mostrei, eu busquei enquetes.*, pois só vieram 2 campos a mais, e isto não interferirá na performance da consulta. Mas saiba... Quando eu faço esta busca:

SELECT
    a.*,
    DATE_FORMAT(data,'%d/%m/%Y') AS data_formatada,
    (votos_resp1+votos_resp2+votos_resp3+votos_resp4+votos_resp5) AS total
FROM
    enquetes AS a
WHERE id=$id

Eu PRECISO que o "DATE_FORMAT(...)" seja "AS data_formatada", e não "AS data", pois nos campos a.* já existe um campo chamado "data". Senão daria ambigüidade no retorno no código em PHP.

Se tiver alguma dúvida com a consulta, pergunte!

Agora vamos ao seu código... Ele tá bem grande, né? Não precisa de nada daquile monte de if pra if voto=re1, voto=re2, etc...

Olha que código pequeno (comparado ao seu, é minúsculo, na verdade):

include("info.php");
$sql=mysql_query("SELECT a.*,DATE_FORMAT(data,'%d/%m/%Y') AS data_formatada, (votos_resp1+votos_resp2+votos_resp3+votos_resp4+votos_resp5) AS total FROM enquetes AS a WHERE id=$id");

$dados = mysql_fetch_array($sql);
?><html><head>
<title><? echo"$pergunta"; ?></title>
<link href="link.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFCC">
<? 
echo"<font size='2' face='Verdana, Arial, Helvetica, sans-serif'><b>$pergunta</b><br><br></font>
<form name=\"form1\" method=\"post\" action=\"enquete_votar.php?id=$id\">
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">
<?
for($i=1;$i<=$dados['num_respostas'];$i++) {
?>      <tr> 
      <td>
<input type=\"radio\" name=\"votar\" value=\"<?=$i?>\"><font size='2' face='Verdana, Arial, Helvetica, sans-serif'><?=$dados['resposta'.$i]?>
      </td>
  </tr>
<?}?>
</table><br>
<input type=\"submit\" class=\"campos\" name=\"Submit\" value=\"Votar\"> <font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">| Ver resultado parcial |<br><br>
</form>


<font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">Total de votos: <?=$dados['total']?></font><BR>
<font size=\"1\"><font face=\"Verdana, Arial, Helvetica, sans-serif\">Enquete iniciada em: <?=$dados['data_formatada']?></font><br>";

?>

enquete_votar.php:
<?
include("info.php");
$votar=$_POST['votar'];
$id=$_GET['id'];

//--------- Adiciona 1 voto para qualquer resposta --------------
mysql_query("UPDATE enquetes SET votos_resp$votar=votos_resp$votar+1 WHERE id='$id'");
?>
<link href="link.css" rel="stylesheet" type="text/css">
<body bgcolor="#FFFFCC">

Bom... Pense nestes códigos com calma... Muita calma, mesmo! E se tiver qualquer dúvida, pode perguntar!

Um abraço,
Thales Medeiros.
Sucesso é ganhar dinheiro fazendo o que você faria de graça.

#5 MastersRoX

MastersRoX

    EDITADO

  • Banidos
  • PipPipPipPipPipPipPipPip
  • 774 posts
  • Sexo:Não informado

Posted 19/12/2005, 14:18

E ai cara!

To com uma duvida...

Como faço, para que na hora de adicionar uma enquete o campo num_respostas marcar quantos campos do form estão com algo escrito ? pq, pelo q eu intendi, eh ele q vai determinar quantos radio buttons vao ter na enquete neh!

vlw!

Edição feita por: MastersRoX, 19/12/2005, 14:49.


#6 goiaba2000

goiaba2000

    Tô com sono!

  • Usuários
  • 1118 posts
  • Sexo:Não informado
  • Localidade:Sobradinho-DF

Posted 19/12/2005, 14:27

link da enquete funcionando:
http://www.ibrad.org.br

Estrutura da tabela:
DROP TABLE IF EXISTS `base_enquetes`;
CREATE TABLE `base_enquetes` (
  `EnquetesID` int(4) NOT NULL auto_increment,
  `EnquetesEnquete` varchar(150) NOT NULL default '',
  `EnquetesTexto1` varchar(50) NOT NULL default '',
  `EnquetesTexto2` varchar(50) NOT NULL default '',
  `EnquetesTexto3` varchar(50) NOT NULL default '',
  `EnquetesTexto4` varchar(50) NOT NULL default '',
  `EnquetesVoto1` int(4) NOT NULL default '0',
  `EnquetesVoto2` int(4) NOT NULL default '0',
  `EnquetesVoto3` int(4) NOT NULL default '0',
  `EnquetesVoto4` int(4) NOT NULL default '0',
  `REMOTE_ADDR` varchar(16) NOT NULL default '',
  PRIMARY KEY  (`EnquetesID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3;

código da pag principal:
<?php
for($i=1;	$i<=4;	$i++){
	if(!$linha["Enquete"]["EnquetesTexto".$i]){
  continue;
	}
?>
              <tr>
                <td height="20" class="Cont">
                  <label>
                  <input type="radio" name="Enquete" id="Enquete" value="<?=$i;?>" class="noBorder">
                  <?=$linha["Enquete"]["EnquetesTexto".$i];?>
                  </label>
                  <br>      </td>
              </tr>
<?php
}
?>

codigo do popup:
<?php
$altMax  = 130;
$altMin  = 1;
$larMax  = 100;

$query	= $DataBase->Query("SELECT * FROM base_enquetes WHERE EnquetesID = '$LocalID'");
$linha	= $DataBase->FetchAll($query);

$contador	= 0;
$soma  = 0;
$votos  = array();
$tamanhos	= array();
$porcento	= array();

for($i=1;	$i<=4;	$i++){
	if($linha["EnquetesTexto".$i]){
  $contador++;
  $soma	+=$linha["EnquetesVoto".$i];
	}
	$votos[$i]	= $linha["EnquetesVoto".$i];
}
$maior  = max($votos);

for($i=1;	$i<=4;	$i++){
	$porcento[$i]	= $votos[$i]/$soma*100;
	$porcento[$i]	= (int)$porcento[$i];
	$tamanhos[$i]	= $altMax/$maior*$votos[$i];
	$tamanhos[$i]	= (int)$tamanhos[$i];
}

$larRel	= $larMax/$contador;
?>
<table width="240" height="220" border="0" align="center" cellpadding="2" cellspacing="2">
  <tr>
  <td class="Cont"><strong><?=$linha["EnquetesEnquete"];?></strong></td>
  </tr>
<?php
for($i=1;	$i<=$contador;	$i++){
?>
  <tr>
    <td class="Cont">
   <strong><?=$linha["EnquetesTexto".$i];?></strong>
	<table width="100%"  border="0" cellspacing="0" cellpadding="0">
        <tr>
          <td width="<?=$tamanhos[$i]+5;?>">
    <table width="<?=$tamanhos[$i];?>" height="14" border="1" cellpadding="0" cellspacing="0" bordercolor="#102E43" bgcolor="#2976AE">
            <tr>
              <td bordercolor="#2976AE"></td>
            </tr>
          </table></td>
          <td class="Cont">
          <?=$linha["EnquetesVoto".$i];?> votos (<?=$porcento[$i];?>%)</td>
        </tr>
      </table></td>
  </tr>
<?php
}
?>
  <tr>
    <td class="Cont"><strong>Total</strong>: <?=$soma;?> votos </td>
  </tr>
  <tr>
    <td align="right" valign="bottom"><a href="?LocalID="><img src="../Sys/Botoes.php?texto=_M_%20ENQUETES"></a>&nbsp;&nbsp;<a onClick="window.close();"><img src="../Sys/Botoes.php?texto=FECHAR"></a></td>
  </tr>
</table>

PHP + UML + OO + Flash + MySQL = IMBATIVEL

http://www.guilardi.com.br
- portifólio
http://www.deusehmais.com.br
- projeto atual

#7 Thales Medeiros

Thales Medeiros

    24 Horas

  • Usuários
  • 426 posts
  • Sexo:Não informado
  • Localidade:Juiz de Fora/MG
  • Interesses:Programação em geral. Programo em PHP, ASP, PERL, VB, Delphi, C/C++, Java e com banco d dados&lt;br&gt;&lt;br&gt;Gosto tb d ajudar. Se precisar d mim, basta postar uma msg no Forum! Se eu souber, te responderei...

Posted 19/12/2005, 22:48

Oi, Masters! Td bem?

Olha um exemplo de formulário q poderia te dizer o número de respostas entradas:

<form method=post action=cadastra.php>
Pergunta: <input type=text name=pergunta><br>
Número de respostas: <input type=text value=5 onChange=habilita(this.value)><br>
Resposta 1: <input type=text name=resp1><br>
Resposta 2: <input type=text name=resp2><br>
Resposta 3: <input type=text name=resp3><br>
Resposta 4: <input type=text name=resp4><br>
Resposta 5: <input type=text name=resp5><br>
<input type=submit value=CADASTRAR></form>

E, entre <head> e </head>, defina a seguinte função:

function habilita(num) {
    for(var i=1;i<=5;i++) document.forms[0]['resp'+i].disabled=(i>num);
}

Este é um simples exemplo!

Um abraço,
Thales Medeiros.
Sucesso é ganhar dinheiro fazendo o que você faria de graça.

#8 MastersRoX

MastersRoX

    EDITADO

  • Banidos
  • PipPipPipPipPipPipPipPip
  • 774 posts
  • Sexo:Não informado

Posted 19/12/2005, 22:53

alguem pode me ajudar a gerar a barra grafica e % dos resultados ???!!!!!

por enquanto, coloquei apenas quantos votos tem cada opcao:

<?
include("info.php");
$sql=mysql_query("SELECT a.*,DATE_FORMAT(data,'%d/%m/%Y') AS data_formatada, (votos_resp1+votos_resp2+votos_resp3+votos_resp4+votos_resp5) AS total FROM enquetes AS a WHERE id=$id");

$dados = mysql_fetch_array($sql);
?><html><head>
<title><? echo"$pergunta"; ?></title>
<link href="link.css" rel="stylesheet" type="text/css">
<style type="text/css">
<!--
.style1 {font-family: Verdana, Arial, Helvetica, sans-serif}
.style2 {font-size: 9px}
.style3 {font-size: 9px; font-family: Verdana, Arial, Helvetica, sans-serif; }
-->
</style>
</head>
<body bgcolor="#FFFFCC">
<?
echo"<font size='2' face='Verdana, Arial, Helvetica, sans-serif'><b>"; ?><?=$dados['pergunta'.$i]?><? echo"</b><br><br></font>
<form name=\"form1\" method=\"post\" action=\"enquete_votar.php?id=$id\">
<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\">"; ?>
<?
for($i=1;$i<=$dados['num_respostas'];$i++) {
echo"    <tr>
    <td> <font size=\"2\" face=\"Verdana, Arial, Helvetica, sans-serif\">"; ?>
<?=$dados['resposta'.$i]; echo"</font> <font size=\"1\" face=\"Verdana, Arial, Helvetica, sans-serif\">(<b>"; ?>
<?=$dados['votos_resp'.$i];  echo"</b>)</font>"; ?>
    <? echo"</td>
</tr>"; ?>
<? } ?>
</table><br>
</font></font><span class="style2"><font Arial, Helvetica, sans-serif\">
</form>
<span class="style1">

Total de votos:
<?=$dados['total']?>
</span></font><span class="style1"><BR>
Enquete iniciada em:
<?=$dados['data_formatada']?>
</span></span><br>
<body bgcolor="#FFFFCC">



#9 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 20/12/2005, 06:56

simples vc define isso no WIDTH da IMAGEM

pega o número de PORCENTAGEM do VOTO e deixa ele arrendondado...

<img src='imagem.gif' width='AQUI VC USA A FUNCAO ROUND'>

T+
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#10 MastersRoX

MastersRoX

    EDITADO

  • Banidos
  • PipPipPipPipPipPipPipPip
  • 774 posts
  • Sexo:Não informado

Posted 20/12/2005, 13:27

qual campo em vez de VARCHAR eu uso pra por apenas numeros..... q eu vo ter q multiplicar.. somar .. e tazlz ??

Edição feita por: MastersRoX, 20/12/2005, 13:45.


#11 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 20/12/2005, 13:50

INT

onde so aceita NUMERO

leia a primeira resposta do Thales Medeiros que explica tudo e o q vc tem q mudar para ter um boa enquete...

T+
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#12 MastersRoX

MastersRoX

    EDITADO

  • Banidos
  • PipPipPipPipPipPipPipPip
  • 774 posts
  • Sexo:Não informado

Posted 20/12/2005, 14:23

vlw cara...
consegui fazer... fico perfeito! votal de votos em cada opcao, % e barra.. fico show... vlw mesmo galera!!!!

soh falta um detalhe.. que nao consegui.....é ver na hora de adicioanar uma enquete, ver quantos campos do form foram preenchidos... e adicionar esse N° na tabela... no campo num_respostas ... o Thales Medeiros falo uma maneira.. mas n funfo aki....

vlw galera!

Edição feita por: MastersRoX, 20/12/2005, 14:32.


#13 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 20/12/2005, 14:30

if (!empty($_POST['CAMPO'])) { echo "CAMPO NÃO ESTA VAZIO"; } else { echo "campo VAZIO"; }

pronto apartir deste IF que fiz vc terá uma noção de como fazer....

T+
-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951

#14 MastersRoX

MastersRoX

    EDITADO

  • Banidos
  • PipPipPipPipPipPipPipPip
  • 774 posts
  • Sexo:Não informado

Posted 20/12/2005, 14:32

to tentando assim:

<?
if(empty($_POST['resposta1']))
$erro .= + 1;
if(empty($_POST['resposta2']))
$erro .= + 1;
if(empty($_POST['resposta3']))
$erro .= + 1;
if(empty($_POST['resposta4']))
$erro .= + 1;
if(empty($_POST['resposta5']))
$erro .= + 1;

echo $erro;
?>


mas ele emprime 11111 invez de 5!

#15 Goku Jr

Goku Jr

    Nilson

  • Usuários
  • 3757 posts
  • Sexo:Masculino

Posted 20/12/2005, 14:34

e pq vc ta JUNTANDO um valor com o outro...

use asssim

$erro = $erro +1;

ou $erro++;

T+

Edição feita por: Goku Jr, 20/12/2005, 14:35.

-----------------------------------------------------------------------
PALMEIRAS - Primeiro campeão do mundo em 1951




0 user(s) are reading this topic

0 membro(s), 0 visitante(s) e 0 membros anônimo(s)

IPB Skin By Virteq