PDA

View Full Version : voting average and votes cast increment problem


silverglade
01-20-2010, 09:40 PM
hi, ive been working on this all day 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>&nbsp;</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>

and here is the page so you can try it out.

http://oddnerdrum.info/friendgrade_a2.php

edbr
01-21-2010, 01:13 AM
your find friend form has
action="" so it will not do anything it must point to where your script is

edbr
01-21-2010, 06:41 AM
whats this for?

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

davidj
01-21-2010, 06:46 AM
your find friend form has
action="" so it will not do anything it must point to where your script is

Na

By omitting the action value you submit to the same page.

edbr
01-21-2010, 07:29 AM
there you go, live and learn

davidj
01-21-2010, 01:32 PM
whats this for?

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

That is Type Casting

making sure that those vars can only contain integers or whats in them are converted to that cast type

Looking at that code it looks like its a 3rd party script so I suggest that you seek help from where you downloaded it. You may get it sorted quicker

davidj
01-21-2010, 01:52 PM
Na

By omitting the action value you submit to the same page.

Additionally the following is another way of passing a query-string to the same page

Note: the missing page name.
<form action="?key1=value1&key2=value2"

Although some may say its frowned upon but it works

edbr
01-22-2010, 02:50 AM
i always use $_SERVER['PHP_SELF'], never given an alternate way a thought.
re the OP, echoing $find is correct so i would look at connection or the select statement