Php:关于回显null变量

时间:2015-02-10 08:54:41

标签: php echo

我目前正在使用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属性值属性首先没有赋值任何值的变量,因此根据本书,文本框应该是空的。但是稍后在练习中,将再次调用同一页面,变量现在将具有值,因此它们将打印在文本框中。这是本书的解释:

  

这些echo语句显示包含数据的变量   用户先前已进入表单。 第一次这样   但是,显示页面,这些变量不会包含数据   文本框将为空

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

These textboxes are supposed to be empty the first time around says the book

由于这本书于5年前出版,我猜他们当时工作但现在没有,或者代码本身是错误的。任何人都可以告诉我这是否只是过时的代码或者它真的打破了吗?我如何修复它以使用空变量获得空文本框的预期效果?

谢谢!

3 个答案:

答案 0 :(得分:5)

您应该检查它们是否已定义。

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

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

答案 1 :(得分:2)

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

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

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


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

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


如果你计划在帖子中使用这个变量,我建议你这样做:

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

安全性是您自己的安全检查功能(删除特殊字符,如果您计划回显/存储数据,请阻止mysql注入)。它与写作相同:

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

答案 2 :(得分:0)

通知就是它,通知,它不会阻止你的代码执行。当然,如果生成通知的变量/代码在别处使用,你可能会遇到麻烦。

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