繁体   English   中英

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

[英]make php code shorter with conditional statements?

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

$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 等也是如此。

现在我可以看出这不是最短的编码方式,而且我隐约记得我们能够编写更短的代码; 是用代码编码吗? 如果....一个++。 对不起,我不记得了.... 谁能刷新我的 memory?

谢谢,

汤姆

您的代码不完整,我不知道$token变量来自哪里,所以我假设它来自表单。 另外,我猜你正在使用PDO object 的 DB,但对于mysqli驱动程序几乎相同。

你可以这样做:

foreach($_POST['form'] as $key) {
    $sql = 'INSERT INTO #__instellingen (type, instelling, locatie, 
    contactpersoon, telefoon, email, ivvu, vgu, token) VALUES (?,?,?,?,?,?,?,?,?)';
    $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 注入非常重要。

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

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."')
 ");
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM