За последние 24 часа нас посетил 16901 программист и 1646 роботов. Сейчас ищут 994 программиста ...

Вывод 4 картинки в 1 ряд (таблица)

Тема в разделе "PHP для новичков", создана пользователем Magnum, 17 дек 2015.

  1. Magnum

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

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    Привет мастера.
    Помогите пожалуйста с запросом. Вообще не получается придумать, как тут сделать.
    У меня есть картинки (названия берутся с бд), и я хочу вывести их в таблице (по 4 в строке), я знаю как это сделать с использованием for цикла, когда к переменной count добавляется +1 значение после выполнения запроса, а по другому не получается. Сразу скажу, что я хочу сделать без создания переменной count, которая постоянно прибавляет +1.

    Код (PHP):
    1. echo '<div class="menu"><table width="100%" border="1">';
    2. $query = mysql_query("SELECT * FROM `kost` ORDER BY `id` DESC");
    3. while ($row = mysql_fetch_array($query)) {
    4.     echo '<tr><th><img height="100" widtdh="132" src="img/'.$row['img'].'"></th>';
    5.     //и так 3 вывода картинки, потом
    6.     //</tr>
    7. }
    Добавлено спустя 37 секунд:
    Или это придется в любом случае менять условие цикла?
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    ну если у тебя получается сделать в фор-циклом в котором у тебя есть некоторая переменная каунт которая постоянно инкрементируется с шагов в единицу то что тебе мешает объявить переменную каунт и инкрементировать её с шагом в единицу но внутри циклов вайл/дувайл и форыч?
     
  3. Magnum

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

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0
    Да, но тогда же нужно будет менять условие цикла. А возможно ли как-то сохранить это условие, что я имею, только вывести их 4 картинки в ряд?
    И такое вычисление порой ресуркоемкое (как ты мне когда-то подсказывал) ;)
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    нет же. просто ты цикле фор она служебная и ты просто её используешь не по назначению. а тут ты её для себя объявил и для себя используешь. в чем проблема-то? условие форыч/дувайл/вайл от неё не должны уже будут зависеть. давай раздупляйся. программист ты или где?

    когда ты в ногу себе стреляешь - тебе говорят что не надо так делать. заюзать лишнюю переменную с целочисленным значением - не такой огромный оверхед. да и рано тебе про оптимизацию заморачиваться. ты сначала программистом стань а потом уже думай как стать хорошим программистом.
     
  5. Magnum

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

    С нами с:
    19 июл 2015
    Сообщения:
    62
    Симпатии:
    0

    Оно то получилось. Но такой дикий говнокод. Можешь подсказать, где ошибка, что переделать?
    Код (PHP):
    1. echo '<div class="subhead"><table width="100%" border="1">';
    2. $query = mysql_query("SELECT * FROM `kost` ORDER BY `id` DESC");
    3. $num = ceil(mysql_num_rows($query)/4);
    4. for ($i=0; $i < $num; $i++) { 
    5.     $count = 0;
    6.     echo '<tr>';
    7.     while ($count < 4) {
    8.         $row = mysql_fetch_array($query);
    9.         echo '<th>'.$row['img'].'</th>';
    10.         $count = $count + 1;
    11.     }
    12.     echo '</tr>';
    13. }
    14.     echo '</table></br></div>';
    15.     echo '</div>'; 
    16.  
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    начинающий программист не может без дикого говнокода. пока ты сам глядя на дикий говнокод не сможешь сказать что именно его делает диким говнокодом ты не сможешь его отполировать до состояния конфетки. развивайся как программист.

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

    далее ниже каунт равно каунт плюс один. во многих языках программирования есть оператор постинкремента и преинкремента значения - i++ и ++i соответственно. прибавляют строго по единице просто по-разному относятся к значению. но сейчас не об этом. они заменяют в говнокоде как раз i = i + 1. а еще во многих языках программирования есть сокращенные записи арифметических операторов когда действие происходит над одной переменной - i += 1 в данном случае эквивалентно i = i + 1 и эквивалентно в принципе любому виду инкремента так как ты сразу значение не используешь.

    так что развивайся как программист :D

    Добавлено спустя 18 минут 29 секунд:
    не надо прятаться по личкам. если ты нашел под креслом яйца задать вопрос "адекватное ли у тебя решение" то и задай его на публике.
    на данном этапе твоего развития важно чтоб код решал поставленную задачу. у тебя это получилось. чуть-чуть больше практики и ты увидишь что в нем нужно менять. не использовать два цикла, не выводить разметку через эхо - всё придет с опытом.

    я бы однозначно ответил на твой вопрос: "да, для новичка сойдет". и ты из этого надеюсь сделаешь вывод не останавливаться на достигнутом. это же не верх совершенства. удачи)
     
  7. mahmuzar

    mahmuzar Старожил

    С нами с:
    6 апр 2012
    Сообщения:
    4.631
    Симпатии:
    425
    Адрес:
    РД, г. Махачкала.
    Magnum, разбей задачу на части и побеждай.
     
  8. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Никакого дикого говнокода, вполне сносное решение. Я сам часто такие вещи именно циклом в цикле делаю - удобнее, чем использовать один цикл и проверять $count на кратность. Единственное, у тебя не учтён случай, когда mysql_num_rows($query) не кратен 4. Подсказка: в этом случае mysql_fetch_array($query); несколько раз вернёт null, и его надо как-нибудь обработать, к примеру, вывести пустые <td></td>, чтоб не ломалась вёрстка