php:关于回显一个空变量
Posted
技术标签:
【中文标题】php:关于回显一个空变量【英文标题】:Php: about echoing a null variable 【发布时间】:2015-04-10 05:42:21 【问题描述】:我目前正在使用 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 语句的 value 属性具有最初没有被分配任何值的变量,因此根据本书,文本框应该是空的。但稍后在练习中将再次调用同一页面,并且变量现在将具有值,因此它们将打印在文本框上。这是本书的解释:
这些回显语句显示包含数据的变量 用户先前已输入表单。 这是第一次 页面显示,但是,这些变量不会包含数据,所以 文本框将为空。
但是,在第一次运行程序时,文本框实际上不是空的:
自从这本书在 5 年前出版以来,我猜要么他们当时有效,但现在不行,要么代码本身是错误的。谁能告诉我这只是过时的代码还是一开始就真的坏了?以及如何修复它以获得使用空变量的空文本框的预期效果?
谢谢!
【问题讨论】:
您可以设置 error_reporting 以便不显示此 NOTICE:php docs like: error_reporting(E_ALL & ~E_NOTICE); @Igoel 这是一个糟糕的解决方案,您应该始终解决错误,而不是忽略它们 “糟糕”说起来有点刺耳.....不是最好的,但我认为当您学习新事物时,最好实现一些目标;) 【参考方案1】:您应该检查它们是否已定义。
即
<?php echo (isset($years)) ? $years : ''; ?>
此外,如果您在 php.ini 中关闭 display_errors,则不会发生这种情况,但这是一个不明智的解决方案
【讨论】:
【参考方案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
在这种情况下,每个人都可以确定每个变量是什么,以及它将包含什么。并且不会出现未定义的错误。
另请注意,关闭警告显示,如 cmets 和答案中所述,不是一个好主意。 当您编写好的代码时,不应显示任何警告。关闭它们当然不是解决方案。
唯一必须做的是关闭生产中的警告和错误,即使出现问题也不给黑客任何可能的线索。并将它们保存在某种错误记录器中。
如果你打算在 post 中使用这个变量,我建议你这样做:
$investement = (isset($_POST['investment'])) ? safety($_POST['investment']) : '';
其中安全是您自己的安全检查功能(如果您打算回显/存储数据,请删除特殊字符,并防止 mysql 注入)。和写法一样:
if (isset($_POST['investment']))
$investement = safety($_POST['investment']);
else
$investement = ''; // init value
【讨论】:
嗨 Jacek,这些变量实际上是在另一个 php 页面中赋值的,然后该页面将使用 include 函数调用该页面。这本书试图说,如果你回显一个没有分配值的变量,那么文本框应该是空的。他们甚至有显示文本框为空的图片。我只是好奇他们是否犯了错误,或者过去真的是这样。使用的版本是 5.3 谢谢评论。包括像记事本中的复制粘贴一样的作品。因此,如果这些变量确实在包含文件中声明之前,您不应该收到任何错误或警告。也许包含不起作用?由于 5.3 没有任何改变,所以它应该按照你书中的描述工作:)。 我想你可能忘记了最后的分号? $投资 = '';【参考方案3】:通知就是这样,一个通知,它不会阻止您的代码这样执行。当然,如果生成通知的变量/代码在其他地方使用,您可能会遇到麻烦。
所以,这本书有点正确,但我想说这是不好的做法,因为您应该始终以 0 个警告/通知为目标,这意味着您应该按照@Swifty 提到的那样做并检查变量是否已设置。
【讨论】:
以上是关于php:关于回显一个空变量的主要内容,如果未能解决你的问题,请参考以下文章