Два режима начальной загрузки для редактирования содержимого двух разных файлов

#php #if-statement #twitter-bootstrap-3

#php #if-оператор #twitter-bootstrap-3

Вопрос:

Сначала позвольте мне начать с того, что я знаю, что это будет действительно простой вопрос. Я новичок в PHP и немного борюсь с этой задачей.

Вступление: Я создаю небольшое приложение на локальном сервере WAMP для управления базовой клиентской базой данных, а также для управления всеми моими VHOST-приложениями для разработки. Я знаю, что есть проблемы с безопасностью при редактировании файла Windows Hosts, о чем я собираюсь запросить, но это будет строго локальный сайт.

У меня есть следующий PHP

 <?php include 'template-parts/header.php' /** calling of header(to make it uniform in all template file) **/?>  

<div class="container home">
    <h3> Delete </h3>



    <div class="btn-group">
            <button data-toggle="modal" class="btn btn-primary btn-sm" name="hostsedit" data-target="#modalhost"><span class="glyphicon glyphicon-user"></span> Edit Windows Host File</button>
            <button data-toggle="modal" class="btn btn-primary btn-sm" name="vhostsedit" data-target="#modalvhost"><span class="glyphicon glyphicon-trash"></span> Edit VHOST.conf</button>
    </div>


    <?php

        // configuration
        $url = 'delete.php';
        $file = 'C:/Windows/System32/Drivers/etc/hosts';

        // check if form has been submitted
        if (isset($_POST['text']))
        {
        // save the text contents
        file_put_contents($file, $_POST['text']);

        // redirect to form again
        header(sprintf('Location: %s', $url));
        printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
        exit();
    }

    // read the textfile
    $text = file_get_contents($file);   
    ?>


    <!-- Modal 1 -->
    <div class="modal fade" id="modalhost" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
        <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">amp;times;</button>
                <h4 class="modal-title">Delete Host File Entry</h4>
            </div><!-- /modal-header -->
            <div class="modal-body">
                <div class="container-fluid">
                    <div class="row">
                        <div class="col-xs-12 col-md-12">
                            <!-- HTML form -->
                            <form action="" method="post">
                                <textarea name="text" class="form-control" rows="15"><?php echo htmlspecialchars($text) ?></textarea><br />
                                <p><strong>NOTE:</strong> Ensure only lines similar to <kbd>127.0.0.1 www.dev.xxxxx</kbd> are deleted</p>
                        </div>
                    </div>
                </div>                        
            </div><!-- /modal-body -->
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Save changes</button>
            </div> 
            </form>
        </div> <!-- /.modal-content -->
    </div> <!-- /.modal-dialog -->
</div> <!-- /.modal -->


<!-- Modal 2 --> 
<div class="modal fade" id="modalvhost" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">amp;times;</button>
                <h4 class="modal-title">Delete VHOST File Entry</h4>
            </div><!-- /modal-header -->
            <div class="modal-body">
                <div class="container-fluid">
                    <div class="row">
                        <div class="col-xs-12 col-md-12">
                            <!-- HTML form -->
                            <form action="" method="post">
                                <textarea name="text" class="form-control" rows="15"><?php echo htmlspecialchars($text) ?></textarea><br />
                        </div>
                    </div>
                </div>                        
            </div><!-- /modal-body -->
            <div class="modal-footer">
                <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Save changes</button>
            </div> 
            </form>
        </div> <!-- /.modal-content -->
    </div> <!-- /.modal-dialog -->
</div> <!-- /.modal -->
</div>  
</div>
</body>
</html>
  

Первый режим работает отлично, я нажимаю кнопку <button data-toggle="modal" class="btn btn-primary btn-sm" name="hostsedit" data-target="#modalhost"><span class="glyphicon glyphicon-user"></span> Edit Windows Host File</button> , и это открывает режим начальной загрузки, представляет файл Windows Host в текстовой области и позволяет мне добавлять и удалять по желанию, я нажимаю кнопку сохранения модала, и это работает.

Вопрос, мне нужно выполнить это же действие со вторым модальным окном, однако это нужно будет отредактировать C:/wamp/bin/apache/apache2.4.9/conf/extra/httpd-vhosts.conf' .

Я просто не знаю, как дублировать первый правильно работающий PHP, чтобы теперь также работать с требованием редактирования VHOST.

Любая помощь или указания будут высоко оценены.

Редактировать

Привет, Нил, я попытался внедрить ваше решение и получил некоторые ошибки, которые я не совсем уверен, как обойти…

В настоящее время у меня есть это в моем PHP-файле:

 <div class="container home">
<h3> Delete </h3>



<div class="btn-group">
        <button data-toggle="modal" class="btn btn-primary btn-sm" name="hostsedit" data-target="#modalhost"><span class="glyphicon glyphicon-user"></span> Edit Windows Host File</button>
        <button data-toggle="modal" class="btn btn-primary btn-sm" name="vhostsedit" data-target="#modalvhost"><span class="glyphicon glyphicon-trash"></span> Edit VHOST.conf</button>
</div>


<?php
// check if form has been submitted
if (!empty($_POST['hostinput'])){ //i prefer to use empty rather than isset you can read about it

    // configuration
    $url = 'delete.php';
    $file = 'C:/Windows/System32/Drivers/etc/hosts';

    // check if form has been submitted
    if (isset($_POST['hostinput']))
    {
    // save the text contents
    file_put_contents($file, $_POST['hostinput']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
    }
    // read the textfile
    $text = file_get_contents($file);  
}
else if(!empty($_POST['vhostinput'])){
    // configuration
    $url = 'delete.php';
    $file = 'C:/wamp/bin/apache/apache2.4.9/conf/extra/httpd-vhosts.conf';

    // check if form has been submitted
    if (isset($_POST['vhostinput']))
    {
    // save the text contents
    file_put_contents($file, $_POST['vhostinput']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
    }
    // read the textfile
    $text = file_get_contents($file);  
}


?>


<!-- Modal 1 -->
<div class="modal fade" id="modalhost" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal" aria-hidden="true">amp;times;</button>
            <h4 class="modal-title">Delete Host File Entry</h4>
        </div><!-- /modal-header -->
        <div class="modal-body">
            <div class="container-fluid">
                <div class="row">
                    <div class="col-xs-12 col-md-12">
                        <!-- HTML form -->
                        <form action="" method="post">
                            <textarea id="hostinput" name="hostinput" class="form-control" rows="15"><?php echo htmlspecialchars($text) ?></textarea><br />
                            <p><strong>NOTE:</strong> Ensure only lines similar to <kbd>127.0.0.1 www.dev.xxxxx</kbd> are deleted</p>
                    </div>
                </div>
            </div>                        
        </div><!-- /modal-body -->
        <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
            <button type="submit" class="btn btn-primary">Save changes</button>
        </div> 
        </form>
    </div> <!-- /.modal-content -->
</div> <!-- /.modal-dialog -->
  

 <!-- Modal 2 --> 
<div class="modal fade" id="modalvhost" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-hidden="true">amp;times;</button>
                <h4 class="modal-title">Delete VHOST File Entry</h4>
            </div><!-- /modal-header -->
            <div class="modal-body">
                <div class="container-fluid">
                    <div class="row">
                        <div class="col-xs-12 col-md-12">
                             <!-- HTML form -->
                             <form action="" method="post">
                                 <textarea id="vhostinput" name="vhostinput" class="form-control" rows="15"><?php echo htmlspecialchars($text) ?></textarea><br />
                        </div>
                    </div>
                </div>                        
            </div><!-- /modal-body -->
            <div class="modal-footer">
            <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                <button type="submit" class="btn btn-primary">Save changes</button>
             </div> 
            </form>
        </div> <!-- /.modal-content -->
     </div> <!-- /.modal-dialog -->
</div> <!-- /.modal -->
</div>  
  

И ошибка, которую я получаю при втором вызове, такова:
Обратите внимание: Неопределенная переменная: текст в C:Usersxxxxxxxxxdevlogsdelete.php в строке 116

Ответ №1:

 <button class="btn btn-primary btn-sm" data-target="#myModal1" data-toggle="modal" type="button"> Edit</button>  <!-- first button for the first modal-->

<button class="btn btn-primary btn-sm" data-target="#myModalA1" data-toggle="modal" type="button"> Comment</button>  <!-- second button for the second modal-->

<div id="myModal1" class="modal fade bs-example-modal-lg" aria-hidden="true" aria-labelledby="myModalLabel" role="dialog" tabindex="-1">
<div id="myModalA1" class="modal" aria-hidden="true" aria-labelledby="myModalLabel" role="dialog" tabindex="-1">
  

Этот код кажется похожим на ваш код, но я не слишком уверен, есть ли какие-то различия (в этом я на 100% уверен, что он работает отлично).

Теперь по вашему вопросу, где вы хотите отправить форму для второго режима. Есть много способов справиться с этим (например, использовать ajax и сохранять все без необходимости в формах или обновлять страницу.) но поскольку вы сказали, что вы новичок в php и вы уже начали таким образом, так что … я могу предложить вот что….

1) для каждого вашего ввода вы должны присвоить ему идентификатор и имя. таким образом, ваши входные данные должны выглядеть следующим образом (вы можете установить одинаковое имя и идентификатор для одного и того же поля, но каждое поле должно быть уникальным):

 <textarea class="form-control" rows="15" id="hostinput" name="hostinput"></textarea>
<textarea class="form-control" rows="15" id="vhostinput" name="vhostinput"></textarea>
  

2) Затем в вашем php-коде вы вводите:

 // check if form has been submitted
    if (!empty($_POST['hostinput'])){ //i prefer to use empty rather than isset you can read about it

    // save the text contents
    file_put_contents($file, $_POST['text']);

    // redirect to form again
    header(sprintf('Location: %s', $url));
    printf('<a href="%s">Moved</a>.', htmlspecialchars($url));
    exit();
}
esleif(!empty($_POST['vhostinput'])){
//SAVE THE VHOST
}
  

Таким образом, вы делаете это всякий раз, когда нажимается кнопка отправки, вы пытаетесь проверить два значения и снова сохранить их оба.

ПРЕДУПРЕЖДЕНИЕ: этот метод немного опасен…. допустим, пользователь отредактировал первый текст, но затем нажал «Отмена» …. затем отредактировал второй текст, затем нажал «Отправить» для второго текста…. вы фактически сохраните их оба….

Обычно я делаю это с помощью javascript и ajax, поэтому мне не нужно также обновлять страницу…

Надеюсь, я помог….

Комментарии:

1. Привет, Нил, у меня возникли некоторые проблемы с вашим решением… Я вставил свой код в редактирование выше. Кажется, я серьезно не в себе. Мне очень жаль, я исследую ошибки, но, похоже, ничего не получается.

2. Удалите строку if(!empty …..) и оставьте все остальное прежним …. и дайте мне знать, что произойдет, и если есть какая-либо ошибка, пожалуйста, покажите мне, что написано, а не только номер строки….

3. Привет, Нил, большое тебе спасибо, что нашел время… Когда я удаляю строки if (!empty …), ошибок вообще не отображается, однако обе кнопки открывают только последний файл, который появляется в PHP, в данном случае файл VHOSTS. Почти как если бы последняя половина, вызывающая файл VHOSTS, заменяла первую половину, пытающуюся вызвать файл HOST.