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 :: Не работает global в функции

 PHP.SU

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


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

> Без описания
qtk
Отправлено: 05 Февраля, 2013 - 08:50:38
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Такая проблема, есть база , там хранятся статьи и заголовки к статьям. Пытаюсь засунуть запрошенный заголовок в функцию.
PHP:
скопировать код в буфер обмена
  1. Function foo() {
  2. global $paper['topic'];//синтаксическая ошибка
  3. $GLOBALS['paper'];//никаких результатов
  4. $GLOBALS['paper']['topic'];//никаких результатов
  5. }
  6.  

такие варианты не подходят:
PHP:
скопировать код в буфер обмена
  1.  
  2. Function foo($paper['topic']) {
  3. echo $paper['topic'];
  4. ...
  5. }
  6.  
  7. $t=$paper['topic'];
  8. Function foo() {
  9. globals $t;
  10. ...
  11. }
  12.  

(Отредактировано автором: 05 Февраля, 2013 - 09:09:33)

 
 Top
KingStar
Отправлено: 05 Февраля, 2013 - 09:11:40
Post Id



Участник


Покинул форум
Сообщений всего: 1889
Дата рег-ции: Авг. 2011  
Откуда: Беларусь


Помог: 69 раз(а)




PHP:
скопировать код в буфер обмена
  1. global $paper;
  2. echo $paper['topic'];


-----
То что программа работает, не означает что она написана правильно!
 
 Top
qtk
Отправлено: 05 Февраля, 2013 - 09:15:52
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




KingStar пишет:
PHP:
скопировать код в буфер обмена
  1. global $paper;
  2. echo $paper['topic'];
к сожалению то же не работает(((
 
 Top
LShark
Отправлено: 05 Февраля, 2013 - 09:35:54
Post Id



Частый гость


Покинул форум
Сообщений всего: 240
Дата рег-ции: Нояб. 2012  


Помог: 1 раз(а)




А ты глобалку объяви не в функции, а в основной части программы.
А уже потом ее можно использовать в функциях и т.д.
<php?
global $paper;
$paper="Хыч-хыч тум-дум.";

function foo() {
echo $paper;
}
?>

Но лучше обращаться через суперглобалку:

$GLOBALS["$paper"]

Блин, вот я слепой, не увидел, что речь идет о массиве.

Тогда ниженаписанные варианты лучше, особенно с передачей массива функции.

(Отредактировано автором: 05 Февраля, 2013 - 09:44:13)



-----
Истина прежде всего в том, что...
 
 Top
DelphinPRO
Отправлено: 05 Февраля, 2013 - 09:37:52
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




PHP:
скопировать код в буфер обмена
  1. // Это у вас где-то по коду, в глобальной области видимости
  2. // объявляется массив $paper
  3. $paper = array('topic'=>'OK');
  4.  
  5. ...
  6. // 1 вариант
  7. Function foo() {
  8.   global $paper;
  9.   echo $paper['topic'];
  10. }
  11. foo(); // вызов функции
  12.  
  13. // 2 вариант
  14. Function foo2($data) {
  15.   echo $data['topic'];
  16. }
  17. foo2($paper); // вызов функции.

(Отредактировано автором: 05 Февраля, 2013 - 09:38:56)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
qtk
Отправлено: 05 Февраля, 2013 - 09:42:38
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




Проблема еще в том, что я не хочу городить лишний код в не функции foo.
И проще было бы
PHP:
скопировать код в буфер обмена
  1.  
  2. Function foo($paper['topic']) {
  3. echo $paper['topic'];
  4. ...
  5. }

(Добавление)
Все что вы написали не работает)))))
а делать так я не хочу
PHP:
скопировать код в буфер обмена
  1. Function foo($paper['topic']) {
  2. echo $paper['topic'];
  3. ...
  4. }

(Добавление)
вот скрипт целиком
PHP:
скопировать код в буфер обмена
  1. function content() {
  2.       global $choice,$ch,$id,$topic;
  3.       if(!preg_match("/(blog|management|usability|seo|monetization)/",$ch) OR !preg_match("/^[0-9]+$/",$id) OR !preg_match("/(Создание и прочее|Ведение и наполнение|Юзабилити|SEO-продвижение|Монетизация)/",$_GET['topic'])) {
  4.              $choice=NULL;
  5.              $ch=NULL;
  6.          $id=NULL;
  7.                  echo '<meta http-equiv="refresh" content="0; url=/index.php">';
  8.           }
  9.           $paper=mysql_fetch_array(mysql_query("SELECT * FROM $ch WHERE `id`=$id LIMIT 1"));
  10.           echo
  11.              '<div class="paper_ins">
  12.                  <h2>'.$paper['topic'].'</h2>
  13.         <div class="paper_text">
  14.                  <img src="/img/office/'.$choice.'/'.$paper['img'].'" height="147" alt="Картинка к статье" title="'.$paper['topic'].'">'.$paper['text'].
  15.                  '</div>
  16.                  <div class="info">
  17.                  <div class="data">'.date_convert($paper['date']).'</div>
  18.                  <div class="section">'.$_GET['topic'].'</div>
  19.                  <div class="author">'.$paper['author'].'</div>
  20.                  </div></div>
  21.                  <div class="sn"><span>Поделиться статьей:&nbsp;</span>'.social_network().'</div>';
  22.           $com=mysql_query("SELECT * FROM $ch LEFT JOIN `comment` ON comment.id=$ch.id WHERE comment.section='$ch' AND $ch.id=$paper[id]");
  23.           while($comment=mysql_fetch_array($com)) {
  24.           print
  25.          '<div class="user_com">
  26.                  <div class="user_name><img src="/img/office/ava.png" height="20" alt=".">'.$comment['name'].'</div>
  27.         <div class="user_text">'.$comment['text'].'</div>
  28.                  <div class="data">Добавлено:&nbsp;'.date_convert($comment['date']).'</div>
  29.                  </div>';
  30.       }
  31.    }

а вот функция social_network():
PHP:
скопировать код в буфер обмена
  1. function social_network() {
  2.    global $paper;
  3.    $title=rawurlencode($paper['topic']);
  4.    $url=rawurlencode($_SERVER['SERVER_NAME'].$_SERVER['REQUEST_URI']);
  5.    return
  6.    '<a target="_blank" href="http://www.blogger.com/blog_this.pyra?t&u='.$url.'&n='.$title.'" title="Опубликовать в Blogger.com">
  7.   <img src="img/office/sn/b.png" alt="Опубликовать в Blogger.com">
  8.   </a>
  9.   <a target="_blank" href="http://www.facebook.com/sharer.php?u='.$url.'&t='.$title.'" title="Поделиться в Facebook">
  10.   <img src="img/office/sn/f.png" alt="Поделиться в Facebook">
  11.   </a>
  12.   <a target="_blank" href="http://www.friendfeed.com/share?title='.$title.' - '.$url.'" title="Добавить в FriendFeed">
  13.   <img src="img/office/sn/ff.png" alt="Добавить в FriendFeed">
  14.   </a>
  15.   <a target="_blank" href="http://www.google.com/bookmarks/mark?op=edit&output=popup&bkmk='.$url.'&title='.$title.'" title="Сохранить закладку в Google">
  16.   <img src="img/office/sn/g.png" alt="Сохранить закладку в Google">
  17.   </a>
  18.   <a target="_blank" href="http://connect.mail.ru/share?url='.$url.'&title='.$title.'" title="Поделиться в Моем Мире@Mail.Ru">
  19.   <img src="img/office/sn/m.png" alt="Поделиться в Моем Мире@Mail.Ru">
  20.   </a>
  21.   <a target="_blank" href="http://www.odnoklassniki.ru/dk?st.cmd=addShare&st._surl='.$url.'&title='.$title.'" title="Добавить в Одноклассники">
  22.   <img src="img/office/sn/o.png" alt="Добавить в Одноклассники">
  23.   </a>
  24.   <a target="_blank" href="http://twitter.com/share?text='.$title.'&url='.$url.'" title="Добавить в Twitter">
  25.   <img src="img/office/sn/t.png" alt="Добавить в Twitter">
  26.   </a>
  27.   <a target="_blank" href="http://vk.com/share.php?url='.$url.'" title="Поделиться В Контакте">
  28.   <img src="img/office/sn/v.png" alt="Поделиться В Контакте">
  29.   </a>
  30.   <a target="_blank" href="http://zakladki.yandex.ru/newlink.xml?url='.$url.'&name='.$title.'" title="Добавить в Яндекс.Закладки">
  31.   <img src="img/office/sn/ya.png" alt="Добавить в Яндекс.Закладки">
  32.   </a>
  33.   <a target="_blank" href="http://my.ya.ru/posts_add_link.xml?URL='.$url.'&title='.$title.'" title="Поделиться в Я.ру">
  34.   <img src="img/office/sn/yaru.png" alt="Поделиться в Я.ру">
  35.   </a>';
  36. }  
 
 Top
DeepVarvar Супермодератор
Отправлено: 05 Февраля, 2013 - 09:57:02
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




qtk пишет:
вот скрипт
А вот заметка к размышлениям:
http://forum.php.su/topic.php?forum=33&topic=793
 
 Top
DelphinPRO
Отправлено: 05 Февраля, 2013 - 10:51:39
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




qtk пишет:
Проблема еще в том, что я не хочу городить лишний код в не функции foo.

qtk пишет:
Function foo($paper['topic'])

вам бы синтаксис языка подучить.

В функцию можно передать переменную

если это массив, то внутри функции можно обращаться к его элементам
PHP:
скопировать код в буфер обмена
  1. Function foo($paper){
  2.   echo $paper['topic']
  3. }

qtk пишет:
Все что вы написали не работает)))))

qtk пишет:
function content() {      global $choice,$ch,$id,$topic;

А за пределами функции переменная $paper существует в глобальной области видимости?

Я вам привел примеры. Курите их, пока не раскурите.

и обязательно обратите внимание на ссылку, которую дал DeepVarvar. Это важно.

(Отредактировано автором: 05 Февраля, 2013 - 10:52:21)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
qtk
Отправлено: 06 Февраля, 2013 - 05:47:23
Post Id


Частый гость


Покинул форум
Сообщений всего: 198
Дата рег-ции: Май 2012  


Помог: 0 раз(а)




С синтаксисом языка у меня все в порядке!) это был грубый пример, показать что не хочу передавать переменную в функцию, это просто мой дурацкий принцип в этом скрипте. $pаper локальная и существует только в функции соntеnt().
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB