Guest User

Untitled

a guest
Jun 3rd, 2018
160
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 11.26 KB | None | 0 0
  1. <?php
  2. /**
  3. * Получение списка категорий в порядке их идентификатаров
  4. *
  5. * @param $link mysqli Ресурс соединения
  6. * @return array|null Массив со списком категорий или ничего в случае ошибки
  7. * @throws Exception
  8. */
  9. function getCategoryList($link) {
  10. $sql = 'SELECT id, name FROM categories ORDER BY id ASC';
  11. $result = mysqli_query($link, $sql);
  12. if (!$result) {
  13. throw new Exception("DATABASE ERROR");
  14. }
  15. else {
  16. return mysqli_fetch_all($result, MYSQLI_ASSOC);
  17. }
  18. };
  19. /**
  20. * Получение списка новых лотов, отсортированных по новизне
  21. *
  22. * @param $link mysqli Ресурс соединения
  23. * @return array|null Массив со списком новых лотов или ничего в случае ошибки
  24. * @throws Exception
  25. */
  26. function getLotsSortedByNew($link) {
  27. $sql = 'SELECT id, name, date_start, description, image, price_start, category_id, date_end FROM lots WHERE date_end>NOW() ORDER BY date_start DESC';
  28. $result = mysqli_query($link, $sql);
  29. if ($result) {
  30. return mysqli_fetch_all($result, MYSQLI_ASSOC);
  31. }
  32. else {
  33. throw new Exception("DATABASE ERROR");
  34. }
  35. };
  36. /**
  37. * Получение всех ставок для лота по его id
  38. * с использованием подготовленных выражений
  39. *
  40. * @param $link mysqli Ресурс соединения
  41. * @param int $id Идентификатор лота
  42. *
  43. * @return array|null Массив со ставками или ничего в случае ошибки
  44. * @throws Exception
  45. */
  46. function getBetsById($link, $id) {
  47. $array = [];
  48. $sql = "SELECT b.date_start, b.price, u.name as user_name, b.user_id FROM bets b LEFT JOIN users u ON b.user_id = u.id WHERE lot_id=? ORDER BY date_start DESC";
  49. $stmt = db_get_prepare_stmt($link, $sql, ['id' => $id]);
  50. mysqli_stmt_execute($stmt);
  51. $result = mysqli_stmt_get_result($stmt);
  52. if ($result) {
  53. $i = 0;
  54. while ($row = mysqli_fetch_assoc($result)) {
  55. $array[$i] = $row;
  56. $i++;
  57. }
  58. }
  59. else {
  60. throw new Exception("DATABASE ERROR");
  61. }
  62. return $array;
  63. };
  64. /**
  65. * Получение информации лота по его id
  66. * с использованием подготовленных выражений
  67. *
  68. * @param $link mysqli Ресурс соединения
  69. * @param int $id Идентификатор лота
  70. *
  71. * @return array|null Массив с описанием лота или ничего в случае ошибки
  72. * @throws Exception
  73. */
  74. function getLotById($link, $id) {
  75. $array = NULL;
  76. $sql = "SELECT name, image, description, price_start, step_bet, category_id, date_end, user_id FROM lots WHERE id=?";
  77. $stmt = db_get_prepare_stmt($link, $sql, ['id' => $id]);
  78. mysqli_stmt_execute($stmt);
  79. $result = mysqli_stmt_get_result($stmt);
  80. if ($result) {
  81. $array = mysqli_fetch_assoc($result);
  82. }
  83. else {
  84. throw new Exception('DATABASE ERROR');
  85. }
  86. return $array;
  87. };
  88. /**
  89. * Расчет плэйсхолдера для поля "Ваша ставка" на основе идентификатора лота и его описания
  90. * с использованием подготовленных выражений
  91. *
  92. * @param $link mysqli Ресурс соединения
  93. * @param int $id Идентификатор лота
  94. * @param array $lot Массив с информацией о лоте
  95. *
  96. * @return int|null Ставка или ничего в случае ошибки
  97. * @throws Exception
  98. */
  99. function yourBet($link, $id, $lot) {
  100. $array = [];
  101. $sql = "SELECT l.price_start as price_start, l.step_bet as step_bet, COUNT(b.id) as bet_total, MAX(b.price) as cur_max_price FROM bets b
  102. LEFT JOIN lots l
  103. ON b.lot_id = l.id
  104. WHERE date_end>NOW() AND l.id = ? GROUP BY l.id ORDER BY cur_max_price DESC";
  105. $stmt = db_get_prepare_stmt($link, $sql, ['id' => $id]);
  106. mysqli_stmt_execute($stmt);
  107. $result = mysqli_stmt_get_result($stmt);
  108. if ($result) {
  109. $array = mysqli_fetch_assoc($result);
  110. if (empty($array['cur_max_price'])) {
  111. $yourBet = $lot['price_start'] + $lot['step_bet'];
  112. }
  113. else {
  114. $yourBet = $array['cur_max_price'] + $array['step_bet'];
  115. }
  116. }
  117. else {
  118. throw new Exception('DATABASE ERROR');
  119. }
  120. return $yourBet;
  121. };
  122. /**
  123. * Проверка пароля пользователя по его email
  124. * с использованием подготовленных выражений
  125. *
  126. * @param $link mysqli Ресурс соединения
  127. * @param string $password Пароль пользоавателя
  128. * @param string $email Email пользователя
  129. * @param array $errors Массив для записи ошибки
  130. *
  131. * @return array $errors Массив с ошибками, где появилась новая или нет
  132. * @throws Exception
  133. */
  134. function validatePasswordByEmail($link, $password, $email, $errors) {
  135. $sql = "SELECT password FROM users WHERE email=?";
  136. $stmt = db_get_prepare_stmt($link, $sql, ['email' => $email]);
  137. mysqli_stmt_execute($stmt);
  138. $result = mysqli_stmt_get_result($stmt);
  139. if ($result) {
  140. $user = mysqli_fetch_assoc($result);
  141. if (!password_verify($password, $user['password'])) {
  142. $errors['password'] = "Пароль введен неверно. Повторите попытку";
  143. }
  144. }
  145. else {
  146. throw new Exception('DATABASE ERROR');
  147. };
  148.  
  149. return $errors;
  150. };
  151. /**
  152. * Добавление пользователя в Базу данных
  153. * с использованием подготовленных выражений
  154. *
  155. * @param $link mysqli Ресурс соединения
  156. * @param string $email Email пользователя
  157. * @param string $name Имя
  158. * @param string $password Пароль
  159. * @param string $file_path Аватар
  160. * @param string $message Контакты
  161. *
  162. * @return null|string В случае успеха не вовзвращает ничего, в случае неудачи - ошибку
  163. */
  164. function insertUser($link, $email, $name, $password, $file_path, $message) {
  165. $password = password_hash($password, PASSWORD_DEFAULT);
  166. $error = NULL;
  167. $sql = 'INSERT INTO users (date_register, email, name, password, avatar, contact) VALUES (NOW(), ?, ?, ?, ?, ?)';
  168. $stmt = db_get_prepare_stmt($link, $sql, ['email' => $email, 'name' => $name, 'password' => $password, 'file_path' => $file_path, 'message' => $message]);
  169. $res = mysqli_stmt_execute($stmt);
  170.  
  171. if (!$res) {
  172. $error = 'Не удалось зарегестрировать пользователя';
  173. }
  174. $error;
  175. };
  176. /**
  177. * Добавление лота в Базу данных
  178. * с использованием подготовленных выражений
  179. *
  180. * @param $link mysqli Ресурс соединения
  181. * @param array $data Информация о лоте, которую необхолимо занести
  182. *
  183. * @return int|null В случае успеха возвращает id лота, неудачи - ничего
  184. * @throws Exception
  185. */
  186. function insertLot($link, $data = []) {
  187. $sql = 'INSERT INTO lots (date_start, name, category_id, image, price_start, user_id, step_bet, date_end, description) VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?, ?)';
  188. $stmt = db_get_prepare_stmt($link, $sql, $data);
  189. $res = mysqli_stmt_execute($stmt);
  190. if ($res) {
  191. return $lot_id = mysqli_insert_id($link);
  192. }
  193. else {
  194. throw new Exception("DATABASE ERROR");
  195. }
  196. };
  197. /**
  198. * Валидация email на формат и существование в БД;
  199. * с использованием подготовленных выражений
  200. *
  201. * @param $link mysqli Ресурс соединения
  202. * @param string $email Email, который необходимо провалидировать
  203. * @param array $errors Массив, куда запишем ошибку
  204. * @param int $up 1 - для регитрации, любое другое для входа
  205. *
  206. * @return array $errors Массив с ошибками, где появилась новая или нет
  207. * @throws Exception
  208. */
  209. function validateEmail($link, $email, $errors, $up = 1) {
  210. $user = NULL;
  211. if (!empty($email)) {
  212. if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
  213. $errors['email'] = 'Неверный формат email';
  214. }
  215. else {
  216. $sql = "SELECT password FROM users WHERE email=?";
  217. $stmt = db_get_prepare_stmt($link, $sql, ['email' => $email]);
  218. mysqli_stmt_execute($stmt);
  219. $result = mysqli_stmt_get_result($stmt);
  220. if ($result) {
  221. $user = mysqli_fetch_assoc($result);
  222. $num_rows = mysqli_num_rows($result);
  223. if ($num_rows > 0) {
  224. if ($up === 1) {
  225. $errors['email'] = 'Пользователь с этим email уже зарегистрирован';
  226. }
  227. }
  228. else {
  229. if ($up !== 1) {
  230. $errors['email'] = 'Пользователя с таким email не существует';
  231. };
  232. };
  233.  
  234. }
  235. else {
  236. throw new Exception('DATABASE ERROR');
  237. }
  238. }
  239. }
  240. return $errors;
  241. };
  242. /**
  243. * Получаем данные пользователя по его email
  244. * с использованием подготовленных выражений
  245. *
  246. * @param $link mysqli Ресурс соединения
  247. * @param string $email Email пользователя
  248. *
  249. * @return array|null В случае удачи возвращает массив с информацией о пользоавателе, в случае неудачи - ничего
  250. * @throws Exception
  251. */
  252. function getUserInfo($link, $email) {
  253. $user = NULL;
  254. $sql = "SELECT id, name, avatar, contact FROM users WHERE email=?";
  255. $stmt = db_get_prepare_stmt($link, $sql, ['email' => $email]);
  256. mysqli_stmt_execute($stmt);
  257. $result = mysqli_stmt_get_result($stmt);
  258. if ($result) {
  259. $user = mysqli_fetch_assoc($result);
  260. }
  261. else {
  262. throw new Exception('DATABASE ERROR');
  263. }
  264. return $user;
  265. };
  266. /**
  267. * Добавление ставки в БД
  268. * с использованием подготовленных выражений
  269. *
  270. * @param $link mysqli Ресурс соединения
  271. * @param int $price
  272. * @param int $user_id
  273. * @param int $lot_id
  274. *
  275. * @return null|string В случае удачи не возвращает ничего, в противном - ошибку
  276. */
  277. function insertBet($link, $price, $user_id, $lot_id) {
  278. $error = NULL;
  279. $sql = "INSERT INTO bets (date_start, price, user_id, lot_id) VALUES (NOW(), ?, ?, ?)";
  280. $stmt = db_get_prepare_stmt($link, $sql, ['price' => $price, 'user_id' => $user_id, 'lot_id' => $lot_id]);
  281. mysqli_stmt_execute($stmt);
  282. $result = mysqli_stmt_get_result($stmt);
  283. if ($result) {
  284. $error = 'Не удалось вставить лот';
  285. }
  286. return $error;
  287. };
  288. ?>
Add Comment
Please, Sign In to add comment