За последние 24 часа нас посетили 52836 программистов и 1768 роботов. Сейчас ищут 959 программистов ...

Хранение переменных в БД

Тема в разделе "PHP для новичков", создана пользователем Шаман, 21 июл 2009.

  1. Шаман

    Шаман Активный пользователь

    С нами с:
    13 июн 2009
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    СПб
    хотелось бы хранить переменные в БД и выводить их в файле config.php или в другом нужном месте
    БД:
    Код (Text):
    1.  
    2. CREATE TABLE `config` (
    3.   `id` int(11) NOT NULL auto_increment,
    4.   `mod` varchar(255) NOT NULL,
    5.   `type` varchar(255) NOT NULL,
    6.   `name` varchar(255) NOT NULL,
    7.   `value` varchar(255) NOT NULL,
    8.   `desc` varchar(255) NOT NULL,
    9.   PRIMARY KEY  (`id`)
    10. ) ENGINE=MyISAM AUTO_INCREMENT=7 DEFAULT CHARSET=cp1251 AUTO_INCREMENT=7 ;
    mod - модуль, в котором используется
    type - что в ней хранится(ссылка, текст, число)
    decs - описание
    (сделал их для удобства и формирования запросов по месту требования в коде.)

    собственно нужно вывести $name="value"; для всех записей.
    пробовал выводить их через mysql_fetch_row , но максимум, чего я добился это их вывод в виде текста на странице, а мне нужно php кодом. знаки <? ?> я ставил через echo... и ноль эффекта... что посоветуете?
     
  2. TuXAPuK

    TuXAPuK Активный пользователь

    С нами с:
    5 янв 2007
    Сообщения:
    38
    Симпатии:
    0
    Адрес:
    LV -> Riga
    Не помню точно как это называлось...

    Но вот пример :
    PHP:
    1. <?php
    2.  $array = array(
    3.    'hehe' => 'val',
    4.    'hehe2' => 'val2'
    5.   );
    6.  
    7.  foreach ( $array as $sname => $sval )
    8.   $$sname = $sval;
    9.  
    10.  echo $hehe;
    11. ?>
    Вообще это считается дурным тоном, потому что PHP от таких переменных немного дуреет... Да и код на читабельность во много раз ухудшается...
     
  3. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    занести все в массив и потом брать этот массив и делать ему "экстракт". Что-то типа следующего (за работоспособность не ручаюсь, но суть понятна)

    PHP:
    1. <?php
    2. function getConfig () {
    3.     static $values = null;
    4.     if (is_null($values)) {
    5.         $result = mysql_query('SELECT `name`, `value` FROM `config`');
    6.         $values = array();
    7.         while ($row = mysql_fetch_assoc($result)) {
    8.             $values[$row['name']] = $row['value'];
    9.         }
    10.     }
    11.     return $values;
    12. }
    13.  
    14. function variant_1 () {
    15.     extract(getConfig());
    16.     if ($SomeConfigName) {
    17.         // Some code here
    18.     }
    19. }
    20.  
    21. function variant_2 () {
    22.     $config = getConfig();
    23.     if ($config['SomeConfigName']) {
    24.         // Some code here
    25.     }
    26. }
    Более предпочтительный второй вариант. По следующим причинам:
    1. Если ты пишешь if ($config['AvatarsEnabled']) - любой, кто читает твой код сразу понимает, что это из того конфига, который ты вызвал вначале функции
    2. Не будет конфликта имен. Если вдруг ты добавишь конфиг в какую то из функций, а в ней уже есть переменная с таким именем, как переменная в конфиге
    3. IDE не будут выдавать ошибку,

    И еще много чего.
     
  4. Шаман

    Шаман Активный пользователь

    С нами с:
    13 июн 2009
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    СПб
    благодарю за ответ
    Код (Text):
    1. function getConfig () {
    2.      static $values = null;
    3.      if (is_null($values)) {
    4.          $result = mysql_query('SELECT `name`, `value` FROM `config`');
    5.          $values = array();
    6.          while ($row = mysql_fetch_assoc($result)) {
    7.              $values[$row['name']] = $row['value'];
    8.          }
    9.      }
    10.      return $values;
    11.  }
    эта часть кода предельна понятна, но не мог бы ты пояснить на примере принцип работы первого и второго варианта?
     
  5. TheShock

    TheShock Активный пользователь

    С нами с:
    30 май 2009
    Сообщения:
    1.255
    Симпатии:
    0
    Адрес:
    Київ
    ну суть одинакова. getConfig() возвращает приблизительно следующее:
    Код (Text):
    1. array (
    2.    'SomeConfigName' => 'Vasya_Pupkin',
    3.    'PostsPerPage'   => 25,
    4.    'AvatarsEnabled' => false
    5. )
    а теперь нужно только знать, как работает ассоциативный массив и функция extract().
     
  6. Шаман

    Шаман Активный пользователь

    С нами с:
    13 июн 2009
    Сообщения:
    67
    Симпатии:
    0
    Адрес:
    СПб
    все воткнул :) спасибо за помощь