将POST从一个页面传递到另一个页面,并在前一个页面中打印数据

时间:2015-03-21 19:40:03

标签: php json post

我有2个文件: basic.php pptimeline.php 。第一个是接口,第二个是从数据库获取数据的文件,它应该模仿json文件,因为我在它上面使用它:header('Content-Type: application/json');

我有一个组合框,显示数据库中的进程数,然后在时间轴中显示它。我设法将$nprocesso从basic.php传递给pptimeline.php并在那里打印。问题是我想将$nprocesso传递给pptimeline.php,运行数据库查询,然后在basic.php中打印数据,但我不知道如何做到这一点,因为表单操作让我陷入了pptimeline.php页面,其中包含json格式的打印文本。

我希望我能说清楚。

basic.php

<form action="json/pptimeline.php" method="POST" >
<label for="Process"> NProcess : </label>
  <select id="cproc" name="NProc"     onchange="document.getElementById('nprocesso').value=this.options[this.selectedIndex].text">
  <?php
foreach ($products as $res3)
    {
        echo "<option value='".$res3["PROCESSO"]."'>".$res3["PROCESSO"]."</option>";
    }
    ?>
</select>
<input type="hidden" name="nprocesso" id="nprocesso" value="" />
<input type="submit" name="search" value="Search"/>
</form>

 <?php
if(isset($_POST['search']))
{
    $nprocValue = $_POST['Proc'];
    $nproc = $_POST['nprocesso']; // get the selected text
}
?>

pptimeline.php

if (isset ($_REQUEST['nprocesso'])) {
$nprocesso = $_REQUEST['nprocesso'];
echo $nprocesso;
}

1 个答案:

答案 0 :(得分:0)

这样做的一种方法是使用添加标题(&#39;位置:$ new_url&#39;);将pptimeline.php重定向回basic.php:

if (isset ($_REQUEST['nprocesso'])) {
    $nprocesso = $_REQUEST['nprocesso'];
    echo $nprocesso;
    header('Location: basic.php?v=$nprocesso'); 
}

在basic.php中,最后添加以下内容:

if (isset($_GET['v']))
{
    echo $_GET['v']; 
}

<强>此外

上面提供的解决方案可以解决问题,但远非最佳方式。

您正在寻找的是从basic.php向pptimeline.php发出AJAX请求,并将结果重新显示在basic.php上。

要覆盖的内容太多,要更改代码以告诉您具体操作方法。但我会尝试总结一下:

  1. 在basic.php中包含Jquery
  2. 移除<form></form>周围的<select></select>,而是将事件处理程序添加到click events
  3. 在点击处理程序中,获取用户选择的值
  4. 在点击处理程序中创建AJAX request并发送(通过POST)值
  5. 在pptimeline.php中:

    1. if (isset ($_POST['v']))代替$ _REQUEST []
    2. 删除header()函数,而只是回显您想要发送回basic.php的数据。
    3. 如果您想要JSON中的数据
    4. ,请不要忘记保留header('Content-Type: application/json')

      AJAX帖子骨架:

          $("#form1").on('click', function(){
      
          // get the selected value from <select>
          //var value = ....
          $.ajax()
          {
              url: "pptimeline.php",
              type: "POST",
              data: {"v" : value}
              success: function(response) {
                  // some code to neatly display the results 
              }, 
              error: function(x,y,z){
                  alert("an error occured"); 
              }
          }); 
      

      详细代码

      <强> basic.php

      为了简单起见,我将<select></select>中的选项值替换为索引值。

              

          <label for="Process"> NProcess : </label>
          <select id="cproc" name="NProc"     onchange="document.getElementById('nprocesso').value=this.options[this.selectedIndex].text">
              <?php
              $i = 0; 
              for ($i=0; $i < 4;$i)
              {
                  echo "<option value='$i'>". $i ."</option>";
                  $i++; 
      
              }
              ?>
          </select>
          <button id="search-button"> Search-1 </button>
      
          <table border="1px" id="processes-table">
              <tr>
                  <th> id</th>    
                  <th> title</th>
                  <th> description</th>
                  <th> focus_date</th>
              </tr>
      
          </table>
      </body>
      
      
      <script> 
          $("#cproc").on('change', function(){
      
              var v1 = $(this).val();
              $.ajax({
                  url: "pptimeline.php", 
                  type: "POST", 
                  data: {'value' : v1}, 
                  success: function(response){
                      var array = JSON.parse(response); 
                      var _id = array['id']; 
                      var _title = array['title']; 
                      var _descr = array['description']; 
                      var _focus_date = array['focus_date']; 
      
                      var string = '<tr> <td>' + _id + ' </td> <td>'+ _title +' </td><td>'+_descr + '</td><td>' + _focus_date + '</td> </tr>'; 
                      $('#processes-table tr:last').after(string);
      
                  }, 
                  error: function(x,y,z){
                      alert("error"); 
                  }
              }); 
          }); 
      </script>
      

      <强> pptimeline.php     

      if (isset ($_POST['value'])) {
          $infotimeline = array(); 
      
          /*
           * REPLACE this with Database fetching/quering  
           */ 
          $infotimeline['id'] = 322; 
          $infotimeline['title'] = "the lion king";
          $infotimeline['description'] = "good movie";
          $infotimeline['focus_date'] = 1990; 
      
          $data = json_encode($infotimeline); 
          echo $data; 
      }
      ?>