Php:关于回显一个null变量

我目前正在使用Murach学习php(该书于2010年出版)。 其中一个练习有这些陈述:

<label>Investment Amount:</label> <input type="text" name="investment"
value="<?php echo $investment; ?>"/><br />
<label>Yearly Interest Rate:</label> <input type="text" name="interest_rate"
value="<?php echo $interest_rate; ?>"/><br />
<label>Number of Years:</label> <input type="text" name="years"
value="<?php echo $years; ?>"/><br />

整个要点是,上面的echo属性的值属性具有一些变量,它们最初没有被赋予任何值,所以根据本书,文本框应该是空的。 但稍后在练习中,同一页面将再次被调用,变量现在将具有值,因此它们将被打印在文本框中。 这是本书的解释:

这些回显语句显示包含用户以前输入到表单中的数据的变量。 但是,首次显示此页面时,这些变量将不包含数据,因此文本框将为空

但是,第一次运行程序时,文本框实际上并不是空的:

这本书第一次说这些文本框应该是空的

自从这本书在5年前出版以来,我猜测他们是否曾经工作过,但现在还没有,或者代码本身是错误的。 任何人都可以告诉我,如果这只是过时的代码,或者它真的打破了开始? 而我该如何解决它以使用空变量获得空文本框的预期效果?

谢谢!


你应该检查它们是否被定义。

<?php echo (isset($years)) ? $years : ''; ?>

另外,如果关闭php.ini中的display_errors,这将不会发生,但这将是一个不明智的解决方案


编程最重要的方式就是编程,其他人也可以理解它。 因此,在这种情况下,如果您打算使用此变量,请先声明并注释它:

$investment = ''; // Future post investement variable, on startup empty
$interest_rate = ''; // Future interest_rate variable, on startup empty
$years = ''; // Future years variable, on startup empty

在这种情况下,每个人都确定每个变量是什么,以及它将包含什么。 并且不会发生未定义的错误。


另外请注意,关闭警告显示,如评论和答案中所述,不是一个好主意。 当你编写好的代码时,不应该显示警告。 关闭它当然不是解决方案。

唯一必须做的是关闭生产中的警告和错误,不要给黑客任何可能的线索,即使出现了问题。 并将它们保存在某种错误记录器中。


如果你打算在post中使用这个变量,我建议你这样做:

$investement = (isset($_POST['investment'])) ? safety($_POST['investment']) : '';

在哪里安全是你自己的安全检查功能(删除特殊字符,并防止mysql注入,如果你打算回声/存储数据)。 这与写作一样:

if (isset($_POST['investment'])) {
    $investement = safety($_POST['investment']);
}
else {
    $investement = ''; // init value
}

通知就是通知,它不会阻止您的代码执行。 当然,如果生成通知的变量/代码在其他地方使用,则可能会遇到麻烦。

所以,这本书是有点正确的,但我会说这是不好的做法,因为你应该始终瞄准有0个警告/通知,这意味着你应该像上面提到的那样做@Swifty并检查变量是否被设置。

链接地址: http://www.djcxy.com/p/96557.html

上一篇: Php: about echoing a null variable

下一篇: Expression is not allowed as field default value