За последние 24 часа нас посетил 59171 программист и 1816 роботов. Сейчас ищут 967 программистов ...

Обработка массива POST

Тема в разделе "PHP для новичков", создана пользователем amohax, 24 мар 2012.

  1. amohax

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

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Здрасте. Не знаю как объяснить русским языком задачу, которая попалась мне тут при создании гостевой книги. Поэтому попробую выкладывать кодом.

    Сначала я вывожу таблицей все записи из базы данных. И ставлю на против каждой строки чекбокс с именем соответствующего ID записи в базе.
    Код (PHP):
    1.   echo "<form action=\"admin.php\" method=\"post\"> ";
    2.   echo "<table align=\"center\" width=\"800\" border=\"1\">";
    3.   while($content = mysql_fetch_array($ath))
    4.   {
    5.     $visible = "Скрыт";
    6.     if($content['visible'] == 1) $visible = "Опубликован";
    7.     echo "<tr><td width=\"40\" align=\"center\"> <input type=\"checkbox\" name=\"".$content['id']."\"></td>"
    8.       ."<td width=\"80\" align=\"center\">".$content['data']."</td>"
    9.       ."<td>".$content['user_name']."</td>"
    10.       ."<td>".$content['user_comment']."</td>"
    11.       ."<td align=\"center\">".$visible."</td>"
    12.       ."</tr>";
    13.   }
    14.   echo "</table>";
    15.   echo "<table align=\"center\" width=\"800\"><tr><td align=\"center\">
    16.         <input name=\"delete\" type=submit value=\"Удалить отмеченные\">
    17.         <input name=\"public\" type=submit value=\"Опубликовать отмеченные\">
    18.         </td></tr></table>";
    19.   echo " </form>";
    20.  
    Теперь можно отметить любые несколько записей галочкой и проделать с ними два действия, либо удалить, либо опубликовать.

    Как мне определить какие чекбоксы отмечены, если я не знаю какие вообще существуют т.к. они создаются динамически?
     
  2. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    не так немного.
    в форме все чекбоксы обзываем одинаково - ids и добавляем квадратные скобки - признак того, что значений может быть несколько
    Код (Text):
    1. <input type="checkbox" name="ids[]" value="$content['id']">
    а обработка - итерация $_POST['ids']
    Код (PHP):
    1. foreach($_POT['ids'] as $id)
    2. {
    3. ...
    4. } 
    и не работайте так с html. делайте более читаемые конструкции. например, вывод php-переменных в html-потоке. а ваш вывод html внутри php неуютно читается.
     
  3. amohax

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

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    О, даже так можно, спасибо, буду знать.
    Понял смысл только первого предложения :) Все равно спасибо, буду стараться ставить больше комментариев.

    Добавлено спустя 10 минут 47 секунд:
    С кнопками тоже такой массив можно создать?
     
  4. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    да комменты тут не особо нужны)))
    сравните
    ваша запись - html в php
    Код (PHP):
    1. echo "<tr><td width=\"40\" align=\"center\"> <input type=\"checkbox\" name=\"".$content['id']."\"></td>"
    2.       ."<td width=\"80\" align=\"center\">".$content['data']."</td>"
    3.       ."<td>".$content['user_name']."</td>"
    4.       ."<td>".$content['user_comment']."</td>"
    5.       ."<td align=\"center\">".$visible."</td>"
    6.       ."</tr>"; 
    мое предложение - php в html
    Код (PHP):
    1. <tr><td width="40" align="center"> <input type="checkbox" name="<?=$content['id']?>"></td>
    2.       <td width="80" align="center"><?=$content['data']?></td>
    3.       <td><?=$content['user_name']?></td>
    4.       <td><?=$content['user_comment']?></td>
    5.       <td align="center"><?=$visible?></td>
    6.       </tr>
    удобнее же читается? нет нагромождения экранов двойных кавычек \" и конкатенаций. и сам код в редакторе подсвечивается разнообразно как html а не однообразно как строка внутри php
     
  5. amohax

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

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Так то да, читается удобнее и логичнее. Но мне это надо выводить в цикле же т.е. внутри пхп кода. Или как?

    Добавлено спустя 4 минуты 38 секунд:
    Можно конечно это в отдельный файл записать, а потом его "инклюдить" в цикле. Но я не уверен, что так будет лучше.
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Код (PHP):
    1. <?php
    2. // готовим данные
    3. // ...
    4. // цикл
    5. foreach($rows as $content){
    6. // это код внутри итерации массива.
    7. //...
    8. // переходим в "режим хтмл"
    9. ?><tr><td width="40" align="center"> <input type="checkbox" name="<?=$content['id']?>"></td>
    10.       <td width="80" align="center"><?=$content['data']?></td>
    11.       <td><?=$content['user_name']?></td>
    12.       <td><?=$content['user_comment']?></td>
    13.       <td align="center"><?=$visible?></td>
    14.       </tr>
    15. <?php
    16. // вернулись в "режим пхп"
    17. // заканчиваем цикл
    18. }
    19. // код после цикла
    20. // ...
    21. // конец файла
    22. ?>
     
  7. amohax

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

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    ОМГ! Я думал операторы "<?php"и "?>" работают также, как "begin" и "end" в паскале :)

    Вот оно что. Тогда это все меняет. Спасибо ОГРОМНОЕ!
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    вы можете в любой момент переходить от "режима хтмл" к "режиму пхп" и обратно. на самом деле не совсем корректное определение. грубо говоря есть поток, который должен быть интерпретирован машиной пхп ("режим пхп") и данные которые отправятся в поток в неизменном виде ("режим хтмл"). но ведь это может быть и текст и графика и все что угодно. но тут я для простоты обозвал их именно так
    и конструкция <?=$var?> грубо говоря заменяется за <?php echo $var; ?> то есть "войти в режим пхп, вывести в поток значение переменной var, выйти из режима пхп"

    удачи)
     
  9. amohax

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

    С нами с:
    16 фев 2012
    Сообщения:
    46
    Симпатии:
    0
    Чуть подправил код. Но появляются вот такие конструкции:
    [​IMG]

    Это неизбежно? Или есть еще секрет как этого избежать?
     
  10. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.128
    Симпатии:
    1.248
    Адрес:
    там-сям
    А зачем это избегать? Если вы эстет, можете попробовать альтернативный синтаксис
    Код (PHP):
    1. <?php while (...): ?>
    2. Some html
    3. <?php endwhile; ?>
    может быть это более читабельный код, хз
     
  11. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    этого и не надо избегать))) видите, у вас даже редактор видит парность этой скобки
    и между <?= и переменной пробел не обязательно рисовать