Perl if语句,If value = nothing do语句if value = something do statement

Pok*_*lum -4 mysql xampp perl

我试图从文本框中插入一个值到SQL表中.虽然当我将文本框留空时,它会添加一个空白值,然后导致其余的表单函数无效.

我希望if语句检查$ animal是否为空,什么都不做,如果$ animal中有内容,则执行插入表.

不太确定放在哪里放什么???

if ($animal = " ") {
} else if ($animal = "???"){
insertTable("INSERT INTO $table(name) VALUE ('".$animal."')");
Run Code Online (Sandbox Code Playgroud)

24 - 27行是这个

sub insertTable {
$statement = shift (@_);
$dbh->do($statement);
}  # sub
Run Code Online (Sandbox Code Playgroud)

Sob*_*que 5

Perl使用标量变量,这是一个非常通用的小东西.他们遇到的一个问题是他们的"真实性"并不总是显而易见的.

如果使用布尔测试测试标量,则在以下情况下将为false:

  • 这是未定义的.
  • 这是一个字符串.
  • 它在数字上为零.

(如果未定义没有元素,则数组测试为false ).

所以正确的答案是 - 用于defined检查值是否已定义.或者使用正则表达式来匹配"有效"值.

例如

if ( $animal =~ m/\w+/ ) { 
    #do something 
}
Run Code Online (Sandbox Code Playgroud)

\w+是用于表示'一个或多个单词字符'的perl正则表达式,它是字母数字和下划线.因此,您的空字符串,仅空格字符串或未定义的字符串都将与此模式不匹配.

  • 这不是perl错误.要解决这个问题,我们需要更多代码. (2认同)

Dav*_*oss 5

这里有很多问题.解决最糟糕的问题:

  1. 您使用的=是分配,而不是比较.使用==比较数字和eq比较字符串.
  2. 您将变量与单个空间进行比较.你不可能在$ animal中获得单个空格字符.你会想做一些更简单(更简单if ($animal) { ... })或更复杂(或许if ($animal =~ /\w/) { ... })的事情.
  3. 您正在将用户输入直接插入到SQL中,然后针对数据库运行该SQL.这会导致SQL注入攻击.在SQL中使用绑定点要好得多.