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
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.

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • 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.