Gå til innhold

[LØST]Poll system , vil vise prosent av antall stemmer!


Anbefalte innlegg

Hei,

Jeg skal til og lage et poll system, og har funnet en kode på nettet som gjør antall stemmer om til prosent.

Meen, jeg skal legge alle stemmene i en tabell i en database.

 

Jeg kan vise dere koden jeg har funnet:

Klikk for å se/fjerne innholdet nedenfor

<?php
include_once("db_connect.php");
$sql = mysql_query("SELECT total_votes, COUNT(*) FROM votes GROUP BY songID LIMIT 5");
while($row = mysql_fetch_array($sql)){

echo "<br>".$row["0"];
}

// the questions and the answers
$pool_question="Do you like copy and paste scripts?";
$pool_option[1] = "Yes";
$pool_option[2] = "No";
$pool_option[3] = "Don't know";

// retrieve data saved in files
	$pool_responses[1] = $_GET['res1'];
	$pool_responses[2] = $_GET['res2'];
	$pool_responses[3] = $_GET['res3'];


// get percentajes for each answer in the pool
	// get total number of answers
	$total_responses=$pool_responses[1]+$pool_responses[2]+$pool_responses[3];
	if ($total_responses==0){$total_responses=1;}  // to avoid errors at start
	// compute percentajes (with one decimal number)
	$pool_percentaje[1] = round((100*$pool_responses[1])/$total_responses,1);
	$pool_percentaje[2] = round((100*$pool_responses[2])/$total_responses,1);
	$pool_percentaje[3] = round((100*$pool_responses[3])/$total_responses,1);

// print the form, which includes de answers and the percentajes
print "<center>\n";
print "<form method=post action=".$_SERVER["PHP_SELF"].">\n";
print "<b>".$pool_question."</b>\n";
print "<table cellpadding=4>\n";
// answer 1
print "<tr>\n";
print "<td><input type=radio name=9418899 value=1>  ".$pool_option[1]."</td>\n";
print "<td bgcolor=DDDDFF>".$pool_percentaje[1]."%</td>\n";
print "</tr>\n";
// answer 2
print "<tr>\n";
print "<td><input type=radio name=9418899 value=2>  ".$pool_option[2]."</td>\n";
print "<td bgcolor=DDDDFF>".$pool_percentaje[2]."%</td>\n";
print "</tr>\n";
print "</table>\n";
// answer 3
print "<tr>\n";
print "<td><input type=radio name=9418899 value=3>  ".$pool_option[3]."</td>\n";
print "<td bgcolor=DDDDFF>".$pool_percentaje[3]."%</td>\n";
print "</tr>\n";
print "</table>\n";


?>

 

Jeg må vite hvordan jeg skal fikse dette med mysql...

Denne koden er beregnet på txt filer med antall stemmer, jeg må få denne til og bli dynamisk i forhold til tabellen som alle stemmene ligger i.

 

./Famen

Endret av Famen
Lenke til kommentar
Videoannonse
Annonse

hvordan vet du at denne koden er beregnet for stemmer i tekstfiler? (den er ikke det)

 

red: ok. skjønner. du har endret den selv

 

gjøre om votes til prosent:

 

function percentVote( $votesCount, $votesTotal )
{
 return ( ( $votesCount / $votesTotal ) * 100 );
}

 

red:

du må vise hvordan stemmene dine er lagret. "describe votes;"

 

jeg ville lagret en poll i 3 tabeller.

 

questions (id, question)

answers (id, question_id, answer)

votes (id, question_id, answer_id [, user_id])

 

for å hente tekst og antall stemmer

 

select q.question as question, a.answer as answer, count(v.id) as votes from questions q join answers a on (a.question_id = q.id) join votes v on (v.answer_id = a.id) where q.id = $question_id;

 

user_id i votes gjør at en bruker kun kan vote én gang. ip kan benyttes i stedet om det ikke skal være i et brukersystem.

 

kode eksempel:

 

$res = mysql_query( 'querien ovenfor' );
while ( $row = mysql_fetch_assoc( $res ) )
{
 if ( !isset( $question['text'] ) ) $question['text'] = $row['question'];
 if ( !isset( $question['total'] ) ) $question['total'] = $row['votes'];
 else $question['total'] += $row['votes'];
 $question['answers'][] = $row['answer'];
 $question['votes'][] = $row['votes']; 
}

$output = "<ul>{$question['text']}\n";
foreach ( $question['answers'] as $k => $v )
{
 $percent = percentVote( $question['votes'][$k], $question['total'] )
 $output .= "<li><span style="width:200px">{$v}</span>{$percent}%</li>\n";
}
$output .= "</ul>\n";

print $output;

 

elns

Endret av grimjoey
Lenke til kommentar

koden ovenfor funker ikke for deg uten massive modifikasjoner...

 

jeg kan lage en kode som funker hvis du viser resultatet fra describe på begge tabellene og forklarer meg hvordan du lagrer stemmer.

 

enten lagrer du de ved å inkrementere total_votes i votes tabellen. ellers lager du en ny rad i votes tabellen for hver stemme. da er det to ulike løsninger det kan være. jeg vil helst slippe å skrive begge løsningene.

Endret av grimjoey
Lenke til kommentar

// denne skal hente votes til de 5 mest votede sangene og total antall votes.

$sql = "SELECT songID, COUNT(voteID), (SELECT COUNT(voteID) FROM votes) FROM votes GROUP BY songID ORDER BY songID DESC LIMIT 5";

$res = mysql_query( $sql ) or die( mysql_error() );

while ( $row = mysql_fetch_row( $res ) )
{
 $rows[] = $row;
}

print_r( $rows );

 

klarer du å bruke det arrayet? du må hente sang tittel for å kunne vise frem noe fornuftig resultat. jeg vet ikke så mye om tabellen du har sang titler i.

 

eksempel:

 

$sql = "SELECT s.songname, COUNT(v.voteID), (SELECT COUNT(voteID) FROM votes), v.songID FROM votes v JOIN namethesong s ON (s.songID = v.songID) GROUP BY v.songID ORDER BY COUNT(v.voteID) DESC LIMIT 5";

$res = mysql_query( $sql ) or die( mysql_error() );

$output = "<ul>Stemmer for de 5 mest populære sangene\n";
while ( $row = mysql_fetch_row( $res ) )
{
 // 0 = sang navn, 1 = antall stemmer, 2 = totalt stemmer
 $prosent = ( ( $row[1] / $row[2] ) * 100 );
 $output .= "<li><span style=\"width:200px;\">{$row[0]}</span><span style=\"width:100px;text-align:right;\">{$prosent}</span>%</li>\n";
}
$output .= "</ul>\n";
print $output;

 

red: oppdatert kode

Endret av grimjoey
Lenke til kommentar

Array ( [0] => Array ( [0] => 2 [1] => 2 [2] => 4 ) [1] => Array ( [0] => 1 [1] => 2 [2] => 4 ) )

 

Dette er outputten jeg får, åsså ser jeg ikke prosent funksjonen-..

 

EDIT: Jeg kan absolutt ikke noe med array (tydeligvis), det står helt stille for meg...

 

Jeg kan laste opp strukturen til namethesong (der jeg har sang titlene) hvis du gidder og hjelpe meg med det..

post-91173-1201474058_thumb.jpg

Endret av Famen
Lenke til kommentar

det du får fra arrayet er 2 arrayer som betyr at du har to sanger med stemmer. de to arrayene inneholder sang id, antall stemmer og totalt stemmer respektivt.

 

prosentfunksjonen skrev jeg tidligere

 

red:

 

Array ( 
[0] => Array (  // sang med id 2 
	[0] => 2	// sang id
	[1] => 2	// antall stemmer
	[2] => 4	// totale stemmer
) 
[1] => Array (  // sang med id 1
	[0] => 1 
	[1] => 2 
	[2] => 4 
) 
)

Endret av grimjoey
Lenke til kommentar

slik har jeg gjort det nå:

include_once("db_connect.php");
// fyll inn selv
$sangTabell = 'namethesong';
$sangTabellIdFelt = 'songID';
$sangTabellNavnFelt = 'songname';

$sql = "SELECT s.{$sangTabellNavnFelt}, COUNT(v.voteID), (SELECT COUNT(voteID) FROM votes) FROM votes v, {$sangTabell} s WHERE v.songID = s.{$sangTabellIdFelt} GROUP BY voteID LIMIT 5";

$res = mysql_query( $sql ) or die( mysql_error() );

echo $output = "<ul>De 5 mest populære sangene\n";
while ( $row = mysql_fetch_row( $res ) )
{
 // 0 = sang navn, 1 = antall stemmer, 2 = totalt stemmer
$prosent = ( ( $row[1] / $row[2] ) * 100 )."%";
echo  $output = "<li><span style=\"width:200px;\">{$row[0]}</span><span style=\"text-align:right;\">{$prosent}</span>%</li>\n";
}
echo $output = "</ul>\n";

?>

Sikker ikke helt slik du hadde tenkt deg, men det gir meg en output som nesten er riktig, vis det er flere stemmer på en sang, så kommer sangen opp antall stemmer som er registrert (eks. Dream theater (4stemmer) så kommer Dream theater 25% (4 ganger).

 

EDIT: Forandring i kode, samme resultat.

Endret av Famen
Lenke til kommentar

jeg oppdaterte koden etter at du copierte den sikkert. jeg la til print $output på slutten. prøv den igjen uten å endre noe bortsett fra de 3 føste variabelene. (for å se om det funker. den skal gi deg en liste over de to sangene med % stemmer bak.)

 

red:

mulig det er noe galt med sql'en. litt vanskelig når jeg må skrive med variabler.

Endret av grimjoey
Lenke til kommentar

ok, den printer ingenting, eller i kildekoden printer den ut </ul>

 

// fyll inn selv
$sangTabell = 'namethesong';
$sangTabellIdFelt = 'songID';
$sangTabellNavnFelt = 'songname';

$sql = "SELECT s.{$sangTabellNavnFelt}, COUNT(v.voteID), (SELECT COUNT(voteID) FROM votes) FROM votes v, {$sangTabell} s WHERE v.songID = s.{$sangTabellIdFelt} GROUP BY voteID DESC LIMIT 5";

$res = mysql_query( $sql ) or die( mysql_error() );

[b]$output .= [/b]"<ul>Stemmer for de 5 mest populære sangene\n";
while ( $row = mysql_fetch_row( $res ) )
{
 // 0 = sang navn, 1 = antall stemmer, 2 = totalt stemmer
 $prosent = ( ( $row[1] / $row[2] ) * 100 );
[b]  $output .= [/b]"<li><span style=\"width:200px;\">{$row[0]} </span><span style=\"width:100px;text-align:right;\">{$prosent}</span>%</li>\n";
}
[b]$output .= "</ul>\n";[/b]
print $output;
?>

 

Ok, satte punktum på output variablene (merket)

Og da kommer det opp slik som i stad...

 

EDIT: ja det er noe galt med SQL'en :p Men har fikset det til på en måte, vises i koden overfor...

hmm, FET skrift vises ikke i kode ruten, men du skjønner hva jeg mener

Endret av Famen
Lenke til kommentar

bare hyggelig.

 

red:

jeg testet forresten html/css'en. style="width:xx px;" funker visst ikke i <li> (vertfall ikke i firefox).

 

fjern <ul></ul> og gjør om <li></li> til <div></div> så kanskje det ser bedre ut.

 

ellers kan det være at span ikke har width property.

 

du får prøve deg litt frem så får du sikkert til noe som ser bra ut.

Endret av grimjoey
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...