Avatar billede webstuff Nybegynder
24. december 2005 - 13:48 Der 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:)
Avatar billede webstuff Nybegynder
24. december 2005 - 13:56 #1
Det er det her regnestykke der noget i vejen med:

$ialtfp = $ialtfp + $vispoint[pointtil];
Avatar billede fixxxer Nybegynder
24. december 2005 - 14:25 #2
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
Avatar billede webstuff Nybegynder
24. december 2005 - 14:34 #3
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 ?
Avatar billede webstuff Nybegynder
24. december 2005 - 14:37 #4
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 :-)

Så læg et svar :-D
Avatar billede fixxxer Nybegynder
24. december 2005 - 14:42 #5
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..
Avatar billede fixxxer Nybegynder
24. december 2005 - 14:43 #6
At de overhovedet kan have en tekstværdi stående i en værdi til tal, lyder i øvrigt som et dårligt database design..!
Avatar billede webstuff Nybegynder
24. december 2005 - 14:57 #7
Okay.. så prøver jeg det :-)

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
Avatar billede webstuff Nybegynder
24. december 2005 - 14:58 #8
og btw, så er jeg meget nybegynder i både databaser og php, så det skal nok passe at det er dårligt database design :-)
Avatar billede fixxxer Nybegynder
24. december 2005 - 15:01 #9
I stedet for at belaste databasen med at udregne total hele tider, kunne du blot hver gang der en transaktion "flytte" pointene?
Avatar billede webstuff Nybegynder
24. december 2005 - 15:02 #10
det forstår jeg ikke.. :-(
undskyld men har kun programmeret i lidt over en måned
Avatar billede fixxxer Nybegynder
24. december 2005 - 15:19 #11
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..
Avatar billede webstuff Nybegynder
24. december 2005 - 15:27 #12
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

Men endnu engang mange tak :-)
Avatar billede fixxxer Nybegynder
24. december 2005 - 16:18 #13
Velbekommen, og glædelig jul :)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester