Avatar billede b_ Nybegynder
10. august 2007 - 15:10 Der er 17 kommentarer og
1 løsning

Rate Script

Jeg er ved at lave et rate scipt. Jeg har en hovedside hvorfra man så kan vælge det man synes er spændende og kigger nærmere og evt. give en karakter.

Mit problem består i at koden som kommer om lidt virker fint hvis man er inde på siden hvor man kan give karakter og så sletter sin cache, session osv, men hvis jeg starter på siden som linker til de sider man kan rate støder jeg på et problem. Når jeg klikker mig ind på en underside halvere den uanset hvad man stemme sidens samlede karakter. Kan simpelthen ikke se fejlen. Har nogle radio buttons med værdi (0-100):
<input type=\"radio\" name=\"vote\" value=\"0\">
<input type=\"radio\" name=\"vote\" value=\"10\"> osv.

Form action loader sig selv.


Selve session og db koden ser sådan ud:

$vote = mysql_real_escape_string($_POST["vote"]);
 
    if ( empty( $_SESSION['stem'] ) )
    {
          $_SESSION['stem'] = array();
    }

    if ( !in_array( $_GET['id'], $_SESSION['stem'] ) ) {
        $_SESSION['stem'][] = $_GET['id'];
               
        $sql  = "select rating from test where test_id = '" . mysql_real_escape_string( $_GET['id'] ) . "'";
          $rating = mysql_result( mysql_query($sql, $conn), 0 );
            if ($rating == 0) {
                $rating += $vote;
            } else {
                $rating = (($rating + $vote) / 2);
            }
     
          $sql  = "update test set rating = $rating where test_id = '" . mysql_real_escape_string( $_GET['id'] ) . "'";
          $result = mysql_query($sql, $conn);
          if ( mysql_affected_rows( $conn ) == 0 ) {
                die("query ikke udført: " . $sql. "<br /><strong>Fejl:</strong>" . mysql_error());
          }
    }
Avatar billede nielle Nybegynder
10. august 2007 - 15:30 #1
Din formen for at beregne gennemsnittet af stemmerne er forkert. Faktisk kan du slet ikke gøre det på den måde du prøver - for at finde gennemsnittet er man nemlig nødt til at have to tal: antallet af stemmer samt summen af alle stemmerne.

Du er derfor nødt til at modifisere din tabel. Du har to muligheder:

1) Enten laver du en tabel med to felter "stemmeAntal" og "stemmeSum". Dem opdatere du så ved hver stemme.

2) Du kan have en tabel med et felt "stemme". Du kan så tilføge en *ny* række til denne for hvre stemme. Derefter udnytter du at der findes en SQL funktion som kan udtrække gennemsnittet - de  hedder AVG:

$sql = "SELECT AVG(stemme) AS stemmGennemsnit FROM dinTabel WHERE test_id = '" . mysql_real_escape_string( $_GET['id'] ) . "'";
Avatar billede b_ Nybegynder
10. august 2007 - 15:42 #2
Hej Nielle, tak for det hurtige svar.

Har også en kolonne i min tabel der registerer hvor mange der har stemt, men ville gøre koden så simpel og overskuelig for jer.

Og angående gennemsnit ved jeg ikke helt hvad jeg tænkte på. Troede jeg var smart og kunne slippe for at gemme den samlede rating. Tror det er varmen :)

Smid et svar
Avatar billede nielle Nybegynder
10. august 2007 - 15:44 #3
Svar :^)

Men tjek lige AVG-funktionen (AVG = Agerage = Gennemsnit).
Avatar billede b_ Nybegynder
10. august 2007 - 16:22 #4
Er lige stødt på et problem med den gammeldags måde:

  $tmpres = 0;
  $tmpantal = $row->antal_rating;
  $tmprate = $row->rating;
  if ($tmpantal < 0) {
    $tmpres = $tmprate / $tmpantal;
  } else {
    $tmpres;
  }

Har lavet overstående gardering så den ikke vil dividere med 0, men når jeg udskriver tmpres er den nul hver gang.
Også hvis jeg bare prøver at dividere $row->rating / $row->antal_rating får jeg en fejl med at jeg dividere med nul selvom jeg kan se i db'en at rating er 530 og antal_rating er 11??? Nogen ideer hvad jeg gør galt
Avatar billede nielle Nybegynder
10. august 2007 - 16:26 #5
$tmpres = 0;
$tmpantal = $row->antal_rating;
$tmprate = $row->rating;

echo "DEBUG: $tmpantal, $tmprate<br>";

if ($tmpantal < 0) {
  $tmpres = $tmprate / $tmpantal;
} else {
  $tmpres;  // HVAD SKAL DER SKE HER?
}
Avatar billede b_ Nybegynder
10. august 2007 - 16:29 #6
DEBUG: 12, 620, så det er rigtig nok


Ved else sætningen skal tmpres jo bare forblive 0
Avatar billede nielle Nybegynder
10. august 2007 - 16:31 #7
Så kan du jo bare helt undlade else-leddet.
Avatar billede b_ Nybegynder
10. august 2007 - 16:32 #8
ja men det løser jo stadig ikke at når jeg udskriver tmpres viser den 0 hver gang
Avatar billede nielle Nybegynder
10. august 2007 - 16:32 #9
De værdier du opgever i 10/08-2007 16:29:03 er ikke de samme som i 10/08-2007 16:22:34 - men det er vel bare fordi at du har lavet en prøve-afstemning?
Avatar billede nielle Nybegynder
10. august 2007 - 16:34 #10
if ($tmpantal > 0) {
...

!
Avatar billede b_ Nybegynder
10. august 2007 - 16:37 #11
jep har stemt en gang imellem dem, men forstår ikke at tmpres udskrives som 0 hver gang.
echo "DEBUG: $tmpres<br>"; til sidst giver 0, så hvor går det galt?
Avatar billede b_ Nybegynder
10. august 2007 - 16:38 #12
NEJ NEJ NEJ NEJ
Avatar billede nielle Nybegynder
10. august 2007 - 16:38 #13
Varmen ...
Avatar billede b_ Nybegynder
10. august 2007 - 16:38 #14
Den var pinlig, mange tak for hjælpen
Avatar billede b_ Nybegynder
10. august 2007 - 16:40 #15
Lige en sidste ting.. Kender du en funktion i php hvor man kan definere længden. Vil fx i dette eks kun viser hele tal?
Avatar billede nielle Nybegynder
10. august 2007 - 16:42 #16
Avatar billede b_ Nybegynder
10. august 2007 - 16:43 #17
takker, du skal nok få fred fra mig nu ;)
Avatar billede nielle Nybegynder
10. august 2007 - 16:44 #18
Selvtak for point :^)
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