我有这个:
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
方法收集变量,为什么不使用全局分配?难道我做错了什么?
任何帮助或建议都将不胜感激。
答案 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并检索那里的表单值,因为我没有在中间添加额外的页面。