PageRenderTime 54ms CodeModel.GetById 25ms RepoModel.GetById 1ms app.codeStats 0ms

/userProfile.php

https://github.com/vroycroft/RestaurantRecommendationWebsite
PHP | 484 lines | 321 code | 105 blank | 58 comment | 27 complexity | 716373e180e2b36727f6973840e523e2 MD5 | raw file
  1. <?php
  2. session_start();
  3. include ("header.php");
  4. $name = $_POST['username'];
  5. $pw = $_POST['password'];
  6. $query = "SELECT * FROM Users WHERE username = '$name' AND password = SHA('$pw');";
  7. $result = mysqli_query($db, $query)
  8. or die("Error querying database.");
  9. $row = mysqli_fetch_array($result);
  10. $firstName = $row['first_name'];
  11. $user_id = $row['user_id'];
  12. $confirmation = mysqli_num_rows($result);
  13. if ($confirmation == 0){
  14. echo "<p><center><b><i><font size=4 face=Georgia color=000066>Incorrect username or password. <br/>";
  15. echo "Please try again by clicking the link below.</font></p></b></i><br/>";
  16. echo "<p><center><b><i><font size=4 face=Georgia color=000066><a href='login.php'>Log In</a></b></i></center></p>";
  17. }else{
  18. $_SESSION['username'] = $name;
  19. $_SESSION['password'] = $pw;
  20. $_SESSION['user_id'] = $user_id;
  21. $firstLetterOfName = substr($firstName, 0, 1);
  22. $theRestOfName = substr($firstName, 1, strlen($firstName)-1);
  23. echo "<p><center><b><i><font size=7 face=Georgia color=000066>W</font><font size=6 face=Georgia>elcome, </font><font size=7 face=Georgia color=000066>$firstLetterOfName</font><font size=6 face=Georgia>$theRestOfName !</font></p></b></i>\n";
  24. ?>
  25. <hr/>
  26. <br/>
  27. <p><center><b><font size=5 face=Georgia color=000066>Restaurant(s) closest to your survey answers:</font>
  28. <?php
  29. $username = $_SESSION['username'];
  30. //echo "username: $username";
  31. $query = "SELECT * FROM `Users` WHERE
  32. username = '$username';";
  33. $result = mysqli_query($db, $query)
  34. or die("Error Querying Database 1");
  35. $numOfRows = mysqli_num_rows($result);
  36. $userAnswers[0] = mysqli_fetch_array($result);
  37. //echo "<li>{$userAnswers[0]['username']}</li>";
  38. //echo "<li>{$userAnswers[0]['price']}</li>";
  39. $query = "SELECT name, price, delivery, takeout, accommodate_groups,
  40. reservations, outside_seating, bar, kids, fast_food,
  41. steakhouse_influence, american_influence, middle_eastern_influence,
  42. asian_influence, italian_influence, chinese_influence,
  43. japanese_influence, indian_influence, french_influence,
  44. greek_influence, mexican_influence, vegetarian_influence,
  45. seafood_influence FROM $table;";
  46. $result = mysqli_query($db, $query)
  47. or die("Error Querying Database");
  48. $numOfRestaurants = mysqli_num_rows($result);
  49. $restaurantVectors[] = array();
  50. if ($numOfRestaurants == 0) {
  51. echo "<h1>No results matched your search!</h1>";
  52. } else {
  53. for($i=0; $i<$numOfRestaurants; ++$i) {
  54. $restaurantVectors[$i] = mysqli_fetch_array($result);
  55. }
  56. //echo "<li>RV: {$restaurantVectors[$i]['name']}</li>";
  57. for ($m = 0; $m <$numOfRestaurants; ++$m) {
  58. $totalDistance = 0;
  59. $numOfAttributes = 22;
  60. $restaurantToCompareName = $restaurantVectors[$m]['name'];
  61. $restaurantToComparePrice = $restaurantVectors[$m]['price'];
  62. $restaurantToCompareDelivery= $restaurantVectors[$m]['delivery'];
  63. $restaurantToCompareTakeOut = $restaurantVectors[$m]['takeout'];
  64. $restaurantToCompareGroups = $restaurantVectors[$m]['accommodate_groups'];
  65. $restaurantToCompareReservations = $restaurantVectors[$m]['reservations'];
  66. $restaurantToCompareOutsideSeating = $restaurantVectors[$m]['outside_seating'];
  67. $restaurantToCompareBar = $restaurantVectors[$m]['bar'];
  68. $restaurantToCompareKids= $restaurantVectors[$m]['kids'];
  69. $restaurantToCompareFF = $restaurantVectors[$m]['fast_food'];
  70. $restaurantToCompareSteak = $restaurantVectors[$m]['steakhouse_influence'];
  71. $restaurantToCompareAmer = $restaurantVectors[$m]['american_influence'];
  72. $restaurantToCompareME= $restaurantVectors[$m]['middle_eastern_influence'];
  73. $restaurantToCompareAsian= $restaurantVectors[$m]['asian_influence'];
  74. $restaurantToCompareItal = $restaurantVectors[$m]['italian_influence'];
  75. $restaurantToCompareChin = $restaurantVectors[$m]['chinese_influence'];
  76. $restaurantToCompareJap = $restaurantVectors[$m]['japanese_influence'];
  77. $restaurantToCompareIndian = $restaurantVectors[$m]['indian_influence'];
  78. $restaurantToCompareFrench = $restaurantVectors[$m]['french_influence'];
  79. $restaurantToCompareGreek = $restaurantVectors[$m]['greek_influence'];
  80. $restaurantToCompareMex = $restaurantVectors[$m]['mexican_influence'];
  81. $restaurantToCompareVeg = $restaurantVectors[$m]['vegetarian_influence'];
  82. $restaurantToCompareSeaFood = $restaurantVectors[$m]['seafood_influence'];
  83. // $totalDistance = abs($restaurantToComparePrice - $userAnswers[0]['price']) + abs($restaurantToCompareDelivery - $userAnswers[0]['delivery']) +
  84. //abs($restaurantToCompareTakeOut - $userAnswers[0]['takeout']) + abs($restaurantToCompareGroups - $userAnswers[0]['accommodate_groups']) + abs($restaurantToCompareReservations - $userAnswers[0]['reservations']) +
  85. //abs($restaurantToCompareOutsideSeating - $userAnswers[0]['outside_seating']) + abs($restaurantToCompareBar - $userAnswers[0]['bar']) +
  86. //abs($restaurantToCompareKids - $userAnswers[0]['kids']) + abs($restaurantToCompareFF - $userAnswers[0]['fast_food']) + abs($restaurantToCompareSteak - $userAnswers[0]['steakhouse_influence']) +
  87. //abs($restaurantToCompareAmer - $userAnswers[0]['american_influence']) + abs($restaurantToCompareME - $userAnswers[0]['middle_eastern_influence']) + abs($restaurantToCompareAsian - $userAnswers[0]['asian_influence']) +
  88. //abs($restaurantToCompareItal - $userAnswers[0]['italian_influence'])+ abs($restaurantToCompareChin - $userAnswers[0]['chinese_influence']) + abs($restaurantToCompareJap - $userAnswers[0]['japanese_influence']) +
  89. //abs($restaurantToCompareIndian - $userAnswers[0]['indian_influence']) + abs($restaurantToCompareFrench - $userAnswers[0]['french_influence']) +
  90. //abs($restaurantToCompareGreek - $userAnswers[0]['greek_influence']) + abs($restaurantToCompareMex - $userAnswers[0]['mexican_influence']) + abs($restaurantToCompareVeg - $userAnswers[0]['vegetarian_influence']) +
  91. //abs($restaurantToCompareSeaFood - $userAnswers[0]['seafood_influence']);
  92. $totalDistance = sqrt(pow($restaurantToComparePrice - $userAnswers[0]['price'], 2) + pow($restaurantToCompareDelivery - $userAnswers[0]['delivery'], 2) +
  93. pow($restaurantToCompareTakeOut - $userAnswers[0]['takeout'], 2) + pow($restaurantToCompareGroups - $userAnswers[0]['accommodate_groups'], 2) + pow($restaurantToCompareReservations - $userAnswers[0]['reservations'], 2) +
  94. pow($restaurantToCompareOutsideSeating - $userAnswers[0]['outside_seating'], 2) + pow($restaurantToCompareBar - $userAnswers[0]['bar'], 2) +
  95. pow($restaurantToCompareKids - $userAnswers[0]['kids'], 2) + pow($restaurantToCompareFF - $userAnswers[0]['fast_food'], 2) + pow($restaurantToCompareSteak - $userAnswers[0]['steakhouse_influence'], 2) +
  96. pow($restaurantToCompareAmer - $userAnswers[0]['american_influence'], 2) + pow($restaurantToCompareME - $userAnswers[0]['middle_eastern_influence'], 2) + pow($restaurantToCompareAsian - $userAnswers[0]['asian_influence'], 2) +
  97. pow($restaurantToCompareItal - $userAnswers[0]['italian_influence'], 2)+ pow($restaurantToCompareChin - $userAnswers[0]['chinese_influence'], 2) + pow($restaurantToCompareJap - $userAnswers[0]['japanese_influence'], 2) +
  98. pow($restaurantToCompareIndian - $userAnswers[0]['indian_influence'], 2) + pow($restaurantToCompareFrench - $userAnswers[0]['french_influence'], 2) +
  99. pow($restaurantToCompareGreek - $userAnswers[0]['greek_influence'], 2) + pow($restaurantToCompareMex - $userAnswers[0]['mexican_influence'], 2) + pow($restaurantToCompareVeg - $userAnswers[0]['vegetarian_influence'], 2) +
  100. pow($restaurantToCompareSeaFood - $userAnswers[0]['seafood_influence'], 2));
  101. $distances[$m][0] = $restaurantToCompareName;
  102. $distances[$m][1] = $totalDistance;
  103. }
  104. //echo "<p>{$distances[$m][0]} = {$distances[$m][1]}</p>";
  105. //$minDistance = $distances[0][1];
  106. $minDistance = 100;
  107. //echo "min dist 1: $minDistance";
  108. //echo "<p>{$distances[1][1]}, {$distances[2][1]}, {$distances[3][1]}</p>";
  109. for($n=1; $n<$numOfRestaurants-1; $n++)
  110. {
  111. $distToCompare = $distances[$n][1];
  112. //echo "distToCompare: $distToCompare";
  113. if($distToCompare < $minDistance)
  114. {
  115. $minDistance = $distances[$n][1];
  116. //echo "min dist in if: $minDistance";
  117. }
  118. }
  119. //echo "min dist: $minDistance";
  120. //echo "numOfRest: $numOfRestaurants";
  121. for($n=0; $n<$numOfRestaurants; ++$n)
  122. {
  123. if($distances[$n][1] == $minDistance)
  124. {
  125. echo "<h2><i><font color=CC6600>{$distances[$n][0]}</font></i></h2>";
  126. }
  127. }
  128. }
  129. ?>
  130. <hr/>
  131. <p><center><b><font size=5 face=Georgia color=000066>User(s) you are closest to:</font></b>
  132. <?php
  133. //$username = $_SESSION['username'];
  134. //echo "username: $username";
  135. //$query = "SELECT * FROM `Users` WHERE
  136. //username = '$username';";
  137. //$result = mysqli_query($db, $query)
  138. //or die("Error Querying Database 1");
  139. //$numOfRows = mysqli_num_rows($result);
  140. //$userAnswers[0] = mysqli_fetch_array($result);
  141. //echo "<li>{$userAnswers[0]['username']}</li>";
  142. //echo "<li>{$userAnswers[0]['price']}</li>";
  143. $query = "SELECT username, first_name, last_name, price, delivery, takeout, accommodate_groups,
  144. reservations, outside_seating, bar, kids, fast_food,
  145. steakhouse_influence, american_influence, middle_eastern_influence,
  146. asian_influence, italian_influence, chinese_influence,
  147. japanese_influence, indian_influence, french_influence,
  148. greek_influence, mexican_influence, vegetarian_influence,
  149. seafood_influence FROM Users;";
  150. $result = mysqli_query($db, $query)
  151. or die("Error Querying Database");
  152. $numOfUsers = mysqli_num_rows($result);
  153. $userVectors[] = array();
  154. if ($numOfUsers == 0) {
  155. echo "<h1>No results matched your search!</h1>";
  156. } else {
  157. for($i=0; $i<$numOfUsers; ++$i) {
  158. $userVectors[$i] = mysqli_fetch_array($result);
  159. //echo "<li>user vector: {$userVectors[$i]['username']}</li>";
  160. }
  161. for ($m = 0; $m <$numOfUsers; ++$m) {
  162. $totalDistance = 0;
  163. $numOfAttributes = 22;
  164. $userToCompareUserName = $userVectors[$m]['username'];
  165. $userToCompareFirstName = $userVectors[$m]['first_name'];
  166. $userToCompareLastName = $userVectors[$m]['last_name'];
  167. $userToComparePrice = $userVectors[$m]['price'];
  168. $userToCompareDelivery= $userVectors[$m]['delivery'];
  169. $userToCompareTakeOut = $userVectors[$m]['takeout'];
  170. $userToCompareGroups = $userVectors[$m]['accommodate_groups'];
  171. $userToCompareReservations = $userVectors[$m]['reservations'];
  172. $userToCompareOutsideSeating = $userVectors[$m]['outside_seating'];
  173. $userToCompareBar = $userVectors[$m]['bar'];
  174. $userToCompareKids= $userVectors[$m]['kids'];
  175. $userToCompareFF = $userVectors[$m]['fast_food'];
  176. $userToCompareSteak = $userVectors[$m]['steakhouse_influence'];
  177. $userToCompareAmer = $userVectors[$m]['american_influence'];
  178. $userToCompareME= $userVectors[$m]['middle_eastern_influence'];
  179. $userToCompareAsian= $userVectors[$m]['asian_influence'];
  180. $userToCompareItal = $userVectors[$m]['italian_influence'];
  181. $userToCompareChin = $userVectors[$m]['chinese_influence'];
  182. $userToCompareJap = $userVectors[$m]['japanese_influence'];
  183. $userToCompareIndian = $userVectors[$m]['indian_influence'];
  184. $userToCompareFrench = $userVectors[$m]['french_influence'];
  185. $userToCompareGreek = $userVectors[$m]['greek_influence'];
  186. $userToCompareMex = $userVectors[$m]['mexican_influence'];
  187. $userToCompareVeg = $userVectors[$m]['vegetarian_influence'];
  188. $userToCompareSeaFood = $userVectors[$m]['seafood_influence'];
  189. //echo "$userToCompareUserName, $userToCompareTakeOut, $userToCompareAmer";
  190. // $totalDistance = abs($userToComparePrice - $userAnswers[0]['price']) + abs($userToCompareDelivery - $userAnswers[0]['delivery']) +
  191. //abs($userToCompareTakeOut - $userAnswers[0]['takeout']) + abs($userToCompareGroups - $userAnswers[0]['accommodate_groups']) + abs($userToCompareReservations - $userAnswers[0]['reservations']) +
  192. //abs($userToCompareOutsideSeating - $userAnswers[0]['outside_seating']) + abs($userToCompareBar - $userAnswers[0]['bar']) +
  193. //abs($userToCompareKids - $userAnswers[0]['kids']) + abs($userToCompareFF - $userAnswers[0]['fast_food']) + abs($userToCompareSteak - $userAnswers[0]['steakhouse_influence']) +
  194. //abs($userToCompareAmer - $userAnswers[0]['american_influence']) + abs($userToCompareME - $userAnswers[0]['middle_eastern_influence']) + abs($userToCompareAsian - $userAnswers[0]['asian_influence']) +
  195. //abs($userToCompareItal - $userAnswers[0]['italian_influence'])+ abs($userToCompareChin - $userAnswers[0]['chinese_influence']) + abs($userToCompareJap - $userAnswers[0]['japanese_influence']) +
  196. //abs($userToCompareIndian - $userAnswers[0]['indian_influence']) + abs($userToCompareFrench - $userAnswers[0]['french_influence']) +
  197. //abs($userToCompareGreek - $userAnswers[0]['greek_influence']) + abs($userToCompareMex - $userAnswers[0]['mexican_influence']) + abs($userToCompareVeg - $userAnswers[0]['vegetarian_influence']) +
  198. //abs($userToCompareSeaFood - $userAnswers[0]['seafood_influence']);
  199. $totalDistance = sqrt(pow($userToComparePrice - $userAnswers[0]['price'], 2) + pow($userToCompareDelivery - $userAnswers[0]['delivery'], 2) +
  200. pow($userToCompareTakeOut - $userAnswers[0]['takeout'], 2) + pow($userToCompareGroups - $userAnswers[0]['accommodate_groups'], 2) + pow($userToCompareReservations - $userAnswers[0]['reservations'], 2) +
  201. pow($userToCompareOutsideSeating - $userAnswers[0]['outside_seating'], 2) + pow($userToCompareBar - $userAnswers[0]['bar'], 2) +
  202. pow($userToCompareKids - $userAnswers[0]['kids'], 2) + pow($userToCompareFF - $userAnswers[0]['fast_food'], 2) + pow($userToCompareSteak - $userAnswers[0]['steakhouse_influence'], 2) +
  203. pow($userToCompareAmer - $userAnswers[0]['american_influence'], 2) + pow($userToCompareME - $userAnswers[0]['middle_eastern_influence'], 2) + pow($userToCompareAsian - $userAnswers[0]['asian_influence'], 2) +
  204. pow($userToCompareItal - $userAnswers[0]['italian_influence'], 2)+ pow($userToCompareChin - $userAnswers[0]['chinese_influence'], 2) + pow($userToCompareJap - $userAnswers[0]['japanese_influence'], 2) +
  205. pow($userToCompareIndian - $userAnswers[0]['indian_influence'], 2) + pow($userToCompareFrench - $userAnswers[0]['french_influence'], 2) +
  206. pow($userToCompareGreek - $userAnswers[0]['greek_influence'], 2) + pow($userToCompareMex - $userAnswers[0]['mexican_influence'], 2) + pow($userToCompareVeg - $userAnswers[0]['vegetarian_influence'], 2) +
  207. pow($userToCompareSeaFood - $userAnswers[0]['seafood_influence'], 2));
  208. $userDistances[$m][0] = $userToCompareUserName;
  209. $userDistances[$m][1] = $totalDistance;
  210. $userDistances[$m][2] = $userToCompareFirstName;
  211. $userDistances[$m][3] = $userToCompareLastName;
  212. //echo "totalDist: $totalDistance";
  213. //echo "<p>{$userDistances[$m][0]} = {$userDistances[$m][1]}</p>";
  214. }
  215. //$minDistance = $distances[0][1];
  216. $minDistance = 100;
  217. //echo "min dist 1: $minDistance";
  218. //echo "<p>{$distances[1][1]}, {$distances[2][1]}, {$distances[3][1]}</p>";
  219. //echo "$numOfUsers";
  220. for($n=0; $n<$numOfUsers; $n++)
  221. {
  222. if($userDistances[$n][0] != $username)
  223. {
  224. //echo "n: $n";
  225. $distToCompare = $userDistances[$n][1];
  226. //echo "distToCompare: $distToCompare";
  227. if($distToCompare < $minDistance)
  228. {
  229. $minDistance = $userDistances[$n][1];
  230. //echo "min dist in if: $minDistance";
  231. }
  232. }
  233. //echo "min dist: $minDistance";
  234. //echo "numOfRest: $numOfRestaurants";
  235. }
  236. $maxRating = 0;
  237. $numOfClosest=0;
  238. for($n=0; $n<$numOfUsers; ++$n)
  239. {
  240. if($userDistances[$n][1] == $minDistance)
  241. {
  242. echo "<h2><i><font color=cc6600>{$userDistances[$n][2]}</font></i></h2>";
  243. $closestUsers[$numOfClosest] = $userDistances[$n][0];
  244. $numOfClosest++;
  245. }
  246. }
  247. //echo "numOfClosest: $numOfClosest";
  248. $restaurantIDs[0] = 0;
  249. $count = 1;
  250. $query = "SELECT * FROM UserRatings WHERE user_id = '$user_id';";
  251. $result = mysqli_query($db, $query)
  252. or die("Error Querying Database");
  253. while($row = mysqli_fetch_array($result)) {
  254. $restaurantIDs[$count] = $row['restaurant_id'];
  255. //echo "restaurantIDs[count]: $restaurantIDs[$count]";
  256. $count++;
  257. }
  258. echo("<hr/>");
  259. for($v = 0; $v<$numOfClosest; ++$v)
  260. {
  261. //pull all restaurant ratings for this user
  262. $query = "SELECT * FROM Users WHERE username = '$closestUsers[$v]';";
  263. $result = mysqli_query($db, $query)
  264. or die("Error Querying Database");
  265. $row = mysqli_fetch_array($result);
  266. $userToCompareID = $row['user_id'];
  267. $userToCompareName = $row['first_name'];
  268. //echo "userID $userToCompareID";
  269. $query = "SELECT * FROM UserRatings WHERE user_id = '$userToCompareID';";
  270. $result = mysqli_query($db, $query)
  271. or die("Error Querying Database");
  272. $numOfRatings = mysqli_num_rows($result);
  273. //echo "numRatings $numOfRatings";
  274. if ($numOfRatings == 0) {
  275. echo "<font size=4 face=Georgia color=000066>$userToCompareName hasn't rating anything yet!</font><br/>";
  276. } else {
  277. for($i=0; $i<$numOfRatings; ++$i) {
  278. $row = mysqli_fetch_array($result);
  279. $rating = $row['rating'];
  280. $restID = $row['restaurant_id'];
  281. //for($j=0; $j<$count; ++$j)
  282. //{
  283. //echo "restIDs[j]: $restaurantIDs[$j] <br/>";
  284. //echo "restID: $restID <br/>";
  285. if(!in_array($restID, $restaurantIDs))
  286. {
  287. //echo"in 1st if <br/>";
  288. if($rating > $maxRating)
  289. {
  290. //echo "in 2nd if <br/>";
  291. $maxRating = $rating;
  292. //$maxRatings[$i][0] = $maxRating;
  293. //$maxRatings[0][1] = $restID;
  294. }
  295. //}
  296. }
  297. }
  298. }
  299. }
  300. }
  301. //echo "Max rating: $maxRating";
  302. for($v = 0; $v<$numOfClosest; ++$v)
  303. {
  304. $query = "SELECT * FROM Users WHERE username = '$closestUsers[$v]';";
  305. $result = mysqli_query($db, $query)
  306. or die("Error Querying Database");
  307. $row = mysqli_fetch_array($result);
  308. $userToCompareID = $row['user_id'];
  309. $query = "SELECT * FROM UserRatings WHERE user_id = '$userToCompareID';";
  310. $result = mysqli_query($db, $query)
  311. or die("Error Querying Database");
  312. $numOfRatings = mysqli_num_rows($result);
  313. if ($numOfRatings == 0) {
  314. //echo "<h1>No results matched your search!</h1>";
  315. } else {
  316. for($i=0; $i<$numOfRatings; ++$i) {
  317. $row = mysqli_fetch_array($result);
  318. $rating = $row['rating'];
  319. $restID = $row['restaurant_id'];
  320. //echo "
  321. if($rating == $maxRating)
  322. {
  323. $query = "SELECT * FROM RestaurantInfo WHERE restaurant_id = '$restID';";
  324. $result = mysqli_query($db, $query)
  325. or die("Error Querying Database");
  326. $row = mysqli_fetch_array($result);
  327. $restName = $row['name'];
  328. echo "<font size=4 face=Georgia color=000066>You should try: $restName ($maxRating)</font><br/>";
  329. }
  330. }
  331. }
  332. }
  333. echo "<hr></hr>";
  334. //echo "<h2><b><font color=000066>Calculated Distances:</h2></font></b>";
  335. //for($n=0; $n<$numOfUsers; ++$n)
  336. //{
  337. // if($userDistances[$n][0] != $username)
  338. // {
  339. // echo "</b><i><font color=cc6600>{$userDistances[$n][0]} = {$userDistances[$n][1]}</font></i><br/>";
  340. // }
  341. //}
  342. }
  343. ?>