$ _POST是否与全局变量一起使用?

时间:2014-05-01 19:41:02

标签: php html forms

我有这个:

page1.php中

Number of students<input type="number" name="number">

使page2.php

我使用<input>方法从$_POST获取数据并将其分配给var $a

<? $a = $_POST['number']; ?>

page3.php

我定义了一个函数,以便使用全局变量计算某些东西。

<? function Calculate(){
     global $a;
     include 'page2.php'
     echo (3+10)/$a;
   }?>

现在,它说警告: 4

上的C:/.../ page3.php中除以零

但是,如果您定义var $a = 3,例如,在 page2.php 中,并在 page3.php

中调用它
<? function Calculate(){
     global $a;
     include 'page2.php';
     echo (3+10)/$a;
   }?>

效果很好。

假设$_POST方法收集变量,为什么不使用全局分配?难道我做错了什么?

任何帮助或建议都将不胜感激。

2 个答案:

答案 0 :(得分:2)

仅当向$a发出POST请求时,才会设置page2.php的值。但是,您无法像page3.php中那样调用您的函数。

如果您直接转到page3.php,则没有POST请求,$a的值将为0.因此,除以零错误。

如果需要,您可以在page3.php中加入page2.php,并在POST请求时从那里调用您的函数。但是在这样做时,你不会在函数中需要$a的声明。相反,你可以将它作为参数传递给函数。

function calculate($a=1) {
    /* Your code */
}

函数头中的$a=1用于在调用函数时没有传递任何内容时提供默认值。

所以你的page2.php看起来像

<?php
    $a = $_POST['number'];
    include 'page3.php';
    Calculate($a);
?>

并且您的page3.php看起来像

<?php
    function Calculate($a=1) {
        echo (3+10)/$a;
    }
?>

祝你好运!

答案 1 :(得分:1)

问题不在于全局变量,我怀疑你是否应该在这种情况下使用它们。

这是因为您的代码$_POST['number'];失败了。 当您包含页面时,您之前(通过提交表单)所做的POST请求数据不再存在,导致没有为$a分配任何值 但是,当您进行硬编码$a = 3时,代码将起作用,因为它不依赖于任何类型的提交数据。

我建议你直接从page1转到page3并检索那里的表单值,因为我没有在中间添加额外的页面。