#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.