在非常基本的PHP表单中保留POST中的值

时间:2010-09-03 21:29:36

标签: php post get

我正在阅读一个非常基本的PHP教程,并且正在创建一个计算器,这样我就可以获得$ _GET,$ _POST和一些通用语法。

我在名为functionadvanced.php的php文件中创建了一个非常基本的php函数calc();。所有这一切都需要2个数字,一个算子,做数学并吐出结果(就像我说的,非常基本的教程)。该功能有效,所以我不会发布代码。

我有另一个名为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中发布的值?

2 个答案:

答案 0 :(得分:1)

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

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

注意:我知道这只是一个学习过程,但是这种天真的方法容易受到XSS的影响,所以在开始使用之前要仔细阅读...

答案 1 :(得分:1)

为什么在从$ _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”,只有默认的文本。如果你需要一个文本框,你应该使用