Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Переход на MySQLi

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: Нужна помощь в изменении кода с MySQL на MySQLi.
Nata_Li
Отправлено: 26 Февраля, 2015 - 04:46:08
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




Здравствуйте форумчане, я вот начала пробовать писать PHP скрипты на MySQLi, но вот застряла, не знаю как с обычного MySQL переделать запросы на MySQLi. Возможно Вы подскажите как этот код, переписать из MySQL на MySQLi, в обычном MySQL было все гораздо проще. Просьба в гугл не посылать, я от него пришла к Вам, да и по сути ничего путного там не нашла. За любую помощь благодарю заранее. Вот сам код:
CODE (htmlphp):
скопировать код в буфер обмена
  1. if(isset($_GET['login']) && isset($_GET['password']))
  2. {
  3. if(mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". $_GET['login'] ."' AND `password` = '". $_GET['password'] ."' LIMIT 1"), 0) == 1)
  4. {
  5. $us = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `login` = '". $_GET['login'] ."' AND `password` = '". $_GET['password'] ."' LIMIT 1"));
  6. $_SESSION['us_id'] = $us['id'];
  7. mysql_query("UPDATE `users` SET `date_last_entry` = '". time() ."' WHERE `id` = '$us[id]' LIMIT 1");
  8. }
  9. else
  10. $err .= 'Неверный логин или пароль<br />';
  11. }
  12. else
  13. if(isset($_POST['login']) && isset($_POST['password']))
  14. {
  15. if(mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". $_POST['login'] ."' AND `password` = '". $_POST['password'] ."' LIMIT 1"), 0) == 1)
  16. {
  17. $us = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `login` = '". $_POST['login'] ."' AND `password` = '". $_POST['password'] ."' LIMIT 1"));
  18. $_SESSION['us_id'] = $us['id'];
  19. mysql_query("UPDATE `users` SET `date_last_entry` = '". time() ."' WHERE `id` = '$us[id]' LIMIT 1");
  20. if(isset($_POST['save_entry']))
  21. {
  22. setcookie('us_id', $us['id'], time() + 60 * 60 * 24 * 365);
  23. setcookie('password', $_POST['password'], time() + 60 * 60 * 24 * 365);
  24. }              
  25. }
  26. else
  27. $err .= 'Неверный логин или пароль<br />';    
  28. }                
  29. else
  30. if(isset($_SESSION['us_id']) && mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `id` = '". $_SESSION['us_id'] ."' LIMIT 1"), 0) == 1)
  31. {
  32. $us = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `id` = '". $_SESSION['us_id'] ."' LIMIT 1"));
  33. mysql_query("UPDATE `users` SET `date_last_entry` = '". time() ."' WHERE `id` = '$us[id]' LIMIT 1");    
  34. }
  35. else
  36. if(isset($_COOKIE['us_id']) && isset($_COOKIE['password']) && $_COOKIE['us_id'] != NULL && $_COOKIE['password'] != NULL)
  37. {
  38. if(mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `id` = '". $_COOKIE['us_id'] ."' AND `password` = '$_COOKIE[password]' LIMIT 1"), 0) == 1)
  39. {
  40. $us = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `id` = '". $_COOKIE['us_id'] ."' LIMIT 1"));
  41. $_SESSION['us_id'] = $us['id'];
  42. mysql_query("UPDATE `users` SET `date_last_entry` = '". time() ."' WHERE `id` = '$us[id]' LIMIT 1");            
  43. }
  44. else
  45. {
  46. setcookie('us_id');
  47. setcookie('password');
  48. }
  49. }

(Отредактировано автором: 26 Февраля, 2015 - 04:46:45)

 
 Top
RickMan
Отправлено: 26 Февраля, 2015 - 09:03:20
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




А с чем именно возникли сложности? mysql_query не смогли переписать? Там же к каждой функции практически есть аналогичная, + для забрасывания данных чуть меняется логика.
 
 Top
Nata_Li
Отправлено: 26 Февраля, 2015 - 10:48:42
Post Id



Новичок


Покинул форум
Сообщений всего: 3
Дата рег-ции: Февр. 2015  


Помог: 0 раз(а)




RickMan пишет:
А с чем именно возникли сложности? mysql_query не смогли переписать? Там же к каждой функции практически есть аналогичная, + для забрасывания данных чуть меняется логика.

Не понятны вот эти строки:
CODE (text):
скопировать код в буфер обмена
  1. if(mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". $_GET['login'] ."' AND `password` = '". $_GET['password'] ."' LIMIT 1"), 0) == 1)
  2. {
  3. $us = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `login` = '". $_GET['login'] ."' AND `password` = '". $_GET['password'] ."' LIMIT 1"));

(Добавление)
Nata_Li пишет:
RickMan пишет:
А с чем именно возникли сложности? mysql_query не смогли переписать? Там же к каждой функции практически есть аналогичная, + для забрасывания данных чуть меняется логика.

Не понятны вот эти строки:
CODE (text):
скопировать код в буфер обмена
  1. if(mysql_result(mysql_query("SELECT COUNT(*) FROM `users` WHERE `login` = '". $_GET['login'] ."' AND `password` = '". $_GET['password'] ."' LIMIT 1"), 0) == 1)
  2. {
  3. $us = mysql_fetch_assoc(mysql_query("SELECT * FROM `users` WHERE `login` = '". $_GET['login'] ."' AND `password` = '". $_GET['password'] ."' LIMIT 1"));

А так же 30-36 строки. Не пойму как их правильно соединять и выводить.
 
 Top
RickMan
Отправлено: 26 Февраля, 2015 - 11:07:45
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




http://forum.php.su/topic.php?fo...1&topic=9732 - для mysql_result
http://www.php.su/mysqli_fetch_assoc() - для mysql_fetch_assoc

А вы вообще имеете хоть малейшие знания и понимание mysqli? Вы читали про него хоть пару статей/мануалов? Или взлись переписывать не знаяничего о mysql и mysqli?
 
 Top
exlant
Отправлено: 26 Февраля, 2015 - 12:39:26
Post Id



Посетитель


Покинул форум
Сообщений всего: 425
Дата рег-ции: Февр. 2015  


Помог: 14 раз(а)




Да тут весь код нужно переписывать, тут же дырок в защите целый вагон!
Тут и sql-инъекцию, и пароль в куках, и даже без хеша, и вообще пароли, не хешируются, никаким способом!
 
 Top
DelphinPRO
Отправлено: 26 Февраля, 2015 - 15:01:24
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




Да тут сначала нужно просто переделать на нормальный код.
(Добавление)
ох, я попробую, но не уверен, что я до конца понял всю логику.
В целом-то понятно, что там аутентификация с функцией "Запомнить меня", но именно описание этой логики в вашем коде я не понимаю.
(Добавление)
PHP:
скопировать код в буфер обмена
  1. $login          = isset($_GET['login']) ? $_GET['login'] : '';
  2. $password       = isset($_GET['password']) ? $_GET['password'] : '';
  3. $rememberMe     = isset($_GET['save_entry']);
  4. $cookieExpiries = time() + 60 * 60 * 24 * 365;
  5.  
  6. $config = [
  7.     'db_host' => 'localhost',
  8.     'db_user' => 'my_user',
  9.     'db_pass' => 'my_password',
  10.     'db_name' => 'my_db',
  11. ];
  12.  
  13. $isAuth = false;
  14.  
  15. try {
  16.  
  17.     $db = getConnection($config);
  18.  
  19.     if ($userData = userExists($db, $login, $password)) {
  20.  
  21.         $isAuth = true;
  22.         $userId = (int)$userData['id'];
  23.         userUpdate($db, $userId, $rememberMe, $cookieExpiries);
  24.  
  25.     }
  26.  
  27.     if (!$isAuth && !empty($_SESSION['us_id'])) {
  28.        
  29.         if ($userData = userExistsById($db, (int)$_SESSION['us_id'])) {
  30.             $isAuth = true;
  31.             $userId = (int)$userData['id'];
  32.             userUpdate($db, $userId, $rememberMe, $cookieExpiries);
  33.         }
  34.  
  35.     }
  36.  
  37.     if (!$isAuth && !empty($_COOKIE['us_id']) && !empty($_COOKIE['password'])) {
  38.        
  39.         if ($userData = userExistsById($db, (int)$_COOKIE['us_id'])) {
  40.             $isAuth = true;
  41.             $userId = (int)$userData['id'];
  42.             userUpdate($db, $userId, $rememberMe, $cookieExpiries);
  43.         }
  44.  
  45.     }
  46.  
  47. } catch (\Exception $e) {
  48.     // тут можно обработать ошибки подключения к базе
  49.     // я просто проброшу исключение дальше
  50.     throw $e;
  51. }
  52.  
  53. if (!$isAuth) {
  54.     echo 'Неверный логин или пароль';
  55. } else {
  56.     echo 'Привет, ' . $userData['name'];
  57. }

и определения использованных функций:
PHP:
скопировать код в буфер обмена
  1. function getConnection($config) {
  2.     static $mysqli;
  3.  
  4.     if (!$mysqli) {
  5.         $mysqli = new mysqli($config['db_host'],
  6.                              $config['db_user'],
  7.                              $config['db_pass'],
  8.                              $config['db_name']);
  9.         if ($mysqli->connect_error) {
  10.             throw new \Exception('Ошибка подключения ('
  11.                                  . $mysqli->connect_errno . ') '
  12.                                  . $mysqli->connect_error);
  13.         }
  14.     }
  15.  
  16.     return $mysqli;
  17. }
  18.  
  19. function userExists($db, $login, $password) {
  20.     if (empty($login) || empty($password)) {
  21.         return false; // Поля Логин и Пароль не заполнены
  22.     }
  23.  
  24.     $login = $db->real_escape_string($login);
  25.     $password = $db->real_escape_string($password);
  26.  
  27.     $querySelect = "SELECT * FROM `users`
  28.                    WHERE `login` = '$login'
  29.                    AND `password` = '$password'
  30.                    LIMIT 1";
  31.  
  32.     if (!$result = $db->query($querySelect)) {
  33.         throw new \Exception('Ошибка: ' . $db->sqlstate);
  34.     }
  35.  
  36.     return $result->fetch_assoc();
  37. }
  38.  
  39. function userExistsById($db, $userId) {
  40.     $userId = (int)$userId;
  41.  
  42.     if (empty($userId)) {
  43.         return false; // Поля Логин и Пароль не заполнены
  44.     }
  45.  
  46.     $querySelect = "SELECT * FROM `users` WHERE `id` = '$userId' LIMIT 1";
  47.  
  48.     if (!$result = $db->query($querySelect)) {
  49.         throw new \Exception('Ошибка: ' . $db->sqlstate);
  50.     }
  51.  
  52.     return $result->fetch_assoc();
  53. }
  54.  
  55. function userUpdate($db, $userId, $rememberMe, $cookieExpiries) {
  56.     $userId = (int)$userId;
  57.     $queryUpdate = "UPDATE `users`
  58.                    SET `date_last_entry` = '". time() ."'
  59.                    WHERE `id` = '$userId'
  60.                    LIMIT 1";
  61.     $_SESSION['us_id'] = $userId;
  62.  
  63.     if (!$db->query($queryUpdate)) {
  64.         throw new \Exception('Ошибка: ' . $db->sqlstate);
  65.     }
  66.  
  67.     if ($rememberMe) {
  68.         setcookie('us_id', $userId, $cookieExpiries);
  69.         setcookie('password', $password, $cookieExpiries);
  70.     }
  71. }


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB