为什么$_GET()设置的变量不保留值

问题描述 投票:0回答:1

其想法是,一个脚本使用参数调用另一个脚本,然后被调用的脚本使用相同的参数重新调用它的调用脚本。

调用脚本


<?php
    //search_members - Test.php
    $id = '9999';
    $search_1 = '';
    $search_2 = 'Bloggs';
    $sort = '3';
    echo '<a class="results" href="editmember - TEST.php?id=' . $id . '&search_1=' . $search_1 . '&search_2=' . $search_2 . '&sort=' . $sort .'">View</a>';
?>

调用的脚本


//edit_member - TEST.php

session_start();

if (isset($_POST['exit']))
  {
    $id = $_POST['id']; 
    $first_name = $_POST['first_name']; 
    //Passed Parameters
    //$search_1 = $_POST['search_1'];    
    //$search_2 = $_POST['search_2'];
    //$sort = $_POST['sort'];

    echo 'Display Parameters 2</p>';
        echo 'search_1' . $search_1 . '</p>';   //NOTDEFINED error???
    echo 'search_2' . $search_2 . '</p>';   //NOTDEFINED error???
    echo 'sort' . $sort . '</p>';           //NOTDEFINED error???
    echo '</p>';
    echo '<a class="results" style="bold;color:black" href="search_members - Test.php?search_1=' . $search_1 . '&search_2=' . $search_2 . '&sort=' . $sort. '">Continue Search</div>';   //V2 
    exit();
  }
else 
  {
  $id = '9999';
  $first_name = 'Fred';
  // Set passed parameter variables
  $search_1 = $_GET['search_1'];
  $search_2 = $_GET['search_2'];
  $sort = $_GET['sort'];
  
    echo 'Display Parameters 1</p>';
    echo 'search_1' . $search_1 . '</p>';   
    echo 'search_2' . $search_2 . '</p>';
    echo 'sort' . $sort . '</p>';
    echo '</p>';
    
?>  
  <form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
  <table>
  <tr><td><label for="id">ID:</label></td>
      <td><input type="text" id="id" name="id" maxlength="6" size="6" value="<?php if (!empty($id)) echo $id; ?>"></input></td>
  </tr>
  <tr><td><label for="first_name">First Name:</label></td> 
      <td><input type="text" id="first_name" name="first_name" maxlength="30" size="30" value="<?php if (!empty($first_name)) echo $first_name; ?>"></input></td>
  </tr>
  <!--Passed Parameters Stored
  <input type="hidden" id="search_1" name="search_1" value="<?php echo $search_1; ?>"></label> 
  <input type="hidden" id="search_2" name="search_2" value="<?php echo $search_2; ?>"></label>    
  <input type="hidden" id="sort" name="sort" value="<?php echo $sort; ?>"></label> 
  -->
  </table>
  <p class="text_centered">
    <input type="submit" value="Exit" name="exit" />
    <input type="submit" value="Update" name="update" />
    <input type="submit" value="Delete" name="delete" />
  </p>
  </form>
 </div>
<?php
  } 
?>

问题是为什么上面显示的格式的脚本会为保存参数的变量产生“未定义”错误。这就像 $_GET 设置的变量在 POST 后被清除。 有人能解释一下这是为什么吗?

如果取消注释下面所示的部分,则脚本可以正常工作。


  //Passed Parameters
  //$search_1 = $_POST['search_1'];    
  //$search_2 = $_POST['search_2'];
  //$sort = $_POST['sort'];

  <!--Passed Parameters Stored
  <input type="hidden" id="search_1" name="search_1" value="<?php echo $search_1; ?>"></label> 
  <input type="hidden" id="search_2" name="search_2" value="<?php echo $search_2; ?>"></label>    
  <input type="hidden" id="sort" name="sort" value="<?php echo $sort; ?>"></label> 
  -->

这可能是由于完全无法理解 php 脚本的工作原理......但我只是在学习。

提前感谢您的回复:)

php get
1个回答
0
投票

$_GET、$_POST 和所有其他变量都会针对每个请求重置。 PHP 文件针对请求运行,当 HTML 发送到浏览器时,程序退出,变量被清除。

要存储请求之间的任何信息,您需要将它们放入

$_SESSION
数组中。

$_SESSION['search_1'] = $_GET['search_1'];
$_SESSION['search_2'] = $_GET['search_2'];
$_SESSION['sort'] = $_GET['sort'];

您可以访问它们

echo '<p>search_1' . $_SESSION['search_1'] . '</p>';   //NOTDEFINED fixed
echo '<p>search_2' . $_SESSION['search_2'] . '</p>';   //NOTDEFINED fixed
echo '<p>sort' . $_SESSION['sort'] . '</p>';           //NOTDEFINED fixed
© www.soinside.com 2019 - 2024. All rights reserved.