Wackamole Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 (endret) 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 27. januar 2008 av Famen Lenke til kommentar
grimjoey Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 (endret) 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 27. januar 2008 av grimjoey Lenke til kommentar
Wackamole Skrevet 27. januar 2008 Forfatter Del Skrevet 27. januar 2008 ja, dette er gjort... Jeg har èn tabell med Sang navn, SangID, og aktiv. så har jeg en annen tabell med vote, der det er SangID og total_votes. Tusen takk for koden, skal teste den nå Lenke til kommentar
grimjoey Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 (endret) 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 27. januar 2008 av grimjoey Lenke til kommentar
Wackamole Skrevet 27. januar 2008 Forfatter Del Skrevet 27. januar 2008 hehe.. ja det skal du få.. Når det blir lagt inn en ny stemme, så lages det en ny rad i tabellen, hvor det kommer opp 1 på total_votes og $songidvariabel på songID. Jeg er extremt takknemlig hvis du kan fikse dette! Lenke til kommentar
BigJackW Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 Merk at han også vil ha describe, altså tabellstrukturen. Lenke til kommentar
Wackamole Skrevet 27. januar 2008 Forfatter Del Skrevet 27. januar 2008 oj, unnskyld.. Lenke til kommentar
grimjoey Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 (endret) // 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 27. januar 2008 av grimjoey Lenke til kommentar
Wackamole Skrevet 27. januar 2008 Forfatter Del Skrevet 27. januar 2008 (endret) 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.. Endret 27. januar 2008 av Famen Lenke til kommentar
grimjoey Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 (endret) 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 27. januar 2008 av grimjoey Lenke til kommentar
Wackamole Skrevet 27. januar 2008 Forfatter Del Skrevet 27. januar 2008 (endret) 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 27. januar 2008 av Famen Lenke til kommentar
grimjoey Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 (endret) 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 27. januar 2008 av grimjoey Lenke til kommentar
Wackamole Skrevet 27. januar 2008 Forfatter Del Skrevet 27. januar 2008 (endret) 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 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 27. januar 2008 av Famen Lenke til kommentar
grimjoey Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 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 Lenke til kommentar
Wackamole Skrevet 27. januar 2008 Forfatter Del Skrevet 27. januar 2008 Å yess!... Tusen millioner hjertelig takk! Det var bra! Jeg er helt i hundre nå !! Tusen takk nokk en gang! Lenke til kommentar
grimjoey Skrevet 27. januar 2008 Del Skrevet 27. januar 2008 (endret) 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 27. januar 2008 av grimjoey Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå