Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » MySql/PHP: общие вопросы

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Открыть новую тему     Написать ответ в эту тему

Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zagorisback

Цитата:
Почему это повторяется? вы можете это объяснить?

перечитывайте сообщения перед написанием вопроса их касающегося - там давно все исправлено и этого куска нет. была явная опечатка.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 08:38 04-08-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
перечитывайте сообщения перед написанием вопроса их касающегося - там давно все исправлено и этого куска нет. была явная опечатка.

 
Ты прав, я не видел, я исключил это
 

Цитата:
$data = file_get_contents($url, false, stream_context_create($arrContextOptions));  

 
Почему эта переменная имеет пустое значение?
 

Цитата:
$strStatus  = '';

 
 
 
 
 
 
 
 
 

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 08:56 04-08-2022
Samovarov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
zagorisback

Цитата:
Почему эта переменная имеет пустое значение?

Ну, полезная привычка определять переменные перед использованием. Потом к ней я делаю конкатенацию с помощью ".='

Всего записей: 357 | Зарегистр. 20-03-2002 | Отправлено: 09:13 04-08-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ну, полезная привычка определять переменные перед использованием. Потом к ней я делаю конкатенацию с помощью ".='

 
 
Спасибо за ваши разъяснения

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 09:27 04-08-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Почему-то не получается обновление таблицы:
 
        mysqli_query($db, "UPDATE `users` SET `surname` = '$surname', `email1` = '$email',
        `name_photo_1` = '$name_photo_1', `name_photo_2` = '$name_photo_2', `name_photo_3` = '$name_photo_3'
          WHERE `id` = $user_id");
 
Какой можно вписать код, чтобы получить диагностическое сообщение с кодом ошибки?
 
(Я прежде использовал mysql_query, но те диагностические коды к mysqli_query не подходят)

Всего записей: 340 | Зарегистр. 07-09-2016 | Отправлено: 17:16 04-08-2022 | Исправлено: Vladsvn, 17:52 04-08-2022
zagorisback



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Какой можно вписать код, чтобы получить диагностическое сообщение с кодом ошибки?
 
(Я прежде использовал mysql_query, но те диагностические коды к mysqli_query не подходят)

 
 
Ссылка

Всего записей: 623 | Зарегистр. 05-05-2014 | Отправлено: 18:48 04-08-2022
Samovarov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn
 
Первый навык разработчика - гугление!
 
mysqli_error()
 
Но в таком коде - черт ногу сломает.
 
Лучше строку запроса писать отдельно. Кавычек очень много нужных и не нужных
 
типа  
 
$sql = "UPDATE users SET surname = '{$surname}', email1 = '{$email}', name_photo_1 = '{$name_photo_1}', name_photo_2='{$name_photo_2}', name_photo_3= '{$name_photo_3}'  WHERE id={$user_id}":
 
mysqli_query($db, $sql);
 
var_dump(mysqli_error($db));
 
Попробуй, вдруг получится.  

Всего записей: 357 | Зарегистр. 20-03-2002 | Отправлено: 18:55 04-08-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
При использовании mysql_query, я после каждого обращения к базе писал:
 
echo mysql_errno().": ".mysql_error()."<BR>";  
 
Для mysqli_query нет аналогичной простой и понятной строки?
 
***
Можете пояснить происхождение таких атрибутов запроса?

Цитата:
$sql = "UPDATE users SET surname = '{$surname}', email1 = '{$email}', name_photo_1 = '{$name_photo_1}', name_photo_2='{$name_photo_2}', name_photo_3= '{$name_photo_3}'  WHERE id={$user_id}":

 
Почему название таблицы и поля без кавычек? Очень хотелось бы понять общее правило.

Всего записей: 340 | Зарегистр. 07-09-2016 | Отправлено: 21:22 04-08-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Почему название таблицы и поля без кавычек?

потому что они необязательны. только если совпадают с ключевыми словами или используются пробелы/иные специсимволы.
https://dev.mysql.com/doc/refman/8.0/en/keywords.html
http://www.mysql.ru/docs/man/Legal_names.html
 
+ рекомендации https://www.sqlstyle.guide/ru/
 

Цитата:
Для mysqli_query нет аналогичной простой и понятной строки?

вам ее и указали.
echo mysqli_errno($db) . ": " . mysqli_error($db) . "<BR>";

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:29 04-08-2022 | Исправлено: Mavrikii, 21:37 04-08-2022
Samovarov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Почему название таблицы и поля без кавычек?

Потому что можно
 
На самом деле составление сырых запросов - это боль. Надо ж как то и значения экранировать/валидировать.
 
Если есть возможность, лучше использовать какую то библиотеку.  
 
А так, проверьте как составился сам запрос, в переменной $sql -  
echo($sql)  
И то что получилось - в клиента, который подключен к базе (phpMyAdmin или чем вы там пользуетесь)
 
 
 
 
 

Всего записей: 357 | Зарегистр. 20-03-2002 | Отправлено: 21:49 04-08-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Большое спасибо! Сразу дело прояснилось.
 
***  
 
Но вот возник ещё такой вопрос.
 
В таблице users, где записываются регистрационные данные пользователя и пароли, изначально было 7 столбцов. Поиск в ней всегда производится по ID, поэтому такая таблица не казалась слишком тяжелой.
 
Но сейчас в эту таблицу добавлены столбцы профайла пользователя, так что в ней стало 32 столбца.
 
При открытии страницы сайта выводятся комментарии, для которых делаются запросы к этой таблице и извлекаются ФИО зарегистрированных лиц. То есть, оперативно используются всего лишь три столбца, а остальные данные в оперативном режиме не требуются.
 
В перспективе комментариев может быть много (на сайте vc.ru до трех сотен на страницу), при этом возникает беспокойство: не будут ли лишние в данном случае 28 столбцов тормозить работу? Не лучше ли сделать две таблицы - users_1 и users_2, вписав в первую только ФИО, а во вторую все остальное?  
 
   

Всего записей: 340 | Зарегистр. 07-09-2016 | Отправлено: 13:08 05-08-2022
Samovarov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
не будут ли лишние в данном случае 28 столбцов тормозить работу? Не лучше ли сделать две таблицы - users_1 и users_2, вписав в первую только ФИО, а во вторую все остальное?
 
Количество столбиков, не тормозит систему. Тем более в таблице юзер, где записей вряд ли будет больше ста тысяч.  
 
Но скорее всего, таблица юзера на 32 столбика - денормализованная, что может указывать на плохую архитектуру БД и стать причиной различных неприятностей.  
 
И всегда надо помнить о принципе преждевременной оптимизации

Всего записей: 357 | Зарегистр. 20-03-2002 | Отправлено: 13:54 05-08-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Но скорее всего, таблица юзера на 32 столбика - денормализованная, что может указывать на плохую архитектуру БД и стать причиной различных неприятностей.  
 
И всегда надо помнить о принципе преждевременной оптимизации
Проверил по этим критериям. Очень важно, большое спасибо! Похоже, что я время от времени сползаю в эту сторону.
 
 
* * *  
 
Перед записью в базу информации, полученной от пользователей,  ее принято обрабатывать. Вот один из примеров такой обработки (сейчас у меня сделано именно так):
 
$message = isset($_POST['message']) ? trim($_POST['message']) : null;
$message = preg_replace('#<(/?)(br)>#', '[$1$2]', $message);
$message = filter_var($message, FILTER_SANITIZE_STRING);
 
С первой строкой все ясно, а вот что делается во второй строке?
 
А вместо третьей строки я бы использовал функцию htmlspecialchars(). Чем это хуже?
 
 
 
 

Всего записей: 340 | Зарегистр. 07-09-2016 | Отправлено: 14:11 05-08-2022
Samovarov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn
Вторая строчка меняет тег br, на его BB аналог.
Третья - готовит строку для записи в базу данных - удаляет и экранируют все стременное. Не уверен что этого достаточно. Не помню.
 
Смотрю на ваш код и чувствую себя лет на 15 моложе)))
 
Глобальные переменные и сплошной хард. Хеви-металл.
 
Добавлено:

Цитата:
А вместо третьей строки я бы использовал функцию htmlspecialchars(). Чем это хуже?

Даже лучше.

Всего записей: 357 | Зарегистр. 20-03-2002 | Отправлено: 14:18 05-08-2022 | Исправлено: Samovarov, 14:25 05-08-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Смотрю на ваш код и чувствую себя лет на 15 моложе)))
Сайт сделан профессиональным программистом в марте этого года.  
Позже парень выиграл какой-то конкурс и его взяли на постоянную работу то ли в wildberries, то ли в Озон.
 

Цитата:
Глобальные переменные и сплошной хард. Хеви-металл.
Покритикуйте ещё, плиз! Где Вы увидели глобальные переменные? Что ещё бросается в глаза, какая не оптимальность, древность?  
 
 
 
 
 
 

Всего записей: 340 | Зарегистр. 07-09-2016 | Отправлено: 14:36 05-08-2022
Samovarov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Где Вы увидели глобальные переменные?

Ну, $_POST. например
 
Давненько я не видел прямой работой с суперглобальными переменными.  
 
Есть классный бесплатный курс, великого человека Дмитрия Елисеева! Если у вас хватит выдержки его досмотреть, то вы станете проф. разработчиком! Шучу конечно, но зачем и что делать - поймете.
 
PSR-7 фреймворк 1/7: Структура и работа с HTTP
 

Всего записей: 357 | Зарегистр. 20-03-2002 | Отправлено: 14:51 05-08-2022 | Исправлено: Samovarov, 14:51 05-08-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Ну, $_POST. например
Есть ли способ передачи информации из формы без $_POST? Мне о таком не доводилось слышать.
 
(Кстати,  Елисеев точно также использует суперглобальный массив $_GET)

Всего записей: 340 | Зарегистр. 07-09-2016 | Отправлено: 15:35 05-08-2022
Samovarov



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
Елисеев точно также использует суперглобальный массив $_GET

Но все это оборачивается в объект, которым очень удобно пользоваться без опасности "порчи" этих самых глобальных переменных. В уроках Елесеева показывается, как и зачем от использования суперглобальных переходят к работе с объектами-оберткаи.
 
 
Вот, допустим, я тут работаю с Symfony объектом Request
 
  public function indexNodesApi(Request $request): array
  {
    $params = new OfficialJournalRequest($request);
    $page = $request->get('page', 0);
    $perPage = $request->get('per_page', self::PER_PAGE_DEFAULT);
    if ($perPage > self::PER_PAGE_MAX) {
      $perPage = self::PER_PAGE_MAX;
    }
    return [
      'total' => $this->count($params),
      'per_page' => $perPage,
      'page' => $page,
      'items' => $this->adapterNodesDataApi($this->getNodes($params, $page, $perPage))
    ];
  }
 
 
 
Вот это присвоение из суперглобальной $_GET['page'] (не совсем, но не суть важно) или возвращает параметр по умолчанию '0'
 
$page = $request->get('page', 0);
 
Мало того что это просто красивее и безопаснее, так у этого объекта множество полезных функций и возможностей и, потому, сегодня все так работают.  
 
И если вы видите $_GET и что то подобное в коде, то этот код - легаси.

Всего записей: 357 | Зарегистр. 20-03-2002 | Отправлено: 16:22 05-08-2022 | Исправлено: Samovarov, 16:23 05-08-2022
Vladsvn

Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Похоже, что теперь я понял, о чем Вы. Или, по крайней мере, начинаю понимать. А то поначалу мне показалось из Ваших слов, что использование глобальных переменных вообще в корне устарело. Очень удивился - а как же без них?
Спасибо!

Всего записей: 340 | Зарегистр. 07-09-2016 | Отправлено: 17:33 05-08-2022 | Исправлено: Vladsvn, 18:28 05-08-2022
Mavrikii

Platinum Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Vladsvn

Цитата:
что использование глобальных переменных вообще в корне устарело

не устарело. и вам, если хотите даже использовать фреймворк, нужно понимать как все работает на низком уровне. а только после этого использовать уже какие то вспомогательные обертки, чтобы явно понимать что, как и зачем они делают внутри себя.  
потому что после этого вы сможете написать для себя что вам удобнее, что больше подходит в вашей ситуации.

Всего записей: 15040 | Зарегистр. 20-09-2014 | Отправлено: 21:27 05-08-2022 | Исправлено: Mavrikii, 21:28 05-08-2022
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76

Компьютерный форум Ru.Board » Интернет » Web-программирование » MySql/PHP: общие вопросы


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru