Jump to content

php average and voting problem


silverglade

Recommended Posts

hi, ive been working on this for 2 days  and cant get it to work. so any help is GREATLY appreciated. i have 2 forms, one is to submit qualities of a "friend" and grade them by averaging. which works fine. the other form is to search for a friend name, and output something like this " david has an average grade of A, 10 users voted.

 

i just cant get it to work, im not sure whats wrong with my sql/php.

 

here is the full code.

 

<?php
include("connect1.php");


error_reporting(E_ALL);  //error reporting php function
////////////////////////////////////////
////////////////////////////////////////


// escape username and password for use in SQL//person said on board "looks fine" like this
//to prevent sql injections
  
$field2 = mysql_real_escape_string($field2);
$field3 = mysql_real_escape_string($field3);


/// query db and loop through rows example

$field2 = $_POST['friend'];
$field3   = $_POST['zip'];
$field4   = $_POST['grade1'];
$field5   = $_POST['grade2'];
$field6   = $_POST['grade3'];
$field7 = $_POST['grade4'];


$find = $_POST['find'];


$field4 = (int)$field4;
$field5 = (int)$field5;
$field6 = (int)$field6;
$field7 = (int)$field7;


    
$total = 4;
$sum = $field4 + $field5 + $field6 + $field7;       
$average = $sum/$total;

if(isset($_POST['Submit'])){

$votes=$votes++;

if ($average <= 1)  {
$grade = "F";
  echo "You have given $field2 a grade of <strong>F.</strong> ";
  
} else if ($average > 1 && $average <= 2) { 
  $grade = "D";
  echo "You have given $field2 a grade of <strong>D.</strong> ";

} else if ($average > 2 && $average <= 3) { 
   $grade = "C";
  echo "You have given $field2 a grade of <strong>C.</strong> ";

} else if ($average > 3 && $average <= 4) {
   $grade = "B"; 
  echo "You have given $field2 a grade of <strong>B.</strong> ";

} else if ($average > 4 && $average <= 5)  {
   $grade = "A";
  echo "You have given $field2 a grade of <strong>A.</strong> ";

} 

///you need to know all the vote values, then divide them by the total, to get average
///where do i store all the vote values? you have to store all the votes for each specific friend. but how? then i have to be able to update the grade based on all the averages.
/*Quick suggestion without too much thought, would be to have all the "grades" in a separate table and join them on the userid.

id - numeric - [record number]
uid - numeric [FK for user table]
type - char - [code to identify which grade]
value - numeric - [value for the grading]
vid - numeric - [id of voter]


that covers another of your questions. How to stop fake voting.*/

mysql_query("INSERT INTO friendgrade (grade, friend, zip,courtesy,stability,loyalty,attitude, votes) VALUES('$field2','$field3', '$field4' , '$field5',' $field6', '$field7','$votes' )  ON DUPLICATE KEY UPDATE courtesy = courtesy + $field4,  stability = stability + $field5, loyalty = loyalty + $field6, attitude = attitude + $field7");


}//end isset

  
  
  
  //output the friend's row into an array and average all rows of his attributes.
if(isset($_POST['submit'])){
  $query="SELECT friend, loyalty, courtesy, stability, attitude , votes
FROM friendgrade
WHERE friend  = '$find'";
$result=mysql_query($query); 

if(mysql_num_rows($result) > 0)
{
$userinfo = mysql_fetch_array($result); //put friends row into an array $userinfo
$votes = $userinfo['votes'];
$final_grade= ($userinfo[1]+$userinfo[2]+$userinfo[3]+$userinfo[4])/4; //compute final grade

//average the SQL output friend's total grade for all users input

     if ($final_grade <= 1)  {

     echo $userinfo[0] ." has an average grade of <strong>F.</strong> ". $userinfo[5] . " people voted.";
  
   } else if ($final_grade > 1 && $final_grade <= 2) { 
  
     echo $userinfo[0] ." has an average grade of <strong>D.</strong> ". $userinfo[5] . " people voted.";

   } else if ($final_grade > 2 && $final_grade <= 3) { 
    
     echo $userinfo[0]." has an average grade of <strong>C.</strong> ". $userinfo[5] . " people voted.";

   } else if ($final_grade > 3 && $final_grade <= 4) {
   
     echo $userinfo[0]." has an average grade of <strong>B.</strong> ". $userinfo[5] . " people voted.";

   } else if ($final_grade > 4 && $final_grade <= 5)  {
   
     echo $userinfo[0]." has an average grade of <strong>A.</strong> ". $userinfo[5] . " people voted.";

    } 
   else {

echo "Odd results ".$userinfo[0]." $final_grade ".$userinfo[1]." ".$userinfo[2]." ".$userinfo[3]." ".$userinfo[4]."<br />";

}

}//end if


}//end isset

  




    
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Update Statement</title>
<style type="text/css">
<!--
.style1 {color: #990000}
.style2 {color: #0066FF}
.style3 {color: #0000CC}
.style4 {color: #993399}
-->
</style>
</head>

<body>

</p>
<div align="center">WELCOME TO THE FRIENDGRADER</div>
<p>Please enter a friend, their zip code, and rate them with the following criteria.<span class="style4"></span><br />
</p>
<form id="form1" name="form1" method="post" action="">

  <table border="0">
   
    <tr>
      <td>Friend</td>
      <td>
        <input name="friend" type="text" id="friend" /></td>
    </tr>
    <tr>
      <td>zip code</td>
      <td>
       <input name="zip" type="text" id="zip" />      </td>
    </tr>
    <tr>
      <td>courtesy</td>
      <td><table>
        <tr>
          <td>
            <input type="radio" name="grade1" value="1" id="RadioGroup1_0" />
            very poor
            <input type="radio" name="grade1" value="2" id="RadioGroup1_1" />
poor
<input type="radio" name="grade1" value="3" id="RadioGroup1_2" />
ok
<input type="radio" name="grade1" value="4" id="RadioGroup1_3" />
good
<input type="radio" name="grade1" value="5" id="RadioGroup1_4" />
excellent </td>
        </tr>
       
      </table>      </td>
    </tr>
   
   
    <tr>
      <td>stability</td>
      <td><input type="radio" name="grade2" id="very_poor3" value="1" />
very poor
  <input type="radio" name="grade2" id="poor3" value="2" />
poor
<input type="radio" name="grade2" id="ok3" value="3" />
ok
<input type="radio" name="grade2" id="good3" value="4" />
good
<input type="radio" name="grade2" id="excellent3" value="5" />
excellent</td>
    </tr>
    <tr>
      <td>loyalty</td>
      <td><input type="radio" name="grade3" id="very_poor4" value="1" />
very poor
  <input type="radio" name="grade3" id="poor4" value="2" />
poor
<input type="radio" name="grade3" id="ok4" value="3" />
ok
<input type="radio" name="grade3" id="good4" value="4" />
good
<input type="radio" name="grade3" id="excellent4" value="5" />
excellent</td>
    </tr>
    <tr>
      <td>attitude</td>
      <td><input type="radio" name="grade4" id="very_poor5" value="1" />
very poor
  <input type="radio" name="grade4" id="poor5" value="2" />
poor
<input type="radio" name="grade4" id="ok5" value="3" />
ok
<input type="radio" name="grade4" id="good5" value="4" />
good
<input type="radio" name="grade4" id="excellent5" value="5" />
excellent</td>
    </tr>
    <tr>
      <td> </td>
      <td><input type="submit" name="Submit" value="Submit" /></td>
    </tr>
  </table>
   

</form>
<form id="form2" name="form2" method="post" action="">
<table width="335" border="1">
    <tr>
      <td width="325"> search friends
          <input type="text" name="find" id="find" />     </td>
    </tr>
    <tr>
      <td><input type="submit" name="submit" id="submit" value="submit" /></td>
    </tr>
  </table>
  </form>

</body>
</html>

Link to comment
https://forums.phpfreaks.com/topic/189291-php-average-and-voting-problem/
Share on other sites

$field2 = mysql_real_escape_string($field2);
$field3 = mysql_real_escape_string($field3);


/// query db and loop through rows example

$field2 = $_POST['friend'];
$field3   = $_POST['zip'];
$field4   = $_POST['grade1'];
$field5   = $_POST['grade2'];
$field6   = $_POST['grade3'];
$field7 = $_POST['grade4'];

 

Should be:

 

/// query db and loop through rows example

$field2 = $_POST['friend'];
$field3   = $_POST['zip'];
$field4   = $_POST['grade1'];
$field5   = $_POST['grade2'];
$field6   = $_POST['grade3'];
$field7 = $_POST['grade4'];

$field2 = mysql_real_escape_string($field2);
$field3 = mysql_real_escape_string($field3);

 

$votes=$votes++;

 

Apparently you have no idea what $votes++ does and thus you also have no idea what the above code does. That code does this:

 

$votes = $votes;
$votes++;

 

I disagree with:

 

type - char - [code to identify which grade]

 

There is no need to store this data as it will be re-calculated on each vote leave it out and create a function called getGrade() that takes one parameter $average to calculate his grade.

 

vid - numeric - [id of voter]
uid - numeric [FK for user table]

 

Is IMO the same.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.