Есть ли примеры массивов PHP, отображаемых в редактируемой форме таблицы HTML, позволяющей пользователям удалять строки / значения? - PullRequest
1 голос
/ 26 июля 2011

Я пытаюсь создать простую форму таблицы HTML, которая отображает значения из массива PHP. Часть отображения проста, но я забыл, как кодировать механику форм, например, выбирать и удалять эти значения на основе пользовательского ввода. Я подумал, что они могут быть примером чего-то похожего в Интернете, но пока не нашли ничего подходящего. Меня интересует некоторый простой код, который позволяет пользователю удалять одну или несколько строк из таблицы HTML. Я хотел бы избежать JavaScript или jQuery, если это возможно.

Вот что у меня есть:

HTML / PHP

<form action="options.php" method="post">
<table>
<thead>
    <tr>
        <th><input type="checkbox"></th>
        <th>Domain Name</th>
    </tr>
</thead>
<tfoot>
    <tr>
        <th><input type="checkbox"></th>
        <th>Domain Name</th>
    </tr>
</tfoot>
<tbody>
    <?php
        foreach ( $my_domains as &$value ) {
            echo '<tr><td><input type="checkbox"></td><td>'.$value['domain'].'</td></tr>';
        }
    ?>
</tbody>
</table>
</form>

PHP ARRAY

Array ( [10] => Array ( [domain] => dsdssd.com ) [11] => Array ( [domain] => google.com ) [12] => Array ( [domain] => new.com ) [13] => Array ( [domain] => blah.com ) )

1 Ответ

2 голосов
/ 26 июля 2011

Итак .. В двух словах. Это то, что вы просили. В любом случае, вы добавляете больше вариантов в форме на checkboxex, например, какие домены активны и т. Д. Тем не менее, если бы я был вами, я сделал бы это в jQuery и с помощью ajax. Было бы намного аккуратнее.

Пример: http://kopli.pri.ee/stackoverflow/6829783.php

ПРИМЕЧАНИЕ Нет памяти. Так что, если в основном перезагрузить страницу каким-либо образом, некоторые части будут сброшены.

EDIT

У этого есть функция удаления всех. На самом деле он использует php fallback, а также скрипт jQuery, чтобы выбрать все Не уверен, что это идеальный способ сделать что-то, поэтому вы можете удалить опцию php для возврата, если вы собираетесь использовать jQuery и выбрать все.

Пример 2: http://kopli.pri.ee/stackoverflow/6829783_v2.php

(это обновленный код ниже)

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<?php
$my_domains[1]['domain'] = 'dsdssd.com';
$my_domains[2]['domain'] = 'google.com';
$my_domains[3]['domain'] = 'new.com';
$my_domains[4]['domain'] = 'blah.com';
$my_domains[5]['domain'] = 'kopli.pri.ee';
$my_domains[6]['domain'] = 'iyfgaming.com';

if ($_POST['trigger']) {
    $p_delete_all = $_POST['delete_all'];
    $p_ids = $_POST['ids']; # Get IDs
    $p_deletes = $_POST['deletes']; # Get deletes
    if ($p_delete_all) {
        unset($my_domains);
    } elseif (is_array($p_ids)) {
        foreach ($p_ids as $id) {
            if ($p_deletes[$id]) {
                unset($my_domains[$id]);
            }
        }
    }
}

?>

<form action="" method="post">
<input type="hidden" name="trigger" value="1">
<table>
<thead>
    <tr>
        <th><input type="checkbox" name="delete_all" value="1"></th>
        <th>Domain Name</th>
    </tr>
</thead>
<tfoot>
    <tr>
        <th><input type="checkbox" name="delete_all" value="1"></th>
        <th>Domain Name</th>
    </tr>
</tfoot>
<tbody>
    <?php
        if (is_array($my_domains)) {
            foreach ( $my_domains as $array_id => $value ) {
                echo '<input name="ids[]" type="hidden" value="' . $array_id . '">' . "\n";
                echo '<tr><td><input name="deletes[' . $array_id . ']" value="1" type="checkbox"></td><td>'. $value['domain'] . '</td></tr>' . "\n\n";
            }
        } else {
            echo '<tr><td colspan="2">Nothing to display :(</td></tr>';
        }
    ?>
</tbody>
</table>
<br>
<input type="submit" value="Update">
</form>

<script>
$('input[name=delete_all]').click(function () {
    if ($(this).is(':checked')) {
        $('tbody input[type=checkbox]').each(function () {
            $(this).attr('checked', true);
        });
        $('input[name=delete_all]').attr('checked', true);
    } else {
        $('tbody input[type=checkbox]').each(function () {
            $(this).attr('checked', false);
        });
        $('input[name=delete_all]').attr('checked', false);
    }
});
</script>
...