За последние 24 часа нас посетили 42453 программиста и 1814 роботов. Сейчас ищут 785 программистов ...

Как лучше и правильней

Тема в разделе "PHP для новичков", создана пользователем lean, 12 янв 2014.

  1. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Ну да должно быть так.
    Код (Text):
    1.  
    2. $messages(
    3. $row['id'] = array('from' => $row['name'], 'theme' => $row['theme'], 'text' => $row['text'])
    4. );
    Я сначало просто квадратные скоюки заменил на круглые. Серовно выводит:

    Warning: Missing argument 1 for getMessages(), called in Z:\home\regularka.ru\www\hell.php on line 25 and defined in \home\tr.bu\proba.php on line 1
    Fatal error: Function name must be a string in \home\tr.bu\proba.php on line 6
     
  2. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    Код (Text):
    1. $messages(
    WTF? круглые скобки используются для функций. про это тебе PHP и ругается. ты буквально указал ему "возьми имя функции в переменной $messages и вызови эту функцию".
     
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    в панели управления посмотри, может это просто ты сам не сменил

    Добавлено спустя 58 секунд:
    ты типа наобум пытаешься починить версию пхп заменой скобок на какие-нибудь другие? =)))
     
  4. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7

    Да, чего вы делаете...
    $messages($row['id'])
    Замените на:
    $messages[$row['id']]
     
  5. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
     
  6. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    С этим разобрался.
    print_r(getMessages());
    Массив выводит, а вот как теперь построчно выводить для таблицы сообразить не могу.Неужели через foreach.
    Тогда я вообще не могу понять как две функции могут быть лучше чем одна при этом не большая.
    Если можно пожалуйста поясните прелесть получение данных из DB(Ведь таблица тоже своего рода массив), затем загоняем все это добро в массив при этом я так понимаю потребляем ресурсы сервера. А затем таки через цикл получаем данные из массива и выводим в html снова потребляя те же ресурсы. Ни как не могу понять смысла этого мероприятия
     
  7. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    А представь что прошло пол года. Это сейчас у тебя код помещается на экране монитора, а реальный проект состоит из большого количества кода.
    Если его не разделять то с ним работать очень трудно. Особенно тем кто этот код впервые видит.

    Есть гораздо более эффективные методы убийства сервака :) От твоего кода он даже не чихнет :)
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    lean, вы ещё учтите, что даже если у вас таблицы в сотни тысяч строк, то вы не будете делать выборку по всем сразу - вы же не вывалите столько данных пользователю в браузер за один раз? Поэтому ресурсов потребляется минимально.

    Главное преимущество - возможность легко сменить дизайн, не повредив при этом запросы SQL, и не продираясь сквозь их дебри, отлавливая вёрстку среди логики. Я вам больше скажу, в реальных проектах делается не просто отдельная функция, отвечающая за вывод, а отдельный файл.
     
  9. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    То есть в проекте я создаю например две функции в одной я получаю из таблицы в другой вывожу. Ок, но что мне мешает в нужных местах выводить циклом определенные значения из базы данных.
    И ещё если я получаю из базы данных 1000 строк и помещаю в массив, ведь все это сохраняются в память так, и следовательно будет там храниться до тех пор пока запущена сессия или нет.

    Добавлено спустя 10 минут 42 секунды:
    Я так понимаю имеется ввиду различные классы которые имеют определенные функции.
    Например функция или класс который будет заниматься получением данных из таблицы и передавая по GET переменные с различными значением для выбора нужной таблицы и БД могу менять полученные данные. Правильно я понимаю.
     
  10. smitt

    smitt Старожил

    С нами с:
    3 янв 2012
    Сообщения:
    3.166
    Симпатии:
    65
    Совесть у некоторых лень:) Разделяй код иначе пройдет время сам не разберешь.

    Придумай ситуацию где тебе понадобится взять из базы 1000 строк.

    Посмотри как готовые фреимворки сделаны http://www.yiiframework.com/ http://laravel.com/
     
  11. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Например вывод на печать данные сотрудников среднего предприятия.
    Была такая задача очень давно помогали реализовать. Просто я электронщик по ряду задач теперь мне нужен php хотя до этого баловался периодически по мелочи сейчас начинаю осмыслено подходить к вопросам. Спасибо за терпение.
     
  12. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Мастерство приходит с опытом
     
  13. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Так можно?

    function getMessages($id, $DB, $table, $sorter, $if, $wel ) {
    $id = (int)$id;//защита от инъекций
    $messages = []; //прими новый синтаксис массива всем сердцем
    $sql = mysql_query("SELECT $wel FROM $table $if $sorter");
    while ($row = mysql_fetch_array($sql)) {
    $messages[$row['id']] = ['from' => $row['name'], 'theme' => $row['theme'], 'text' => $row['text']];
    }
    return $messages;
    }
     
  14. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    На PHP не делают вывод на печать. Только в браузер. И не стоит убивать посетителя сайта списком из 1000 сотрудников предприятия, не разделённым на страницы хотя бы по 100
     
  15. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Чувак. Ты хочешь чего сделать-то? Целый комбайн? :D
     
  16. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Да нет. Я просто не могу понять зачем мне выносить операцию получения данных из одной таблицы отдельно если я её ни где более повторять не буду. Поэтому я предположил её сделать многофункциональной. А что это опять не разумно?
     
  17. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Да. Работу с БД и получение из нее ответов в нужной форме лучше вынести в отдельные методы.
     
  18. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Вот так получат из массива данные будет правильно?

    Код (Text):
    1.  
    2.  foreach (getMessages() as $ключ=>$значение) {
    3.  echo $ключ; //вперемежку с html
    4.   foreach ($значение as $ключи=>$значения) {
    5.     echo $значения;//также с оформлением
    6.  }
    7.   }
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    $messages = getMessages();
    if (empty($messages)) {
    сообщений нет
    }else{
    foreach ($messages
     
  20. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Спасибо, по практикую немного, глядишь стану немного грамотней в этом вопросе.
     
  21. Invision

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

    С нами с:
    26 фев 2009
    Сообщения:
    1.437
    Симпатии:
    1
    Адрес:
    Томск
    Используйте PDO
    Код (PHP):
    1. // @TODO реализовать getPDODriver 
    2. function getMessages() {
    3.   $db = getPDODriver();
    4.   $db->prepare("SELECT id, name, text, theme FROM table ORDER BY id");
    5.   $db->execute();
    6.   return $db->fetchAll();
    7. }
    8.  
    9. print_r getMessages();
    Про mysql_* забудьте как страшный сон.
     
  22. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    или можно использовать mysqli ;)
     
  23. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Какой выбор проще в освоении mysqli или PDO. И может ли поддержка PDO отсутствовать на сервере?
     
  24. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    хз. первое наверное по-проще. а про сервер - какой купишь, такой и будет.