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 :: Пользовательская функция в Пользовательской функции
$sql="INSERT INTO `users` (`borncity`,`login`,`pass`,`email`,`realname`,`borndate`,`sex`,`ip`,`shadow`,`refer`) VALUES('Авалон','$login','".md5($_POST['password'])."','{$_POST['email']}','{$_POST['name']}','1','{$_POST['sex']}','127.0.0.1','1','1')";
$result=$db->sql_query($sql);
$good="Все прошло успешно!";
return$good;
}
Мне нужно использовать первую функцию во второй функции, т.е. когда я вызываю в нужно месте функцию add_to_mysql(параметр) мне нужно чтобы внутри неё выполнялась функция check_add_to_mysql(параметр), возращала $error и эта переменная отображалась бы на экране.
$sql="INSERT INTO `users` (`borncity`,`login`,`pass`,`email`,`realname`,`borndate`,`sex`,`ip`,`shadow`,`refer`) VALUES('Авалон','$login','".md5($_POST['password'])."','{$_POST['email']}','{$_POST['name']}','1','{$_POST['sex']}','127.0.0.1','1','1')";
$result=$db->sql_query($sql);
$good="Все прошло успешно!";
return$good;
}
}
то в базу уже не записывает, видимо все-таки что-то возращается, но и на экран тоже ничего не выводится при вызове функции
JustUserR
Отправлено: 05 Сентября, 2010 - 13:09:45
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Santehnick пишет:
Мне нужно использовать первую функцию во второй функции
В языке PHP все пользовательские функции не являются объектами первого рода и всегда сохраняются в глобальной области видимости и являются независимыми от местоположения их определения - тем не менее функции в общем виде могут находиться в некотором пространстве имен определяемым именем класса и операцией расширения области видимости При этом несмотря на то что пользовательские функции являются инвариантными относительно расположения их описания - тем не менее добавление очередной функции в общую таблицу присходит только после явного выполнения кода в которой находится ее определение - таким образрм одна функция может быть определена внутри другой но это означает лишь ее отложенное добавление к общей таблице функций
Для вызова одной пользовательской функции внутри другой необходимо только удостовериться что в указанный момент запрашиваемая функция уже инициализирована - и ее жальшейший выхов происходит только по имени
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Santehnick
Отправлено: 05 Сентября, 2010 - 13:28:50
Новичок
Покинул форум
Сообщений всего: 13
Дата рег-ции: Сент. 2010
Помог: 0 раз(а)
JustUserR пишет:
Santehnick пишет:
Мне нужно использовать первую функцию во второй функции
В языке PHP все пользовательские функции не являются объектами первого рода и всегда сохраняются в глобальной области видимости и являются независимыми от местоположения их определения - тем не менее функции в общем виде могут находиться в некотором пространстве имен определяемым именем класса и операцией расширения области видимости При этом несмотря на то что пользовательские функции являются инвариантными относительно расположения их описания - тем не менее добавление очередной функции в общую таблицу присходит только после явного выполнения кода в которой находится ее определение - таким образрм одна функция может быть определена внутри другой но это означает лишь ее отложенное добавление к общей таблице функций
Для вызова одной пользовательской функции внутри другой необходимо только удостовериться что в указанный момент запрашиваемая функция уже инициализирована - и ее жальшейший выхов происходит только по имени
такое чувство что какой-то абзац из книги, мне не это вовсе нужно, а решение проблемы, почему не работает. Мои функции находятся в классе, я прежде чем записать новую строку в Базу Данных, хочу проверить её своей функцией, которая проверяет корректно ли заполнено поле.
JustUserR
Отправлено: 05 Сентября, 2010 - 13:33:49
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Santehnick пишет:
Мои функции находятся в классе, я прежде чем записать новую строку в Базу Данных, хочу проверить её своей функцией, которая проверяет корректно ли заполнено поле.
Если вы используете класс для инкапсуляции собственного соединения с БД то желательно сохранять все переменные внутни него - в вашем случае получается что вы испоьзуете внешнюю переменную к которой обращаетесь в оператором global в то время как для каждого экземпляра класса доступ должен быть через $this-объект
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Santehnick
Отправлено: 05 Сентября, 2010 - 13:50:43
Новичок
Покинул форум
Сообщений всего: 13
Дата рег-ции: Сент. 2010
Помог: 0 раз(а)
JustUserR пишет:
Santehnick пишет:
Мои функции находятся в классе, я прежде чем записать новую строку в Базу Данных, хочу проверить её своей функцией, которая проверяет корректно ли заполнено поле.
Если вы используете класс для инкапсуляции собственного соединения с БД то желательно сохранять все переменные внутни него - в вашем случае получается что вы испоьзуете внешнюю переменную к которой обращаетесь в оператором global в то время как для каждого экземпляра класса доступ должен быть через $this-объект
да блин причем тут глобал вообще. я пишу о том, что мне нужно вызвать как-то функцию проверки(#1) в функции добавления в базу данных новой строки(#2) и все! больше ничего, все остальное у меня работает нормально. И я писал что функции находятся в одном классе, так же говорил что в функции add_to_mysql я пробовал вызывать функцию check_add_to_mysql, вот таким образом $this->check_add_to_mysql($login) ; именно при помощи ключевого слова $this, потому что еще раз говорю обе функции находятся в одном классе.
Чтобы потом когда я создам объект и обращусь к функции вот так
у меня в этой функции чтобы сработала функция проверки (check_add_to_mysql) и вывела мне переменную $error на экран, точнее её содержимое, а если все условия пройдутся нормально, то запись добавлялось в базу данных. А сейчас у меня не хочет работать функция проверки в функции добавления, когда я вызываю её $this->check_add_to_mysql($login) ; вот так, она не срабатывает и данные сразу добавляются в базу, не знаю уже как объяснить.
global $db это сделано для того, чтобы я мог обратиться к объекту $db и работать с его функциями, например с sql_query. это у меня все работает прекрасно. (Добавление)
все сам догнал, всего-то надо было в функции добавления написать вот так:
К тому, что так вообще не делают. Что оно работает - это понятно, но так не делают.
Кстати, у вас спокойно пройдёт SQL инъекция. Всё, что идёт из внешних источников (в первую очередь $_GET, $_POST, куки) в базу экранируйте через mysqli_real_escape_string / mysql_real_escape_string (в зависимости от того, какую используете библиотеку)
К тому, что так вообще не делают. Что оно работает - это понятно, но так не делают.
Кстати, у вас спокойно пройдёт SQL инъекция. Всё, что идёт из внешних источников (в первую очередь $_GET, $_POST, куки) в базу экранируйте через mysqli_real_escape_string / mysql_real_escape_string (в зависимости от того, какую используете библиотеку)
спасибо. На счет sql-injection в курсе, как защититься тоже, написал пользовательскую функцию простенькую от защиты sql-injection, просто буду перед запросом все переменные ей обрабатывать, пока не успел просто сделать этого.
JustUserR
Отправлено: 06 Сентября, 2010 - 16:43:10
Активный участник
Покинул форум
Сообщений всего: 8715
Дата рег-ции: Июнь 2009
Помог: 17 раз(а)
Santehnick пишет:
Нужно вызвать как-то функцию проверки(#1) в функции добавления в базу данных новой строки(#2) и все!
В языке PHP до интерпретатора версии 5.3 все создаваемые пользовательские функци записанные в уровне исходного кода не являются объектами первого рода - тем не менее возможности ООП позволяют сохранять функции не в общей глобальной области - а распределять их по пространствам имен определяемых именем класса
Соответственно функции в PHP не хранят контекст по определению - и для вызова некоторого метода в классе обязательно указать конкретный экземпляр к которому идет применение - иначе в качестве идентификатора вызываемой функции будет использовать элемент из глобальной области видисти То есть доступной формой вызова метода является $this->method или class::method - при этом в отсутствие оператора static объект текущего экзампляра передается автоматически
Santehnick пишет:
А написано что портал для новичков, а скидывают какие-то абзацы из книг мне
В предыдущем сообщении я не передавал вам цитату из книги или общедоступной статьи - приведенный текст описывает общий механизм работы функций в классах
----- Сделать можно все что угодно - нужно только старание, терпение и хороший поисковик
Безлимитный web-хостинг от 15 рублей за 40 МБ дискового пространства - http://ihost[dot]oks71[dot]ru/
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.