使用条件语句缩短php代码?

使用条件语句缩短php代码?,php,conditional-statements,shorthand,Php,Conditional Statements,Shorthand,几年前,我学习了一门PHP课程,但大部分知识都已经消失了。所以我有一个问题。 在Joomla表单中(RSForms by RSJoomla),我使用了如下重复代码: $locatie01 = $_POST['form']['locatie_01']; $locatie02 = $_POST['form']['locatie_02']; $locatie03 = $_POST['form']['locatie_03']; $locatie04 = $_POST['form']['locatie_0

几年前,我学习了一门PHP课程,但大部分知识都已经消失了。所以我有一个问题。 在Joomla表单中(RSForms by RSJoomla),我使用了如下重复代码:

$locatie01 = $_POST['form']['locatie_01'];
$locatie02 = $_POST['form']['locatie_02'];
$locatie03 = $_POST['form']['locatie_03'];
$locatie04 = $_POST['form']['locatie_04'];
$locatie05 = $_POST['form']['locatie_05'];
$locatie06 = $_POST['form']['locatie_06'];
这一直持续到100。(该位置(荷兰语拼写为“locatie”)已发布到数据库。 再往下一点,我们正在做一些类似的事情,但是使用了更复杂的代码,所以我只列出3:

 $db->setQuery("
     INSERT INTO #__instellingen
     (type,instelling,locatie,contactpersoon,telefoon,email,ivvu,vgu,token)
     VALUES
     ('".$type."','".$instelling."','".$locatie01."','".$contactpersoon."','".$telefoon."','".$email."','".$ivvu."','".$vgu."','".$token."')
 ");
 $db->query();

 if(!empty($locatie02)){
 $db->setQuery("
     INSERT INTO #__instellingen
     (type,instelling,locatie,contactpersoon,telefoon,email,ivvu,vgu,token)
     VALUES
     ('".$type."','".$instelling."','".$locatie02."','".$contactpersoon."','".$telefoon."','".$email."','".$ivvu."','".$vgu."','".$token."')
 ");
 $db->query();
 }

 if(!empty($locatie03)){
 $db->setQuery("
     INSERT INTO #__instellingen
     (type,instelling,locatie,contactpersoon,telefoon,email,ivvu,vgu,token)
     VALUES
     ('".$type."','".$instelling."','".$locatie03."','".$contactpersoon."','".$telefoon."','".$email."','".$ivvu."','".$vgu."','".$token."')
 ");
 $db->query();
 }
这也持续到了100

我们在这里所做的是:第一行总是被填充(必填字段),从那时起:如果2不是空的,则将数据发送到数据库,与3相同,等等

现在我知道这不是最短的编码方式,我模糊地记得我们可以写更短的代码;是用编码方式吗?如果…a++。对不起,我不记得了…有人能刷新我的记忆吗

Thanx


Thom

由于每个元素的查询都是相同的,因此您可以执行类似操作。也无需检查它是否存在,因为您将只处理数组中的值。您需要使用准备好的语句并在此处进行清理,不要将原始表单数据插入数据库

foreach($_POST['form'] as $key => $locatie) {
  $db->setQuery("
     INSERT INTO #__instellingen
     (type,instelling,locatie,contactpersoon,telefoon,email,ivvu,vgu,token)
     VALUES ('".$type."','".$instelling."','".$locatie."','".$contactpersoon."','".$telefoon."','".$email."','".$ivvu."','".$vgu."','".$token."')
 ");
}

您的代码不完整,我不知道
$token
var来自何处,因此我假设它来自表单。 另外,我猜对于DB,您使用的是
PDO
对象,但是对于
mysqli
驱动程序,它几乎是相同的

你可以这样做:

foreach($\u POST['form']作为$key){
$sql='插入到#u instellingen中(类型、插入、位置、,
contactpersoon、telefoon、email、ivvu、vgu、token)值(?,,,,,,,,,,,,,,?);
$stmt=$pdo->prepare($sql);
$stmt->execute([$key['type'],$key['instelling'],$key['locatie'],$key['contactpersoon'],$key['telefoon'],
$key['email']、$key['ivvu']、$key['vgu']、$key['token']);
}
“?”是平均界参数。
为了避免代码中的SQL注入,使用预先准备好的语句非常重要。

循环和函数…听起来很熟悉,Lars。你能详细解释一下吗?每当你发现自己命名事物时,
$foo_1,$foo_2等
,这意味着你可能应该改用数组。这将假定没有表单中的其他数据。@NigelRen正确的答案取决于帖子中的内容,但没有提供。是&否,我认为答案应该能够预测问题,但你不能(AFAIK)通灵并能够理解OP可能遇到的其他问题。就像(如你所提到的)这意味着回答一个关于SQL的问题而不谈论使用准备好的语句。