Я перемещаю сайт на хостинг cPanel и с php 5.1 до 5.4. Единственное, что не работает с этим движением, - это возвращение на страницу index.php после ввода данных MySql. Данные вставлены ОК, но я получаю пустую страницу вместо обновления страницы index.php.
Я изучил форум и использовал идеи, которые я заметил: удаленные пробелы в PHP-коде; переместил заголовок (Location: index.php) в скрипт; занял место между Location: и index.php, но не смог получить страницу index.php для отображения после вставки. URL-адрес находится в строке браузера, и если я нажму на него, страница обновится. Это происходило автоматически в прошлом.
Вот код:
<?php
function renderForm($mscdate, $mscname, $mscaffirm, $mscstatus, $error)
{
?>
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">
<script type="text/javascript">
$(function() {
$('#datepicker').datepicker({dateFormat: 'MM d, yy', altField: '#dbDate', altFormat: 'yy-mm-dd'});
});
</script>
<?php
}
include('connect to database');
if (isset($_POST['submit']))
{
$mscdate = mysqli_real_escape_string(htmlspecialchars($_POST['mscdate']));
$mscname = mysqli_real_escape_string(htmlspecialchars($_POST['mscname']));
$mscaffirm = mysqli_real_escape_string(htmlspecialchars($_POST['mscaffirm']));
$mscstatus = mysqli_real_escape_string(htmlspecialchars($_POST['mscstatus']));
if ($mscdate == '' || $mscname == '' || $mscaffirm == '')
{
$error = 'ERROR: Please fill in all required fields!';
renderForm($mscdate, $mscname, $mscaffirm, $mscstatus, $error);
} else {
mysqli_query("INSERT mscrides SET mscdate='$mscdate', mscname='$mscname', mscaffirm='$mscaffirm', mscstatus='$mscstatus'")
or die(mysqli_error());
header("Location:index.php");
}
}else { // if the form hasn't been submitted, display the form
renderForm('','','','','');
}
?>
Вы отправляете перенаправление HTTP-адреса Location
в браузер, не говоря также о том, что PHP прекращает выполнение, что обычно делается с помощью exit()
. В приложениях PHP это обычно приводит к условию гонки, которое зависит от широкого спектра факторов, в основном от скорости интернет/сети, относительно того, работает ли перенаправление.
Гонка конкретно, какая из них происходит сначала, после заголовка Location
:
Наличие явного exit()
является хорошей практикой, даже если вы считаете, что ваш скрипт закончится естественным образом, если у вас есть обработчик append или обработчик выключения.
Попробуйте добавить ob_start()
в верхней части кода.