сделать код php короче с условными выражениями? - PullRequest
0 голосов
/ 16 апреля 2020

Несколько лет go Я прошел курс PHP, но большая часть знаний исчезла. Итак, у меня есть вопрос. В форме Joomla (RSForms от 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. (местоположение (на нидерландском языке написано «locat ie») размещены в базе данных. Чуть дальше мы делаем нечто похожее, но затем с более сложным кодом, поэтому я просто перечислю 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 et c.

Теперь я могу сказать, что это не самый короткий способ кодирования, и я смутно помню, что мы смогли написать более короткий код; это было с кодированным кодированием? Если .... a ++. Извините, я не могу вспомнить .... Кто-нибудь может обновить sh мою память?

Спасибо,

Том

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Ваш код неполон, я не знаю, откуда взялась переменная $token, поэтому я предполагаю, что она исходит из формы. Кроме того, я предполагаю, что для БД вы используете объект PDO, но он почти такой же для драйвера 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 в ваш код.

0 голосов
/ 16 апреля 2020

Поскольку запрос одинаков для каждого элемента, вы можете сделать что-то вроде этого. Также не нужно проверять, существует ли он, так как вы будете обрабатывать только значения в массиве. Вам необходимо использовать подготовленные операторы и проводить санитарную обработку здесь, не вставляйте необработанные данные формы в базу данных.

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