За последние 24 часа нас посетили 8105 программистов и 462 робота. Сейчас ищут 295 программистов ...

php 5.4 -> 7.2

Тема в разделе "Сделайте за меня", создана пользователем victorvictor2018112312, 4 сен 2021.

  1. victorvictor2018112312

    victorvictor2018112312 Новичок

    С нами с:
    4 сен 2021
    Сообщения:
    9
    Симпатии:
    0
    Здравствуйте, ранее обладал php скриптом, который работал, да и сейчас работает конечно, но только на версии php 5.4. Хостинги теперь не держат такую версию, а те, которые держат не подходят.
    Коротко о скрипте, заходим на сайт site.ru/администратор и у нас открывалась страница admin.tpl (ключ администратор хранился в mysql) если запрос был из базы, то открывалась template.tpl (индексная страница), если запроса не был в базе, то открывалась 404.tpl.
    Погуглив понял, что всё изменилось, а именно mysql теперь mysqli , но что-то не помогло, у меня открывается 404.tpl, хотя соединение с базой устанавливается.
    Листинг php 5.4:
    PHP:
    1. <?php
    2. ini_set('display_errors', 1);
    3.  
    4. //подключаем файл базы данных
    5. require_once('mysqli.inc');
    6. $uploaddir = '/home/site.ru/public_html/';
    7. // Назначаем модуль и действие по умолчанию.
    8. $module = 'index';
    9. $action = 'index';
    10. // Массив параметров из URI запроса.
    11. $params = array();
    12. // Если запрошен любой URI, отличный от корня сайта.
    13. if ($_SERVER['REQUEST_URI'] != '/') {
    14.     try {
    15.         // Для того, что бы через виртуальные адреса можно было также передавать параметры
    16.         // через QUERY_STRING (т.е. через "знак вопроса" - ?param=value),
    17.         // необходимо получить компонент пути - path без QUERY_STRING.
    18.         // Данные, переданные через QUERY_STRING, также как и раньше будут содержаться в
    19.         // суперглобальных массивах $_GET и $_REQUEST.
    20.         $url_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    21.         $url_path = urldecode ($url_path);
    22.  
    23.         // Разбиваем виртуальный URL по символу "/"
    24.         $uri_parts = explode('-', trim($url_path, ' -'));
    25.         $gorod = ''; $search = ''; $title = '';
    26.         foreach ($uri_parts as $search) {
    27.             if ($gorod != '') {$gorod .= $search;} else if ($search != 'в') {$title .= $search.' ';}
    28.             if ($search == 'в') {
    29.                 $gorod .= $search.' ';
    30.             }
    31.         }
    32.        
    33.         $title = str_replace('/', '', $title);
    34.         $search = $uri_parts[count($uri_parts)-1];
    35.         $sql = "SELECT * FROM towns where town = '".$search."'";
    36.         $result = mysql_query($sql);
    37.         $row = mysql_fetch_assoc($result);
    38.         if ($row['town']) { $title = str_replace($search, '', $title); $gorod=$search;}
    39.         // Если количество частей не кратно 2, значит, в URL присутствует ошибка и такой URL
    40.         // обрабатывать не нужно - кидаем исключение, что бы назначить в блоке catch модуль и действие,
    41.         $sql = "SELECT * FROM keywords where keyword = '".$title."'";
    42.         $result = mysql_query($sql);
    43.         if (!$result) {
    44.             $message  = 'Неверный запрос: ' . mysql_error() . "\n";
    45.             $message .= 'Запрос целиком: ' . $sql;
    46.             die($message);
    47.         }
    48.         $row = mysql_fetch_assoc($result);
    49.         if (!$row['keyword']) {
    50.             throw new Exception();
    51.         }
    52.         //рендерим страницу
    53.         if ($title=='администратор ') {require_once('admin.tpl');}
    54.         else {require_once('template.tpl');}
    55.        
    56.     } catch (Exception $e) {
    57.         require_once('404.tpl');
    58.     }  
    59. }
    в mysqli.inc соответственно было:
    PHP:
    1. <?php
    2.  
    3. $db = mysql_connect('localhost', 'site_user', 'password');
    4. mysql_set_charset('utf8',$db);
    5. mysql_select_db('base_bd',$db);
    6. /* check connection */
    7.  
    8. ?>
    и вот к чему пришел сейчас методом тыка, но чего то не хватает (мозгов точно не хватает, поэтому пишу вам)
    PHP:
    1. <?php
    2.  
    3. ini_set('display_errors', 1);
    4. $servername = "localhost";
    5. $username = "user";
    6. $password = "password";
    7. $base = "base_bd";
    8. //подключаем файл базы данных
    9.  
    10. $con = new mysqli($servername, $username, $password, $base);
    11. $uploaddir = '/home/site.ru/public_html';
    12. // Назначаем модуль и действие по умолчанию.
    13. $module = 'index';
    14. $action = 'index';
    15. // Массив параметров из URI запроса.
    16. $params = array();
    17. // Если запрошен любой URI, отличный от корня сайта.
    18. if ($_SERVER['REQUEST_URI'] != '/') {
    19.     try {
    20.         // Для того, что бы через виртуальные адреса можно было также передавать параметры
    21.         // через QUERY_STRING (т.е. через "знак вопроса" - ?param=value),
    22.         // необходимо получить компонент пути - path без QUERY_STRING.
    23.         // Данные, переданные через QUERY_STRING, также как и раньше будут содержаться в
    24.         // суперглобальных массивах $_GET и $_REQUEST.
    25.         $url_path = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);
    26.         $url_path = urldecode ($url_path);
    27.  
    28.         // Разбиваем виртуальный URL по символу "/"
    29.         $uri_parts = explode('-', trim($url_path, ' -'));
    30.         $gorod = ''; $search = ''; $title = '';
    31.         foreach ($uri_parts as $search) {
    32.             if ($gorod != '') {$gorod .= $search;} else if ($search != 'в') {$title .= $search.' ';}
    33.             if ($search == 'в') {
    34.                 $gorod .= $search.' ';
    35.             }
    36.         }
    37.        
    38.         $title = str_replace('/', '', $title);
    39.         $search = $uri_parts[count($uri_parts)-1];
    40.         $result = mysqli_query( "SELECT * FROM towns where town = '".$search."'");
    41.         $row = mysqli_fetch_assoc($result);
    42.         if ($row['town']) { $title = str_replace($search, '', $title); $gorod=$search;}
    43.         // Если количество частей не кратно 2, значит, в URL присутствует ошибка и такой URL
    44.         // обрабатывать не нужно - кидаем исключение, что бы назначить в блоке catch модуль и действие,
    45.         $sql = "SELECT * FROM keywords where keyword = '".$title."'";
    46.         $result = mysqli_query($sql);
    47.         if (!$result) {
    48.             $message  = 'Неверный запрос: ' . mysqli_error() . "\n";
    49.             $message .= 'Запрос целиком: ' . $sql;
    50.             die($message);
    51.         }
    52.         $row = mysqli_fetch_assoc($result);
    53.         if (!$row['keyword']) {
    54.             throw new Exception();
    55.         }
    56.         //рендерим страницу
    57.         if ($title=='администратор ') {require_once('admin.tpl');}
    58.         else {require_once('template.tpl');}
    59.        
    60.     } catch (Exception $e) {
    61.         require_once('404.tpl');
    62.     }  
    63. }

    Помогите сделать скрипт рабочий!!!
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.121
    Симпатии:
    1.180
    Адрес:
    Лень
    Почему ты используешь ООП стиль инструмента на 11 строке, а дальше процедурный ?
     
  3. victorvictor2018112312

    victorvictor2018112312 Новичок

    С нами с:
    4 сен 2021
    Сообщения:
    9
    Симпатии:
    0
    прочитал вроде на пхп.нет что теперь меняется по другому подключение к бд, как написать то надо, что заработало?
     
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.121
    Симпатии:
    1.180
    Адрес:
    Лень
     
  5. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.194
    Симпатии:
    530
    Во-во. Если бы было наоборот, еще можно было понять.

    Есть похожий фронт – G-Drive. Только в нем кириллица в адресах «из коробки» не поддерживается. Можно добавить путем расширения множества допустимых символов пути символом % и хранения слагов в БД в URL-кодировке. Также можно использовать слаги городов на латинице (в сети есть такие таблицы, у нас тоже есть). Скрипт различает слаг и тайтл, т.е. можно использовать слаги на латинице и тайтлы на кириллице.
    --- Добавлено ---
    Естественно, работает и на семерке, и на восьмерке. Кстати, в 5.4 расширение MySQLi уже было основным.
     
    #5 miketomlin, 5 сен 2021
    Последнее редактирование: 5 сен 2021
  6. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.194
    Симпатии:
    530
    P.S. Второй запрос (к keywords) нужно будет вынести в контроллер или подправить сам фронт (ф-цию формирования имени таблицы объектов), т.к. «из коробки» второй запрос автоматом выполняется к таблице объектов, имя которой связано со слагом категории (города).
     
  7. victorvictor2018112312

    victorvictor2018112312 Новичок

    С нами с:
    4 сен 2021
    Сообщения:
    9
    Симпатии:
    0
    по вашей ссылке никаких фронтов нет, гугл тоже не дал результатов, даже ссылки на гитхаб, чтобы скачать
     
  8. victorvictor2018112312

    victorvictor2018112312 Новичок

    С нами с:
    4 сен 2021
    Сообщения:
    9
    Симпатии:
    0
    исправил 11 строку на
    $mysqli = mysqli_connect($servername, $username, $password, $base);
    и всё равно выдает ошибки....
    Warning: mysqli_query() expects at least 2 parameters, 1 given in /home//site.ru/public_html/index.php on line 47

    Warning: mysqli_error() expects exactly 1 parameter, 0 given in /home//site.ru/public_html/index.php on line 49
    Неверный запрос: Запрос целиком: SELECT * FROM keywords where keyword = 'администратор '
     
  9. don.bidon

    don.bidon Новичок

    С нами с:
    28 мар 2021
    Сообщения:
    306
    Симпатии:
    46
    Ну переведите ошибки, у mysqli_query() обязательный параметр - подключение к базе, в Вашем случае $mysqli.
     
  10. miketomlin

    miketomlin Старожил

    С нами с:
    9 авг 2016
    Сообщения:
    3.194
    Симпатии:
    530
    Все там есть. См. комменты. Есть даже вариант для студентов за 10 руб., хотя это не про вас, судя по показанным выше ошибкам и неспособности их решить. Но ОК, нет так нет :)
    --- Добавлено ---
    Когда ошибки перевода вам исправят, попросите почистить др. элементарные ошибки вроде SQL-инъекций ;)
     
  11. victorvictor2018112312

    victorvictor2018112312 Новичок

    С нами с:
    4 сен 2021
    Сообщения:
    9
    Симпатии:
    0
    спасибо и правда помогло, подставить $mysqli перед запросом.

    Теперь почти всё работает, кроме русских букв, с латиницей отлично всё открывает template.tpl но если в запросе поставить тот же запрос "администратор" то он не обрабывается и открывается 404.tpl если любой другой запрос с русскими символами, то тоже 404 tpl....куда теперь копать?
     
  12. victorvictor2018112312

    victorvictor2018112312 Новичок

    С нами с:
    4 сен 2021
    Сообщения:
    9
    Симпатии:
    0
    Всё разобрался, строка mysqli_set_charset($mysqli, "utf8mb4"); помогла, работает через жопу, но работает)
    --- Добавлено ---
    всем спасибо