За последние 24 часа нас посетили 30490 программистов и 1809 роботов. Сейчас ищут 759 программистов ...

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

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

  1. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Приветствую всех, хотелось бы знать как будет правильней и грамотней писать вывод строк из БД.
    Код (Text):
    1.  
    2. $query = "SELECT * FROM table ORDER BY id";
    3. $sql = mysql_query($query);
    4. while($var = mysql_fetch_array($sql))
    5. {
    6. echo "<tr><td>$var1</td><td>$var2</td><td>$var3</td><td>$var4</td><td>$var5</td><td></tr>";
    7. }
    или


    Код (Text):
    1.  
    2. $query = "SELECT * FROM table ORDER BY id";
    3. $sql = mysql_query($query);
    4. while($var = mysql_fetch_array($sql))
    5. {
    6. $Setvar .="<tr><td>$var1</td><td>$var2</td><td>$var3</td><td>$var4</td><td>$var5</td><td></tr>";
    7. }
    8. echo $Setvar;
    или так

    Код (Text):
    1.  
    2. $query = "SELECT * FROM table ORDER BY id";
    3. $sql = mysql_query($query);
    4. while($var = mysql_fetch_array($sql))
    5. {
    6. $Setvar .='<tr><td>'. $var1 .'</td><td>'. $var2 .'</td><td>'. $var3 .'</td><td>'. $var4 .'</td><td>'. $var5 .'</td><td></tr>';
    7. }
    8. echo $Setvar;
     
  2. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.599
    Симпатии:
    1.764
    Никак :) Что за переменные $var1 и т.д., откуда вы их взяли?
     
  3. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Это для примера просто название. Сама собой полученные из MySQl из таблицы "table". Чтобы изменилось, если бы я написал переменную так $var[id] И.Т.Д?
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    лучше в одной функции получать, а в другой - рисовать
     
  5. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    То есть, я должен переменную с выводом вынести отдельно в другую функцию?
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ты должен сформировать массив, каждая строка которого - ассоциативный массив (ключи в нём не цифры, а слова), в котором будет информация по сущностям, по названиям. А айдишники массива - первичные ключи сущностей.

    короче.
    $users = array(
    7 => array('name'=>'Вася', 'color'=>'red'),
    12 => array('name'=>'Петя','color'=>'green'),
    );
     
  7. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Неужели получить данные из DB. Затем загнать их в масив, а затем вывести в html, будет быстрее и правильнее чем по мере получении из базы выводить в html. Мне кажится что в первом случае требуется больше кода и ресурсов, увы для того чтобы реально понять как правильно не хватает опыта.
     
  8. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    будет охуенно быстро. А что быстрее - вопрос десятый. Что будет читабельнее - вот главное.
     
  9. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Я правильно понял делаю так:

    Код (Text):
    1.  
    2. $table1 = array(
    3. $query = "SELECT * FROM table ORDER BY id";
    4. $sql = mysql_query($query);
    5. while($var = mysql_fetch_array($sql))
    6. {
    7. $var[id] = aray('<tr><td>'. $var[name] .'</td><td>'. $var[tema] .'</td><td>'. $var[more] .'</td><td>'. $var[text] .'</td></tr>';),
    8. }
    9. );
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Нет :D

    новй массив собери как я показал. А отрисовку в другой функции мути.
     
  11. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    блин исправил не правильно.
    так
    $table1 => array(
    $query = "SELECT * FROM table ORDER BY id";
    $sql = mysql_query($query);
    while($var = mysql_fetch_array($sql))
    {
    $var[id] => array( name=>$var[name], tema=>$var[tema], more=>$var[more], text=>$var[text]),
    }
    );
    Можно подробнее про смысл подобного усложнения кода на мой взгляд.
    Ведь там где мне нужно будет выводить данные мне придётся практически также как до этого я делал выводить переменные вместе с тегами html. Я не могу понять разницу что меняет то что я из базы загоню в массив или бы я сразу же выводил в строку таблицы заполняя ее переменными.
     
  12. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Так тоже неправильно. Читай внимательно. Пересобери в новый массив. В новый. И не забывай блин кавычки! А то без кавычек и без доллара - это всё константы. Которых у тебя нет.
     
  13. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Кавычками понятно,
    Код (Text):
    1. $table1 => array(
    2. $var[id] => array( 'name'=>'$var[name]', 'tema'=>'$var[tema]', 'more'=>'$var[more]', 'text'=>'$var[text]')
    3. );
    а вот как загнать из базы в масив строку за строкой не могу въехать.
     
  14. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Код (PHP):
    1. function getMessages($id) {
    2.   $id = (int)$id;//защита от инъекций
    3.   $messages = []; //прими новый синтаксис массива всем сердцем
    4.   $sql = mysql_query("SELECT * FROM table ORDER BY $id");
    5.   while ($row = mysql_fetch_array($sql)) {
    6.     $messages[$row['id']] = ['from' => $row['name'], 'theme' => $row['theme'], 'text' => $row['text']];
    7.   }
    8.   return $messages;
    9. }
     
  15. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    я так понял для получения строки вызов такой?
    echo getMessages(номер id);
     
  16. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    нет, брат. Оно вернёт массив.
    А этот массив надо передать в функцию отрисовки. и отрисовать твою табличку.
    тогда читать и править код будет легко.
     
  17. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Сечас попробовал
    Код (Text):
    1.  
    2. function getMessages($id) {
    3.   $id = (int)$id;//защита от инъекций
    4.   $messages = []; //прими новый синтаксис массива всем сердцем
    5.   $sql = mysql_query("SELECT * FROM table ORDER BY $id");
    6.   while ($row = mysql_fetch_array($sql)) {
    7.     $messages[$row['id']] = ['from' => $row['name'], 'theme' => $row['theme'], 'text' => $row['text']];
    8.   }
    9.   return $messages;
    10. }
    11.  
    12. print_r getMessages();
    не прет вывод масива
    говорить что Parse error: syntax error, unexpected '[' in \home\tr.bu\proba.php on line 3
     
  18. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Старый пхп. Обнови.
     
  19. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Да и mysql смени на mysqli.
     
  20. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    ок, а как быть с хостенгом я так понимаю не факт чтотам сменят.
    Новый синтаксис масива работает только на 5.3 ?
     
  21. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Уже 5.5 вышел.
    Если не хочешь заморачиваться, замени скобки, да и все.
     
  22. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Сделал так
    Код (Text):
    1.  
    2. function getMessages($id) {
    3.   $id = (int)$id;//защита от инъекций
    4.   $messages = array(); //прими новый синтаксис массива всем сердцем
    5.   $sql = mysql_query("SELECT * FROM table ORDER BY $id");
    6.   while ($row = mysql_fetch_array($sql)) {
    7.     $messages($row['id']) = array('from' => $row['name'], 'theme' => $row['theme'], 'text' => $row['text']);
    8.   }
    9.   return $messages;
    10. }
    11.  
    12. print_r getMessages();
    Получаю "Can't use function return value in write context in \home\tr.bu\proba.php on line 6"
    Что не так?
     
  23. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    Добавь скобочки к print_r(getMessages());
     
  24. lean

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

    С нами с:
    29 дек 2007
    Сообщения:
    27
    Симпатии:
    0
    Тоже самое :-(.
     
  25. Your

    Your Старожил

    С нами с:
    2 июл 2011
    Сообщения:
    4.074
    Симпатии:
    7
    ааа
    $messages($row['id']) - а зачем тут круглые скобочки??? не надо...