使用标题后如何将页面加载到div中

时间:2018-10-16 13:16:57

标签: php html mysqli

在将标头转换为php代码后,我想知道如何将html页面加载到div中。

例如:

我有主页。当我单击左侧的菜单时,它将在div内加载一个名为“ content”的页面。 在名为content的div内,我有一个表单,填写表单后,单击“发送”按钮。

通过单击发送按钮,我将重定向到我的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 之后,我使用Header返回主页。但是,当我进入主页时,我想在div内重新加载名为“ content”的html页面。

如果我必须手动指定要在div中加载哪个页面,我也不介意,我实际上更喜欢这种方式。

2 个答案:

答案 0 :(得分:0)

在您的情况下,您使用的是 Location 标头,该标头将HTTP结果代码更改为 302重定向,其中包含您回显后的内容(在这种情况下,

并包含 /cadastro/produto.php 。所有现代浏览器都会忽略收到的内容,并将用户重定向到 Location URL。 做您想要的唯一方法是使用AJAX提交表单并处理响应。

例如,考虑到您在

标记处有 id = form ,您可以这样做(使用jQuery):

<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);
?>

答案 1 :(得分:0)

我不知道如何解决此问题,所以我做了一个变通方法

我将说明如何解决该问题,因此任何遇到相同问题的人都可能会发现有帮助

首先,在php代码的末尾,我简单地添加了以下行: $ _SESSION [“ pagina”] =“ cadastro_produto”;

在标头(“ location:/main.php”)之前;

然后,在我的main.php中,我这样做了: $ teste = $ _ SESSION [“ pagina”];

在div“内容”中,我做了这个

<?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设置为空白,这样刷新页面不会使它再次出现

我知道这不是解决问题的最佳方法,但是它对我有用,并且足以满足我的需求

另外,如果“ insert into”成功或失败,我将需要弄清楚如何制作返回消息,这样我就可以使返回消息变为msg并在表单中回显一个后退按钮

此解决方案解决了我的问题,但是我感谢所有尝试提供帮助的人