Php 有没有办法缩短这个switch语句?
我怎样才能把这整件事缩短?我的意思是,我尝试使用for循环,但我在这方面遇到了很多问题,因为我对这一切都很陌生。我希望这里有人能帮我。另外,您是否认为有更好的valadation形式,我想检查用户提供的数据是否与表单提供的选项相同,因此他不能提交表单中不包含的内容,以防止mysqli注入。所有这些对我来说都很不安全,也不是很安全。是的,你可以把它写得更短,因为除了默认值,你所有的动作对每个集合都是一样的 考虑以下内容,我重构了您的第一个switch语句,它的工作方式与以前完全相同Php 有没有办法缩短这个switch语句?,php,mysqli,Php,Mysqli,我怎样才能把这整件事缩短?我的意思是,我尝试使用for循环,但我在这方面遇到了很多问题,因为我对这一切都很陌生。我希望这里有人能帮我。另外,您是否认为有更好的valadation形式,我想检查用户提供的数据是否与表单提供的选项相同,因此他不能提交表单中不包含的内容,以防止mysqli注入。所有这些对我来说都很不安全,也不是很安全。是的,你可以把它写得更短,因为除了默认值,你所有的动作对每个集合都是一样的 考虑以下内容,我重构了您的第一个switch语句,它的工作方式与以前完全相同 switc
switch($act1){
case "SUBSCRIBE":
$error = "false";
break;
case "SUB & LIKE":
$error = "false";
break;
case "LIKE & COMMENT":
$error = "false";
break;
case "DISLIKE":
$error = "false";
break;
case "COMMENT":
$error = "false";
break;
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_01 = "true";
break;
}
switch($act2){
case "SUBSCRIBE":
$error = "false";
break;
case "SUB & LIKE":
$error = "false";
break;
case "LIKE & COMMENT":
$error = "false";
break;
case "DISLIKE":
$error = "false";
break;
case "COMMENT":
$error = "false";
break;
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_02 = "true";
break;
}
switch($act3){
case "SUBSCRIBE":
$error = "false";
break;
case "SUB & LIKE":
$error = "false";
break;
case "LIKE & COMMENT":
$error = "false";
break;
case "DISLIKE":
$error = "false";
break;
case "COMMENT":
$error = "false";
break;
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_03 = "true";
break;
}
switch($act4){
case "SUBSCRIBE":
$error = "false";
break;
case "SUB & LIKE":
$error = "false";
break;
case "LIKE & COMMENT":
$error = "false";
break;
case "DISLIKE":
$error = "false";
break;
case "COMMENT":
$error = "false";
break;
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_04 = "true";
break;
}
变得更有活力
一种更动态的方式来看待这个问题,有点基于Andrew Andrew发布的内容,就是你可以使用一个循环来循环所有的动作,并检查它们是否有错误
PHP是一个很好的工具,可以生成动态脚本,使您不必手动重复那么多代码,并且可以自动处理您所处的情况,可能无需将来编辑代码。以下是我将如何处理你的情况
switch($act1){
case "SUBSCRIBE":
case "SUB & LIKE":
case "LIKE & COMMENT":
case "DISLIKE":
case "COMMENT":
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_01 = "true";
break;
}
是的,您可以将其写得更短,因为除了默认值之外,您的所有操作对于每个集合都是相同的 考虑以下内容,我重构了您的第一个switch语句,它的工作方式与以前完全相同
switch($act1){
case "SUBSCRIBE":
$error = "false";
break;
case "SUB & LIKE":
$error = "false";
break;
case "LIKE & COMMENT":
$error = "false";
break;
case "DISLIKE":
$error = "false";
break;
case "COMMENT":
$error = "false";
break;
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_01 = "true";
break;
}
switch($act2){
case "SUBSCRIBE":
$error = "false";
break;
case "SUB & LIKE":
$error = "false";
break;
case "LIKE & COMMENT":
$error = "false";
break;
case "DISLIKE":
$error = "false";
break;
case "COMMENT":
$error = "false";
break;
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_02 = "true";
break;
}
switch($act3){
case "SUBSCRIBE":
$error = "false";
break;
case "SUB & LIKE":
$error = "false";
break;
case "LIKE & COMMENT":
$error = "false";
break;
case "DISLIKE":
$error = "false";
break;
case "COMMENT":
$error = "false";
break;
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_03 = "true";
break;
}
switch($act4){
case "SUBSCRIBE":
$error = "false";
break;
case "SUB & LIKE":
$error = "false";
break;
case "LIKE & COMMENT":
$error = "false";
break;
case "DISLIKE":
$error = "false";
break;
case "COMMENT":
$error = "false";
break;
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_04 = "true";
break;
}
变得更有活力
一种更动态的方式来看待这个问题,有点基于Andrew Andrew发布的内容,就是你可以使用一个循环来循环所有的动作,并检查它们是否有错误
PHP是一个很好的工具,可以生成动态脚本,使您不必手动重复那么多代码,并且可以自动处理您所处的情况,可能无需将来编辑代码。以下是我将如何处理你的情况
switch($act1){
case "SUBSCRIBE":
case "SUB & LIKE":
case "LIKE & COMMENT":
case "DISLIKE":
case "COMMENT":
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_01 = "true";
break;
}
另一种方法
//declare a whitelist of things that should not produce an error
$whiteList = [
'SUBSCRIBE',
'SUB & LIKE',
'LIKE & COMMENT',
'DISLIKE',
'COMMENT',
'LIKE',
];
//add all of the acts to an array to loop over
$acts = [$act1, $act2, $act3, $act4];
//by default error is set to false
$error = "false";
foreach($acts as $key => $act) {
//check if value from act is in the whitelist declared above, if its not, set `$error` to true and set `$error_*` (with key) to "true" as well.
if(!in_array($act, $whiteList)) {
$error = "true";
}
}
另一种方法
//declare a whitelist of things that should not produce an error
$whiteList = [
'SUBSCRIBE',
'SUB & LIKE',
'LIKE & COMMENT',
'DISLIKE',
'COMMENT',
'LIKE',
];
//add all of the acts to an array to loop over
$acts = [$act1, $act2, $act3, $act4];
//by default error is set to false
$error = "false";
foreach($acts as $key => $act) {
//check if value from act is in the whitelist declared above, if its not, set `$error` to true and set `$error_*` (with key) to "true" as well.
if(!in_array($act, $whiteList)) {
$error = "true";
}
}
创建一个函数来处理相同的逻辑,并在那里应用开关
语句。您可以只调用一个公共函数,而不是使用相同的逻辑重复相同的switch
语句
<?php
// allowable keywords
$whiteList = [
'SUBSCRIBE',
'SUB & LIKE',
'LIKE & COMMENT',
'DISLIKE',
'COMMENT',
'LIKE',
];
// if $act1 is in the list of allowable keywords then set $error = "false"
if (in_array($act1, $whiteList)) {
$error = "false";
} else {
$error = "true";
$error_01 = "true";
}
if (in_array($act2, $whiteList)) {
$error = "false";
} else {
$error = "true";
$error_02 = "true";
}
...
创建一个函数来处理相同的逻辑,并在那里应用switch
语句。您可以只调用一个公共函数,而不是使用相同的逻辑重复相同的switch
语句
<?php
// allowable keywords
$whiteList = [
'SUBSCRIBE',
'SUB & LIKE',
'LIKE & COMMENT',
'DISLIKE',
'COMMENT',
'LIKE',
];
// if $act1 is in the list of allowable keywords then set $error = "false"
if (in_array($act1, $whiteList)) {
$error = "false";
} else {
$error = "true";
$error_01 = "true";
}
if (in_array($act2, $whiteList)) {
$error = "false";
} else {
$error = "true";
$error_02 = "true";
}
...
是的,
在这种情况下,您可以允许真正的切换和生成条件
function getError($act_in) {
$error = "";
switch($act_in) {
case "SUBSCRIBE":
case "SUB & LIKE":
case "LIKE & COMMENT":
case "DISLIKE":
case "COMMENT":
case "LIKE":
$error = "false";
break;
default:
$error = "true";
break;
}
return $error;
}
是的,
在这种情况下,您可以允许真正的切换和生成条件
function getError($act_in) {
$error = "";
switch($act_in) {
case "SUBSCRIBE":
case "SUB & LIKE":
case "LIKE & COMMENT":
case "DISLIKE":
case "COMMENT":
case "LIKE":
$error = "false";
break;
default:
$error = "true";
break;
}
return $error;
}
有几种方法:
简洁的开关盒
switch(true){
case ($act1=='SUBSCRIBE' and $act2=='SUBSCRIBE' and .....):
$error = "false";
break;
case ($act1=='SUB & LIKE' and $act2=='SUB & LIKE' and .....):
$error = "false";
break;
case ($act1=='LIKE & COMMENT' and $act2=='LIKE & COMMENT' and .....):
$error = "false";
break;
case ($act1=='DISLIKE' and $act2=='DISLIKE' and .....):
$error = "false";
break;
case ($act1=='COMMENT' and $act2=='COMMENT' and .....):
$error = "false";
break;
case ($act1=='LIKE' and $act2=='LIKE' and .....):
$error = "false";
break;
default:
$error = "true";
$error_01 = "true";
break;
}
如上所述的For循环
创建这些字符串的TRIE并在此TRIE中搜索。若word存在,则将error设置为false,否则将其设置为true
在SqlInjection上,始终使用参数并避免动态查询。这将解决SqlInjection问题有几种方法:
简洁的开关盒
switch(true){
case ($act1=='SUBSCRIBE' and $act2=='SUBSCRIBE' and .....):
$error = "false";
break;
case ($act1=='SUB & LIKE' and $act2=='SUB & LIKE' and .....):
$error = "false";
break;
case ($act1=='LIKE & COMMENT' and $act2=='LIKE & COMMENT' and .....):
$error = "false";
break;
case ($act1=='DISLIKE' and $act2=='DISLIKE' and .....):
$error = "false";
break;
case ($act1=='COMMENT' and $act2=='COMMENT' and .....):
$error = "false";
break;
case ($act1=='LIKE' and $act2=='LIKE' and .....):
$error = "false";
break;
default:
$error = "true";
$error_01 = "true";
break;
}
如上所述的For循环
创建这些字符串的TRIE并在此TRIE中搜索。若word存在,则将error设置为false,否则将其设置为true
在SqlInjection上,始终使用参数并避免动态查询。这将解决SqlInjection问题,下面是我的简短尝试
switch($act1){
case "SUBSCRIBE":
case "SUB & LIKE":
case "LIKE & COMMENT":
case "DISLIKE":
case "COMMENT":
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_01 = "true";
break;
}
$validvals=array('SUBSCRIBE','SUB&LIKE','LIKE&COMMENT','DISLIKE','COMMENT','LIKE');
$error='false';
对于($i=0;$i这是我缩短的尝试
switch($act1){
case "SUBSCRIBE":
case "SUB & LIKE":
case "LIKE & COMMENT":
case "DISLIKE":
case "COMMENT":
case "LIKE":
$error = "false";
break;
default:
$error = "true";
$error_01 = "true";
break;
}
$validvals=array('SUBSCRIBE','SUB&LIKE','LIKE&COMMENT','DISLIKE','COMMENT','LIKE');
$error='false';
对于($i=0;$i)我将值放入一个数组中。类似于$response=array(“SUBSCRIBE”=>“false”,…);
然后$error=$response[$act1];
或在_array()中使用)
;我对I.Dynin的另一篇帖子发表了评论。我基本上是说:代码有很多问题,但问题中提出的问题不是其中之一。我把他介绍给他。然后我离开了。当我回来时,问题不见了,他评论道:“我才20岁。”.很明显,我的评论被视为欺凌。这从来不是我的本意。我道歉。因为没有私人消息系统,我不得不公开道歉,就像这样。我只是想讨论一下代码。我会从中吸取教训,下次会变得更好。嗯,不,我从来没有把你的评论视为坏事,我只是不喜欢别人说有太多的错误,请不要给出一些原因,因为我已经在那里提到我不擅长php,我甚至在设置Cookie时遇到问题。将值放入数组。类似于$response=array(“SUBSCRIBE”=>“false”,…);
然后$error=$response[$act1];
或者在_array()中使用)
;我对I.Dynin的另一篇帖子发表了评论。我基本上是说:代码有很多问题,但问题中提出的问题不是其中之一。我把他介绍给他。然后我离开了。当我回来时,问题不见了,他评论道:“我才20岁。”.很明显,我的评论被视为欺凌。这从来不是我的本意。我道歉。因为没有私人消息系统,我不得不公开道歉,就像这样。我只是想讨论一下代码。我会从中吸取教训,下次会变得更好。嗯,不,我从来没有把你的评论视为坏事,我只是不喜欢别人说这里有太多的错误,请不要给出一些原因,因为是的,我已经在那里提到过,我不擅长php,我甚至在设置Cookiet时遇到问题。只有在所有行为都相同的情况下,这才有效,否则将返回错误。这不是一个处理此问题的好方法。更不用说它看起来有多混乱了。在需要使用常量表达式的情况下d和设置错误不需要所有$ACT上的和。这只在所有ACT都相同的情况下有效,否则将返回错误。这不是一个处理此问题的好方法。更不用说它看起来有多凌乱。在需要的情况下,不需要使用常量表达式,并且设置错误不需要和