PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи

Страниц (1): [1]

> Найдено сообщений: 14
lexdevel Отправлено: 15 Августа, 2013 - 13:52:33 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
DeepVarvar пишет:
Золотые слова.
Ато понатыкают объектов ради объектов и считают что это круто..
Вместо того чтобы нормально продума, а нужен ли тут вообще объект.
ООП головного мозга - неизлечимо.
А меж тем есть и противники ООП.

Ну я не противник ООП, в С++ я их очень люблю (ООП + паттерн Wrapper), что мне очень упрощает жизнь, ну опять же, когда это востребовано.
Смысл делать объект со статическим методом вывода строки в консоль? Не проще сразу функцию вызвать? Так же и здесь, получается предлагается сделать класс, который только и умеет, что соединяться с мускулом, и смысл?
lexdevel Отправлено: 15 Августа, 2013 - 13:46:29 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
Okula пишет:
Ну а что? Если он C++ знает, а это объектный язык то пусть и пишет в привычной для себя форме. Думаю с объектами ему будет проще работать.

Ну Вы, конечно, сравнили С++ ООП и PHP ООП... Привычная для меня форма - это строгая типизация данных, привычные области видимости, глобальные переменные, инклюды и т.д. Лучше пока что функциями сделаю, тем более задача довольно тривиальная, да к чему там вводить ООП? Я понимаю, если бы полиморфизм использовал, наследование, много модулей...
lexdevel Отправлено: 15 Августа, 2013 - 12:37:01 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
LIME пишет:
никто не увидел что после инклуда тупо отсутствует ; ??
вроде пробежал всю тему никто не указал
потому и не подрубается из отдельного файла
надо нормальными редакторами пользоваться

Я писал в редакторе форума, мог что-то не указать. Все есть в проекте, все точки с запятыми и т.д., как бы программирование знаю. Здесь опечатка просто.
lexdevel Отправлено: 15 Августа, 2013 - 10:12:10 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
esterio пишет:

пошел учить си. Стало интересно перевернуть мозги

Правильный выбор)

DeepVarvar пишет:
Вобщем пиши как и что получилось наковырять.
Со стороны довольно интересно наблюдать сдвиг логики.

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

DeepVarvar пишет:
На самом деле на пыха гнать не надо - тут есть свои нюансы реализации интерпретируемого языка, что накладывает такие вот особенности очень похожие на костыли.
А все потому, что они не хотят отказываться от старого ядра сразу, оставляя поддержку предыдущих версий.

Да тут не гон, скорее недопонимание... Опять же, javascript как-то более логичен (опять же с точки зрения сишника Радость), а тут не до конца еще...

В общем, всем огромное спасибо за помощь! Буду курить дальше...
lexdevel Отправлено: 15 Августа, 2013 - 00:36:06 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
Okula пишет:
lexdevel, что бы переменная стала глобальная (была видна в любой области видимости) её нужно записать в суперглобальный массив $GLOBALS или же использовать ключевое слово global как я делал в своём примере.
Если переменна находится не в функции, а просто в php файле - это не значит что она в глобальной области видимости. Она в области видимости этого файла, а если уже подключить этот файл с помощью include (или каким другим способом) она будет находится в области видимости файла в котором было произведено подключение, но никак не в области видимости функции описанной в этом же файле.

Да уж... Логика... Остается только
lexdevel Отправлено: 15 Августа, 2013 - 00:20:54 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
Okula пишет:
DeepVarvar, ну там у меня хотябы понятно для чего классы и методы писались, а тут функция ради функции.
lexdevel, почему не логично? У каждой функции, класса, метода класса своя область видимости. Область видимости не ограничивается файлом.

Не, это как раз понятно, не понятно, то, что я объявил (ну и у Вас было показано в примере) в зоне видимости выше (вроде как глобально) переменные, а они не видны из функций... Вот если в функции использовать переменные, то, понятное дело, они извне не видны)
lexdevel Отправлено: 15 Августа, 2013 - 00:10:26 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
DeepVarvar пишет:
lexdevel пишет:
Вроде в одной зоне видимости

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. $var = "Test";
  3. function test() {
  4.   echo $var;
  5. }
  6. test(); // Undefined variable $var on line N

Та уже догадался, но все равно непонятно/нелогично/непривычно, в общем, в голове не укладывается((
Спасибо за помощь!)
lexdevel Отправлено: 15 Августа, 2013 - 00:05:33 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
Okula пишет:
lexdevel, ничего у тебя не будет видно.
Переменные $mysql_host, $mysql_user, $mysql_pass и $mysql_base не видны внутри функции registerUser() потому что у них разные области видимости.
Как заставить их быть видными внутри функции: использовать ключевое слово global
Выглядеть будет так:
PHP:
скопировать код в буфер обмена
  1. $mysql_host = ""; // Host
  2. $mysql_user = ""; // User
  3. $mysql_pass = ""; // Password
  4. $mysql_base = ""; // Database Name
  5.  
  6.  
  7. function registerUser($login, $password) {
  8.     global $mysql_host, $mysql_user, $mysql_pass, $mysql_base;
  9.     $link = mysqli_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_base);
  10.     // ... etc
  11.     // if some error -> return false;
  12.     mysqli_close($link);
  13.     return true;
  14. }

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


Странно... Вроде в одной зоне видимости, хотя не буду спорить, мне просто сложно это понять, вот и все... Спасибо за ответ) Если не рекомендуется, то лучше оставлю на "план Б")
lexdevel Отправлено: 15 Августа, 2013 - 00:02:59 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
DeepVarvar пишет:
5) Нет нужды ставить закрывающий тег в конце файла. Это даже помогает. Но не будем углубляться.

6) Накидал пример с пояснениями:


5. Эм... Не понял ... Ладно, не будем углубляться, все равно я скоро вернусь к своему любимому с++ и... нет, этого я уже не забуду)
6. "Магия" - это круто)

В общем, спасибо огромное) Буду пытаться)
lexdevel Отправлено: 14 Августа, 2013 - 23:49:17 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
DeepVarvar пишет:
lexdevel:

1) Все переменные нет нужды объявлять в начале. Их можно объявлять на лету динамически прямо по ходу выполнения. Понадобилась переменная - декларируй.

2) Существует область видимости, и переменная объявленная внутри ф-ции не видна извне. А те кто объявлен вне ф-ции не видны внутри неё.

3) Вместо пошаговой отладки используй конструкцию вида: exit("Check message! Value = " . $var);

4) Примеры использования у нас не очень, сейчас найду что-то ближе к теме с нормальным перехватом ошибок.


1) Нет нужны - это не значит, что это есть ошибка, просто привычка такая уже выработалась
2) Я тоже читал про это, даже на сайте здесь урок по зонам видимости, но опять же, в моем случае - все должно быть видно
3) Я пока что сделал функцию эха пошагово на экран, заполняел по типу "<li>$message</li>", так и отловил, что функция "зависает"
4) Пример придумал вообще самый простой, чтобы просто потестить и не заморачиваться. БД, Таблица юзеров 3 поля (Id, Login, Password), никакого шифрования/хэширования и т.д. В общем, чисто для теста чтобы минимум времени потратить и разобраться в проблеме...

А вообще, спасибо за ответ. И за поиски примера) Может реально поможет)
lexdevel Отправлено: 14 Августа, 2013 - 23:24:45 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
imya пишет:

Да уж...жаль пошаговой отладки нет

Ладно, и на этом спасибо)
lexdevel Отправлено: 14 Августа, 2013 - 23:14:48 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
imya пишет:
Допишите
взято из мануала:
PHP:
скопировать код в буфер обмена
  1. if (mysqli_connect_errno($link)) {
  2.     echo "Не удалось подключиться к MySQL: " . mysqli_connect_error();
  3. }

И посмотрите, что за ошибку выдаст

Эм... я просто не написал этого в сообщении, но мануалы читать умею, поэтому поставил коммент, что возвращаю false. Проверяю я ошибки)
Суть в том, что функция "зависает" и дальше обработка не происходит.
Тут вся суть в том, что 2 файла, я хз почему, т.к. ситуация нелогичная абсолютно. Если вкинуть в один файл, то все работает.
lexdevel Отправлено: 14 Августа, 2013 - 22:58:48 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
imya пишет:
Как-то вы странно коннектитесь к базе через mysqli
Почитайте http://www.php.net/manual/ru/mysqli.quickstart.connections.php

Да, я видел, но мне непривычен в PHP ООП интерфейс, как я уже говорил, к тому же разрабы специально для таких как я оставили функциональный интерфейс. Но суть вопроса не в этом
lexdevel Отправлено: 14 Августа, 2013 - 22:30:31 • Тема: Вызов функции, в которой есть SQL из другого файла • Форум: Вопросы новичков

Ответов: 44
Просмотров: 1599
Всем привет!

Я сразу прошу прощения за, наверное, идиотский вопрос, однако тема всплыла, надо порешать, гугл не помог.

Ситуация: я сам c++ разработчик, но так получилось, что надо на PHP сделать регистрацию. Ну и пошел по сишному)
Дабы не углубляться в процесс изучения ООП на PHP, решил сделать эту тривиальную задачу функционально.

Сделал файл functional.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP
  3.     $mysql_host = ""; // Host
  4.     $mysql_user = ""; // User
  5.     $mysql_pass = ""; // Password
  6.     $mysql_base = ""; // Database Name
  7.  
  8.     function registerUser($login, $password) {
  9.         $link = mysqli_connect($mysql_host, $mysql_user, $mysql_pass, $mysql_base);
  10.         // ... etc
  11.         // if some error -> return false;
  12.         mysqli_close($link);
  13.         return true;
  14.     }
  15. ?>
  16.  


Ну и register.php
PHP:
скопировать код в буфер обмена
  1.  
  2. <?PHP include "functional.php"; ?> // Also I tried requere, requere_once...
  3. // ...
  4. <?PHP
  5.     $login = $_POST["login"];
  6.     $pass = $_POST["password"];
  7.  
  8.     if(registerUser($login, $password) == false) {
  9.         // Here error message and return
  10.     }
  11.     // Here page redirecting to index.php with current $_SESSION filled with Id, etc...
  12. ?>
  13. // ...
  14.  


Странно то, что зависает на соединении, и ничего не выдает((
Страница грузится прямо до момента вызова функции mysqli_connect

НО: Если ЭТО ЖЕ САМОЕ сделать в одном файле - все работает нормально)

Подскажите, пожалуйста, что не так?

Спасибо!

Страниц (1): [1]
Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB