У меня есть форма в великолепном всплывающем окне. Я хочу это таким образом, чтобы:
1.) После того, как пользователь отправил форму, откроется новое всплывающее окно с сообщением о том, что оно было отправлено.
2.) Если, например, пользователь уже отправил форму, во всплывающем окне появится сообщение вместо формы, чтобы предотвратить отправку нескольких отчетов.
Пока у меня есть код ниже, но он не показывает сообщение.
PHP
if(isset($_POST["btnSubmit"]))
{
$issue = $_POST['issue'];
$sql = "SELECT id, FROM report WHERE id='$id'";
$result = mysqli_query($db, $sql);
$row = mysqli_fetch_array($result, MYSQLI_ASSOC);
if(mysqli_num_rows($result) >= 1)
{
//Show message here
}
else
{
$sql = mysqli_query($db, "INSERT INTO report (id, issue) VALUES ('$id', '$issue')");
}
}
Javascript / Jquery
<script>
function cancel(){
$.magnificPopup.close();
}
$(document).ready(function(){
$('.report').magnificPopup({
type: 'inline',
fixedContentPos: true,
fixedBgPos: true,
overflowY: 'auto',
closeBtnInside: false,
preloader: false,
midClick: true,
mainClass: 'my-mfp-zoom-in',
});
$('#reportSubmittedContainer').magnificPopup({
type: 'inline',
fixedContentPos: true,
fixedBgPos: true,
overflowY: 'auto',
closeBtnInside: false,
preloader: false,
midClick: true,
mainClass: 'my-mfp-zoom-in',
});
});
</script>
HTML
<a href="#reportContainer" class="btnReport report" role="button">
<i class="fa fa-exclamation-triangle"></i> Report
</a>
<div id="reportContainer" class="mfp-hide">
<form class="form-horizontal submitReportForm" role="form" method="POST">
<div class="form-group">
<label class="control-label col-sm-2">Issue:</label>
<div class="col-sm-9">
<textarea id="issue" name="issue" type="text" class="form-control" rows="5"></textarea>
</div>
</div>
<div class="form-group">
<div class="col-sm-offset-2 col-sm-10">
<input type="submit" name="btnSubmit" value="Submit" onclick="return validate();" class="btn btn-default" />
<input type="button" name="btnCancel" value="Cancel" onclick="return cancel();"class="btn btn-default" />
</div>
</div>
</form>
</div>
<div id="reportSubmittedContainer" class="mfp-hide">
We have received your report.
</div>
Вот мои комментарии:
1.) После того, как пользователь отправил форму, откроется новое всплывающее окно с сообщением о том, что оно было отправлено.
Http — это протокол, который вы используете в настоящее время. Процедура Http не имеет состояния, что означает, что каждый запрос уникален. Поэтому, когда вы отправляете форму, DOM (структура объекта документа) перестраивается на сервере.
Для достижения такого рода ограничений был изобретен AJAX.
Я не видел метод проверки в вашем коде. Это может использовать AJAX, но его не следует менять.
2.) Если, например, пользователь уже отправил форму, во всплывающем окне появится сообщение вместо формы, чтобы предотвратить отправку нескольких отчетов.
Это также ограничения протокола HTTP. Из-за его состояния без сохранения состояния вы должны использовать Cookies для отправки клиенту некоторой информации, которая указывает на то, что пользователь был отправлен ранее. И JavaScript, и PHP могут отправлять куки.
Других решений пока нет …