Perl if 语句,If value = nothing do 语句 if value = something do 语句
Posted
技术标签:
【中文标题】Perl if 语句,If value = nothing do 语句 if value = something do 语句【英文标题】:Perl if statement, If value = nothing do statement if value = something do statement 【发布时间】:2015-02-06 01:32:17 【问题描述】:我正在尝试将文本框中的值插入到 SQL 表中。虽然当我将文本框留空时,它会添加一个空白值,这会导致其余的表单功能不起作用。
我希望if
语句检查 $animal 是否为空白,什么也不做。如果 $animal 里面有东西,那么执行插入到表中。
我不太确定该放什么。
if ($animal = " ")
else
if ($animal = "???")
insertTable("INSERT INTO $table(name) VALUE ('".$animal."')");
第 24 - 27 行是这个
sub insertTable
$statement = shift (@_);
$dbh->do($statement);
# sub
【问题讨论】:
=
是赋值运算符,它将返回右侧参数的值(在您的情况下为 " "
和 "???"
)。你想要==
。
use strict; use warnings;
会警告您在条件中使用赋值。这只是它们是一个非常好的主意的原因之一。
【参考方案1】:
Perl 使用标量变量,这是非常通用的小东西。他们的问题之一是他们的“真实性”并不总是显而易见的。
如果您使用布尔测试来测试标量,则如果:
未定义。 这是一个空字符串。 是数字 0。 是字符串“0”。(如果数组未定义或没有元素,则数组测试为假。)
所以正确的答案是 - 要么使用defined
来检查值是否已定义。或者使用正则表达式来匹配“有效”值。
例如
if ( $animal =~ m/\w+/ )
# Do something
\w+
是 Perl 正则表达式,用于表示“一个或多个单词字符”,它是字母数字和下划线。所以你的空字符串、只有空格的字符串或未定义的字符串都不会匹配这个模式。
【讨论】:
当我尝试插入表格时,在 html 表单中按下提交后,我现在收到此错误:DBD::mysql::db do failed: Unknown column 'snake' in 'field list' at J:/xampp/htdocs/webprog/cal/recordAnimalsMass.pl 第 26 行。 这不是 perl 错误。为了解决我们需要更多代码的问题。【参考方案2】:这里有很多问题。解决其中最糟糕的问题:
-
您使用的是
=
,它用于分配,而不是比较。使用==
比较数字,使用eq
比较字符串。
您将变量与单个空格进行比较。 $animal 中不太可能出现单个空格字符。你会想做一些更简单(if ($animal) ...
)或更复杂(也许是if ($animal =~ /\w/) ...
)的事情。
您将用户输入直接插入到 SQL 中,然后针对您的数据库运行该 SQL。这导致SQL injection attacks。在 SQL 中使用绑定点要好得多。
【讨论】:
use strict; use warnings
将解决第 1 点。这表明 OP 没有打开这些模式。 Found = in conditional, should be == at line 5.
【参考方案3】:
在 Perl 中没有空值,只有未定义!
if (defined $value)
# Do that
else
# Do this
【讨论】:
undef
是空值。 Perl 只是有一个不同的名称。以上是关于Perl if 语句,If value = nothing do 语句 if value = something do 语句的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Ember Handlebars 中使用 if 语句实现 not?