24. december 2005 - 13:48Der er
12 kommentarer og 1 løsning
Simpelt matematik med while()
Hejsa!
Jeg er igang med at lave et point system til mit forum, som fungerer lidt ligesom her på exp.dk
men når jeg skal regne brugernes point sammen, så kan jeg ikke få det til at virke, den viser nul (0). :-(
Jeg regner pointene sammen på den her måde:
$hentpoint = mysql_query("SELECT pointtil FROM forum_sporg WHERE pointtil = '$pbrugernavn'") or die(mysql_error()); while($vispoint = mysql_fetch_array($hentpoint)){ $ialtfp = $ialtfp + $vispoint[pointtil]; } $brugerpoint = mysql_query("SELECT point FROM brugere WHERE brugernavn = '$pbrugernavn'") or die(mysql_error()); $visbrugerpoint = mysql_fetch_array($brugerpoint); $ialt = $ialtfp + $visbrugerpoint[point]; echo $ialt;
Tror måske det er fordi at den ene variabel bliver defineret i en while løkke, det skal lige siges at der ikke er nogen point i variablen $brugerpoint, for de har slet ikke fået point endnu:)
Ehm hvis jeg tolker dit script rigtigt så gør du der her i først SQL:
"SELECT pointtil FROM forum_sporg WHERE pointtil = '$pbrugernavn'"
hvor pointtil er et brugernavn?
og så prøver du at
$ialtfp = $ialtfp + $vispoint[pointtil];
altså lægge et brugernavn til en tal værdi? :)
I teorien kunne du gøre sådan her (jeg gætter på at til hvert spørgsmål er der en tal værdi, der fortæller hvor mange point man får.. her kalder jeg den "point_tal"):
"SELECT SUM(point_tal) FROM forum_sporg WHERE pointtil = '$pbrugernavn'" GROUP BY $pbrugernavn
Nu har jeg gjort sådan her: $hentpoint = mysql_query("SELECT SUM(pointtil) FROM forum_sporg WHERE pointtil = '$pbrugernavn' GROUP BY '$pbrugernavn'") or die(mysql_error()); mysql_query("UPDATE brugere SET point = '$hentpoint' WHERE brugernavn = '$pbrugernavn'") or die(mysql_error());
Men så bliver pointene i tabellen brugere = Resource id #12 ?
Jeg har fundet ud af det, brugte den methode jeg selv lavede, men det var jo dig der påmindede mig om at jeg prøvede at lægge et navn til et tal, så det har jeg rettet og nu virker det :-)
At du får Resource id # 12 ind i din tabel, skyldes at du ikke har fetchet noget data, men blot afviklet et kald mod databasen..
$hentpoint = mysql_query("SELECT SUM(pointtil) AS pointtil FROM forum_sporg WHERE pointtil = '$pbrugernavn' GROUP BY '$pbrugernavn'") or die(mysql_error());
mysql_query("UPDATE brugere SET point = '".mysql_result($query, 0, 'pointtil')."' WHERE brugernavn = '$pbrugernavn'") or die(mysql_error());
Personligt ville jeg foretrække ovenstående metode end at udføre beregningen i PHP..
men hvis brugerne har fået point på nogle andre måder, så bliver de jo ikke talt med så har man kun de point man har fået i forumet.. hvordan man ordne det, der er en variabel med brugernes point som bliver sat før mine query's den hedder $ppoint
Det er et meget ambitiøst projekt at gå i gang med, men det er jo ikke nødvendigvis en dårlig ting !-)
Tag for eksempel dette scenarie:
// Bruger A svarer på Bruger B's spørgsmål til 10 point // Bruger B accepterer Bruger A's svar
$point_query = mysql_query("SELECT point FROM forum_sporg WHERE forum_id = 1234"); $point_transfer = mysql_result($point_query, 0, 'point');
// nu har vi antallet af point vi skal overføre mellem 2 brugere // lad os først give pointene til Bruger A
mysql_query("UPDATE brugere SET brugerens_point=brugerens_point+$point_transfer WHERE brugerens_navn = '".mysql_escape_string('Bruger A')."'");
// og så tager vi 10 point fra Bruger B
mysql_query("UPDATE brugere SET brugerens_point=brugerens_point-$point_transfer WHERE brugerens_navn = '".mysql_escape_string('Bruger B')."'");
---
Der ind i mellem skriver man en ordenlig portion validering for at undgå snyderi, og evt. fejl. Fx kan man have minus point?
Jeg skrev engang for længe siden noget meget tilsvarende i ASP, og det var ikke nogen nem opgave.. Hvis jeg skrev det i dag ville det nok også være noget med et par hovedbrud eller 2, da sådan nogle ting typisk har det med at udvikle sig voldsomt..
mange tak for det gode svar :-) Jeg kigger på det, men det bliver ikke i dag for vi har noget med fødselsdag hjemme hos os i dag ;-) Men her i mellemjulen bliver det nok :-)
Men ja jeg ved godt sådan nogle ting kan udvikle sig voldsomt, jeg skulle lave en venneliste her i forgårs (ved godt det er en ubruglig ting, men hele mine hjemmeside er bare noget jeg laver for at øve mig i php) og det blev et større projekt en jeg havde regnet med.. hehe
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.