Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Экранирование $ / 14 сообщений из 14, страница 1 из 1
15.11.2016, 20:28
    #39347887
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Как правильно экранировать $ в php? Нужно написать веб-форму для работы с таблицами mon$, сразу столкнулся с необходимостью экранировать $ в именах таблиц и т.п.
При таком варианте
<?php
#error_reporting(0);
echo'<tr><td>'.'MON$ATTACHMENT_ID'.'</td><td>'.'MON$USER'.'</td><td>'.'MON$TIMESTAMP'.'</td><td>'.'MON$REMOTE_PROCESS'.'</td>';
$host = 'localhost:D:\FDBase\TEST.FDB';
$connection = ibase_connect($host, 'SYSDBA', 'masterkey', 'UTF8') or die(ibase_errmsg()) ;
$query="select MON\$ATTACHMENT_ID , MON\$USER, MON\$TIMESTAMP,MON\$REMOTE_PROCESS from MON\$ATTACHMENTS";
$result=ibase_query($connection,$query) or die(ibase_errmsg());
while($row = ibase_fetch_assoc($result))
{
$MON\$ATTACHMENT_ID = $row['MON\$ATTACHMENT_ID'];
$MON\$USER = $row['MON\$USER'];
$MON\$TIMESTAMP = $row['MON\$TIMESTAMP'];
$MON\$REMOTE_PROCESS = $row['MON\$REMOTE_PROCESS'];
echo'<tr><td>'.$MON\$ATTACHMENT_ID.'</td><td>'.$MON\$USER.'</td><td>'.$MON\$TIMESTAMP.'</td><td>'.$MON\$REMOTE_PROCESS.'</td>';
}
ibase_close($connection);
?>
получаю ошибку Parse error: syntax error, unexpected '\' (T_NS_SEPARATOR)
Эту проблему обошел, но хочу понять как решить это без секса на лыжах и гамаке. Обошел вот так:
<?php
#error_reporting(0);
echo'<tr><td>'.'MON$ATTACHMENT_ID'.'</td><td>'.'MON$USER'.'</td><td>'.'MON$TIMESTAMP'.'</td><td>'.'MON$REMOTE_PROCESS'.'</td>';
$host = 'localhost:D:\FDBase\TEST.FDB';
$connection = ibase_connect($host, 'SYSDBA', 'masterkey', 'UTF8') or die(ibase_errmsg()) ;
$query="select MON\$ATTACHMENT_ID as ATTACHMENT_ID, MON\$USER as muser, MON\$TIMESTAMP as mtimestamp,MON\$REMOTE_PROCESS as REMOTE_PROCESS from MON\$ATTACHMENTS ";
$result=ibase_query($connection,$query) or die(ibase_errmsg());
while($row = ibase_fetch_assoc($result))
{
$ATTACHMENT_ID = $row['ATTACHMENT_ID'];
$USER = $row['MUSER'];
$TIMESTAMP = $row['MTIMESTAMP'];
$REMOTE_PROCESS = $row['REMOTE_PROCESS'];
echo'<tr><td>'.$ATTACHMENT_ID.'</td><td>'.$USER.'</td><td>'.$TIMESTAMP.'</td><td>'.$REMOTE_PROCESS.'</td>';
}
ibase_close($connection);
?>
...
Рейтинг: 0 / 0
15.11.2016, 20:32
    #39347892
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Gallemar,

в PHP $ надо экранировать только когда она встречается в строке обрамлённой двойными кавычками. Если строка обрамлена одинарными кавычками экранировать $ не надо.
...
Рейтинг: 0 / 0
15.11.2016, 20:38
    #39347896
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Симонов Денис,не получается. Ошибка Parse error: syntax error, unexpected '$ATTACHMENT_ID' (T_VARIABLE) при
#error_reporting(0);
echo'<tr><td>'.'MON$ATTACHMENT_ID'.'</td><td>'.'MON$USER'.'</td><td>'.'MON$TIMESTAMP'.'</td><td>'.'MON$REMOTE_PROCESS'.'</td>';
$host = 'localhost:D:\FDBase\TEST.FDB';
$connection = ibase_connect($host, 'SYSDBA', 'masterkey', 'UTF8') or die(ibase_errmsg()) ;
$query="select MON\$ATTACHMENT_ID , MON\$USER, MON\$TIMESTAMP,MON\$REMOTE_PROCESS from MON\$ATTACHMENTS";
$result=ibase_query($connection,$query) or die(ibase_errmsg());
while($row = ibase_fetch_assoc($result))
{
$MON$ATTACHMENT_ID = $row['MON$ATTACHMENT_ID'];
$MON$USER = $row['MON$USER'];
$MON$TIMESTAMP = $row['MON$TIMESTAMP'];
$MON$REMOTE_PROCESS = $row['MON$REMOTE_PROCESS'];
echo'<tr><td>'.$MON$ATTACHMENT_ID.'</td><td>'.$MON$USER.'</td><td>'.$MON$TIMESTAMP.'</td><td>'.$MON$REMOTE_PROCESS.'</td>';
}
ibase_close($connection);
?>
...
Рейтинг: 0 / 0
15.11.2016, 20:45
    #39347903
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
А не пойти ли тебе в раздел пых-пыха?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
15.11.2016, 20:47
    #39347905
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Dimitry Sibiryakov,чтобы там делали большие глаза увидев ibase_ ?
...
Рейтинг: 0 / 0
15.11.2016, 20:55
    #39347908
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Gallemar,

во первых у тебя тэг tr не закрыт

Код: php
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.
echo '<table>';
echo '<thead>';
echo '<tr>';
echo '<th>MON$ATTACHMENT_ID</th>';
echo '<th>MON$USER</th>';
echo '<th>MON$TIMESTAMP</th>';
echo '<th>MON$REMOTE_PROCESS</th>';
echo '</tr>';
echo '</thead>';
$host = 'localhost:D:\FDBase\TEST.FDB'; 
$connection = ibase_connect($host, 'SYSDBA', 'masterkey', 'UTF8') or die(ibase_errmsg()) ;
$query='select MON$ATTACHMENT_ID , MON$USER, MON$TIMESTAMP, MON$REMOTE_PROCESS from MON$ATTACHMENTS';
$result=ibase_query($connection, $query) or die(ibase_errmsg());
echo '<tbody>';
while($row = ibase_fetch_assoc($result)) 
{
  echo '<tr>';
  echo '<td>' . $row['MON$ATTACHMENT_ID'] . '</td>';
  echo '<td>' . $row['MON$USER'] . '</td>';
  echo '<td>' . $row['MON$TIMESTAMP'] . '</td>';
  echo '<td>' . $row['MON$REMOTE_PROCESS'] . '</td>' . 
  echo '</tr>';
}
echo '</tbody>';
echo '</table>';
ibase_free_result($result); // про это ты забыл
ibase_close($connection); 



ИХМО, всё равно говнокод. Если собираешься делать что-то посерьёзней представление надо отделять логики.
...
Рейтинг: 0 / 0
15.11.2016, 21:01
    #39347910
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Симонов Денис надо отделять логики.
Это как? Про говнокод согласен, практики практически нет.
...
Рейтинг: 0 / 0
15.11.2016, 21:12
    #39347914
Dorin Marcoci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Gallemarчтобы там делали большие глаза увидев ibase_ ?
Никакие глаза. ibase_ как и FB PDO драйвер входят в Core, а это значит что стараются поддерживать как могут.
И вообще, много российских разработчиков в недрах пыха, общительные и отзывчивые.
...
Рейтинг: 0 / 0
15.11.2016, 21:13
    #39347916
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Gallemar,

работу с данными надо отделять от отображения. Если на каком-то этапе работы у тебя произойдёт ошибка, то в браузер будет выведено непонятно что. Ради интереса можешь почитать про архитектуру MVC, которая используется в довольно больших веб приложениях. Если я правильно понимаю ты себе делаешь мелкую примочку, чтобы мониторить БД через браузер, поэтому скорее всего для тебя MVC будет перебором.
...
Рейтинг: 0 / 0
15.11.2016, 21:20
    #39347919
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Симонов Денис,ну да. У меня есть мониторинг, который смотрит за самой БД (статистика по транзакциям, размер БД, кол-во пользователей), за учетной системой (время запуска всевозможных автоматических процессов и время их выполнения), контроль пользователей (кто,что и как делал). Поверх этого всего пишу простой веб-интерфейс на php, пока самые важные вещи. Про MVC представление имею, немного знаком с соответствующими фреймворками.
...
Рейтинг: 0 / 0
15.11.2016, 21:22
    #39347922
Dorin Marcoci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
GallemarЭто как?
Отделить представление данных (view/html код) от логики (извлечение, обработка, модели данных).
Обычно используют темплэйты, а не echo '<td>'. Cмотри в сторону "include".
И дальше совершенству нет пределов. Миллион CMSов и подходов.
Я для себя придумал что-то а ля делфийские компоненты с парентом и рендерингом.
...
Рейтинг: 0 / 0
16.11.2016, 06:52
    #39348026
Gallemar
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Dorin Marcoci, а где можно почитать как правильный код писать? А то у меня знания по php десятилетней давности.
...
Рейтинг: 0 / 0
16.11.2016, 09:34
    #39348083
Dorin Marcoci
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
Незнаю, это приходит со временем :)

Вот что быстро нагуглил и показалось OK:
http://www.phptherightway.com/
https://phpbestpractices.org/

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

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

Для фронт-сайда обычно есть хорошие либы как например ExtJs , Kendo, Bootstrap, Angular и на бэке код PHP получается чистый.
...
Рейтинг: 0 / 0
17.11.2016, 07:21
    #39348782
Tonal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Экранирование $
«Всё украдено до нас» ©
тыц1 , тыц2 , тыц3
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Экранирование $ / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]