Как загрузить страницу в div после использования заголовка - PullRequest
0 голосов
/ 16 октября 2018

Я хотел бы знать, как загрузить html-страницу в div после использования заголовка в коде php.

Например:

У меня есть главная страница.Когда я щелкаю меню слева, оно загружает страницу внутри div с именем «content».Внутри div с именем content у меня есть форма, после заполнения формы я нажимаю кнопку «Отправить».

Нажав кнопку «Отправить», я перенаправляюсь на свой php-код, который является insert_produto.php

Внутри страницы insert_produto.php У меня есть следующий код:

<?php

include '../logado.php';

$tipo =$_POST["tipo"];
$marca =$_POST["marca"];
$comprimento =$_POST["comprimento"];
$externo =$_POST["externo"];
$interno =$_POST["interno"];

$quantidade =$_POST["quantidade"];

//$conen tem que ser o nome da conexão, depois disso monta a query

//mysqli_query($conec,"INSERT INTO produtos (tipo) VALUES ('$tipo')");

if ($quantidade == "") {
	$quantidade = 1;
}

for ($i = 1; $i <= $quantidade; $i++) {

  if ($externo == '' or $interno == '') {
    echo "Os seguintes valores são obrigatórios:</p>";
    echo "• Diâmetro Externo;</p>";
    echo "• Diâmetro Interno.";
    echo "</br></br>";

    echo '<form id="erro" action="../main.php" method="post">';

    echo '<input type="submit" class="botao" value="Voltar">';

    echo '</form>';

    die;
}

// se INTEIRO = primeira query, ELSE segunda query
if ($comprimento == '' and $tipo == 'Inteiro'){

mysqli_query($conec,"INSERT INTO produtos (tipo, marca, comprimento, diaexterno, diainterno) VALUES ('$tipo', '$marca', '1000', '$externo', '$interno')");

} elseif ($comprimento == '' and $tipo == 'Pedaço') {

echo "Os seguintes valores são obrigatórios:</p>";
echo "• Comprimento;</p>";
echo "</br></br>";
echo '<form id="erro" action="../main.php" method="post">';
echo '<input type="submit" class="botao" value="Voltar">';
echo '</form>';
die;

} else {

mysqli_query($conec,"INSERT INTO produtos (tipo, marca, comprimento, diaexterno, diainterno) VALUES ('$tipo', '$marca', '$comprimento', '$externo', '$interno')");

}

} // ENCERRA O LAÇO DE REPETIÇÃO "FOR"

//header("Location: " . $_SERVER["HTTP_REFERER"]);
header("location: /main.php");

echo '<div class="content">
    <?php include("/cadastro/produto.php"); ?>
</div>
'

?>

После FOR я использую заголовок, чтобы вернуться на главную страницу.Однако, когда я попадаю на главную страницу, я хотел бы перезагрузить предыдущую html-страницу внутри div, называемого «content».

Я тоже не против, если мне придется вручную указывать, какую страницу я хочузагрузить внутри div, я на самом деле предпочитаю этот путь.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Я не мог понять, как решить эту проблему, поэтому я сделал обходной путь

Я объясню, как я сделал это, так что любой, кто сталкивается с той же проблемой, может найти это полезным

Сначала, в конце кода php, я просто добавил следующую строку: $ _SESSION ["pagina"] = "cadastro_produto";

перед: header ("location: / main.php ");

тогда, на моем main.php я сделал это: $ teste = $ _ SESSION [" pagina "];

и внутри div" content "я сделал это

<?php

if ($teste == 'cadastro_produto'){

echo '<div id="caixa">
Cadastrado com sucesso.</p>
voltar
</div>';

//header("location: /cadastro/produto.php")

}

$_SESSION["pagina"] = "";

?>
я положил $ _SESSION ["pagina"] = "";в конце, чтобы я мог установить переменную teste пустым, таким образом, обновление страницы не заставило бы это появляться снова

я знаю, что это не лучший способ решить проблему, но это сработало для меня иэтого достаточно для того, что мне нужно

плюс мне нужно было бы выяснить, как сделать возвращаемое сообщение, если «вставка в» прошла успешно или нет, таким образом, я могу сделать возврат сообщения и вывести кнопку возврата, чтобыформа

это решение решает мою проблему, но я благодарю всех, кто пытался помочь

0 голосов
/ 16 октября 2018

В вашем случае вы используете заголовок Location , который меняет код результата HTTP на 302 Redirect , с содержимым, которое вы указали после (в данном случае,

и включают / cadastro / produto.php . Все современные браузеры игнорируют полученное содержимое и перенаправляют пользователя на Местоположение URL. Единственный способ сделать то, что вы хотите, это отправитьформу, используя AJAX и обработайте ответ.

Например, вы можете сделать это так (используя jQuery), учитывая, что у вас есть id = form в вашем теге :

<script type="text/javascript">
$('#form').on ( 'submit', function ( e)
{
  e && e.preventDefault;
  $.ajax (
  {
    url: 'insert_produto.php',
    error: function ( jqXHR, textStatus, errorThrown)
    {
      alert ( 'Error sending form: ' + jqXHR.status + ' ' + jqXHR.statusText);
    },
    success: function ( data, textStatus, jqXHR)
    {
      if ( typeof ( data) == 'object' && 'result' in data)
      {
        if ( data.result == 'ok')
        {
          alert ( 'Added!');
          $('#content').load ( data.location);
        } else {
          alert ( data.message);
        }
      } else {
        alert ( 'Unknown data received.');
      }
    }
  });
});
</script>

В вашем PHP-скрипте вам нужно будет вернуть объект JSON со структурой:

{
  "result": "ok",
  "location": "\/cadastro\/produto.php"
}

И в случае ошибки со структурой:

{
  "result": "error",
  "message": "My error message"
}

Вы можете сделать это используя:

<?php

include '../logado.php';

$tipo =$_POST["tipo"];
$marca =$_POST["marca"];
$comprimento =$_POST["comprimento"];
$externo =$_POST["externo"];
$interno =$_POST["interno"];

$quantidade =$_POST["quantidade"];

$return = array ();
header ( "Content-Type: text/json");

//$conen tem que ser o nome da conexão, depois disso monta a query

//mysqli_query($conec,"INSERT INTO produtos (tipo) VALUES ('$tipo')");

if ($quantidade == "") {
	$quantidade = 1;
}

for ($i = 1; $i <= $quantidade; $i++) {

if ($externo == '' or $interno == ''){
  $return["result"] = "error";
  $return["message"] = "Os seguintes valores são obrigatórios:\n• Diâmetro Externo;\nDiâmetro Interno.";
  die ( json_encode ( $return);
}

// se INTEIRO = primeira query, ELSE segunda query
if ($comprimento == '' and $tipo == 'Inteiro'){

mysqli_query($conec,"INSERT INTO produtos (tipo, marca, comprimento, diaexterno, diainterno) VALUES ('$tipo', '$marca', '1000', '$externo', '$interno')");

} elseif ($comprimento == '' and $tipo == 'Pedaço') {

  $return["result"] = "error";
  $return["message"] = "Os seguintes valores são obrigatórios:\n• Comprimento.";
  die ( json_encode ( $return);

} else {

mysqli_query($conec,"INSERT INTO produtos (tipo, marca, comprimento, diaexterno, diainterno) VALUES ('$tipo', '$marca', '$comprimento', '$externo', '$interno')");

}

} // ENCERRA O LAÇO DE REPETIÇÃO "FOR"

$return["result"] = "ok";
$return["location"] = "/cadastro/produto.php";
die ( json_encode ( $return);
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...