【问题标题】:Perl if statement, If value = nothing do statement if value = something do statementPerl if 语句,If value = nothing do 语句 if value = something do 语句
【发布时间】: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; 会警告您在条件中使用赋值。这只是它们是一个非常好的主意的原因之一。

标签: mysql perl xampp


【解决方案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】:

这里有很多问题。解决其中最糟糕的问题:

  1. 您使用的是=,它用于分配,而不是比较。使用== 比较数字,使用eq 比较字符串。
  2. 您将变量与单个空格进行比较。 $animal 中不太可能出现单个空格字符。你会想做一些更简单(if ($animal) { ... })或更复杂(也许是if ($animal =~ /\w/) { ... })的事情。
  3. 您将用户输入直接插入到 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 只是有一个不同的名称。
猜你喜欢
  • 2018-08-12
  • 1970-01-01
  • 2013-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多