silverglade Posted January 21, 2010 Share Posted January 21, 2010 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> Quote Link to comment https://forums.phpfreaks.com/topic/189291-php-average-and-voting-problem/ Share on other sites More sharing options...
ignace Posted January 21, 2010 Share Posted January 21, 2010 $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. Quote Link to comment https://forums.phpfreaks.com/topic/189291-php-average-and-voting-problem/#findComment-999311 Share on other sites More sharing options...
silverglade Posted January 21, 2010 Author Share Posted January 21, 2010 great! thanks very much for looking through my code. is this any better? $votes=0; $votes++; also, do you know why when the user enters a friend to search, nothing happens? any more help GREATLY appreciated. thank you. derek Quote Link to comment https://forums.phpfreaks.com/topic/189291-php-average-and-voting-problem/#findComment-999316 Share on other sites More sharing options...
ignace Posted January 21, 2010 Share Posted January 21, 2010 It should be $votes++ Quote Link to comment https://forums.phpfreaks.com/topic/189291-php-average-and-voting-problem/#findComment-999330 Share on other sites More sharing options...
silverglade Posted January 21, 2010 Author Share Posted January 21, 2010 ok thank you Quote Link to comment https://forums.phpfreaks.com/topic/189291-php-average-and-voting-problem/#findComment-999338 Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.