【问题标题】:Retaining values across POST in a VERY basic php form以非常基本的 php 形式在 POST 中保留值
【发布时间】:2010-09-03 21:29:36
【问题描述】:

我正在学习一个非常基本的 php 教程并正在创建一个计算器,以便掌握 $_GET、$_POST 和一些通用语法的窍门。

我在一个名为 functionadvanced.php 的 php 文件中创建了一个非常基本的 php 函数 calc();。它所做的只是取两个数字,一个运算符,进行数学运算并输出结果(就像我说的,非常基础的教程)。该功能有效,因此我不会发布代码。

我有另一个名为 calc.php 的 php 文件,其中包含我的计算器表格。代码如下:

<?php
include "functionadvanced.php";

$number1 = $_POST['num1'];
$number2 = $_POST['num2'];
$operator = $_POST['op'];

?>

<html>
<body>
  <form action='calc.php' method='POST'>

    <input type='textbox' name='num1' value="<?php echo $_GET['$number1']; ?>"/> &nbsp;
    <select name="op" selected="<?php echo $_GET['$operator']; ?>">
           <option value="+">+</option>
           <option value="-">-</option>
           <option value="*">*</option>
           <option value="/">/</option>
    </select> &nbsp;
    <input type='textbox' name='num2' value="<?php echo $_GET['$number2']; ?>"/>
    <input type='submit' value='=' /> 
    <input type='text' name='result' value="<?php echo calc($number1,$number2,$operator); ?>" />

  </form>
</body>
</html>

表单确实有效,并显示了 calc 函数吐出的正确值,但是当页面回发时,它不会将回发的值保留在字段中。我以为我应该使用 $_GET 来获取 $_POST 中发布的值?

【问题讨论】:

    标签: php post get


    【解决方案1】:

    $_GET 指的是在query string 中传递的信息(index.php?id=123 给出$_GET['id'] = '123'),而$_POST 用于表单信息。这些大致(但不完全)对应于匹配的http request methods

    所以你想再次使用$_POST,或者只使用你已经从$_POST中读取的变量(比如$number1)。

    注意:我知道这只是一个学习过程,但这种幼稚的方法很容易受到XSS 的攻击,所以在开始使用任何重要的东西之前请先阅读...

    【讨论】:

    • 啊,这很有道理。我来自 .NET 背景 :) 谢谢!是的,这只是学习,我不会在现场环境中使用这个基本功能。再次感谢!
    【解决方案2】:

    当您从 $_POST 中获取值时,为什么还要使用 $_GET?你只需要使用它们。并且还应该添加默认值

    <?php
    include "functionadvanced.php";
    
    $number1 = isset($_POST['num1'])?$_POST['num1']:0;
    $number2 = isset($_POST['num2'])?$_POST['num2']:0;
    $operator = isset($_POST['op'])?$_POST['op']:'+';
    
    ?>
    
    <html>
    <body>
      <form action='calc.php' method='POST'>
    
        <input name='num1' value="<?php echo $number1; ?>"/> &nbsp;
        <select name="op" selected="<?php echo $operator; ?>">
               <option value="+">+</option>
               <option value="-">-</option>
               <option value="*">*</option>
               <option value="/">/</option>
        </select> &nbsp;
        <input name='num2' value="<?php echo $number2; ?>"/>
        <input type='submit' value='=' /> 
        <input name='result' value="<?php echo calc($number1,$number2,$operator); ?>" />
    
      </form>
    </body>
    </html>
    

    此外,没有 type="textbox",只有默认文本。如果你需要一个文本框,你应该使用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-25
      相关资源
      最近更新 更多