Отправка содержимого в переменную только в том случае, если заполнено _POST - PullRequest
0 голосов
/ 06 апреля 2011

Помощь! У меня возникли проблемы с получением некоторых условных выражений в моем php-скрипте для формы.

Это суть HTML:

<input type="text" name="address1" id="address1" class="required" />
<input type="text" name="address2" id="address2" />
<input type="text" name="city" id="city" />
<input type="text" name="postcode" id="postcode" class="required" />

И PHP выглядит примерно так:

$address1 = $_REQUEST["address1"] ;
$address2 = $_REQUEST["address2"] ;
$city = $_REQUEST["city"] ;
$postcode = $_REQUEST["postcode"] ;

$message = 
"address: $address1, " .
"$address2, " .
"$city, " .
"$postcode" .

$sent = mail($to, $subject, $message, 'From:' . $email_address) ;

У меня есть некоторая проверка jQuery для 'address1' и 'postcode', поэтому они не проблема, поскольку они всегда будут возвращать значение. Если 'address2' и 'city' не заполнены (возможно, заполнитель формы не имеет второй строки в своем адресе или не вводит город, как они думают - правильно), что почтовый индекс будет достаточным в поиске своего адреса) они по-прежнему возвращают значение («ничего») по электронной почте.

То, что я хотел бы сделать, - это то, что поля формы оставлены пустыми, чтобы ничего не отправлять по электронной почте. Другими словами, если переменная $ address2 пуста, не посылайте мне «пробел». Например, если все будет готово, я получу это, и это здорово:

адрес: 1 Test Street, Вест-Энд, Test City, AB1 23C

Если пропущено поле, я получу это, что немного грязно:

адрес: 1 Test Street,, Test City, AB1 23C

Но мне бы это понравилось, потому что это красиво и аккуратно:

адрес: 1 Test Street, Test City, AB1 23C

Я пытался разобраться с функцией isset, но мне не повезло. Я также попробовал базовое утверждение «если», но, похоже, никуда не деться. Я должен признать, что php не моя сильная сторона, и я потратил много времени на это без успеха. Ваша помощь очень ценится!

Большое спасибо,

Martin.

Ответы [ 3 ]

1 голос
/ 06 апреля 2011

Для такого рода «фильтрации параметров» проблематично, мне нравится использовать функции массива PHP.

Например:

<?php
$aMessage = array();

$aMessage[] = $_REQUEST["address1"] ;
$aMessage[] = $_REQUEST["address2"] ;
$aMessage[] = $_REQUEST["city"]     ;
$aMessage[] = $_REQUEST["postcode"] ;

$aMessage = array_filter($aMessage);

$message = (implode(', ', $aMessage));

echo $message;
?>

Что он делает:

  1. заполните массив отличиями параметры.
  2. удалить пустые значения с функцией array_filter
  3. вывести значения, объединенные с запятая (implode функция).

При использовании этого метода код остается легко читаемым, даже если у вас много параметров.

0 голосов
/ 06 апреля 2011

isset () возвращает true, если переменная была установлена ​​ - то есть она была объявлена ​​ и имеет значение не NULL .Помимо этого бита о NULL, isset () ничего не говорит о содержимом этой переменной.

Чтобы проверить, является ли переменная действительно пустой (пустая строка, NULL, FALSE, 0,пустой массив и т. д.), используйте меткое имя empty ():)

Пример:

$a = NULL;
$b = '';
// $c we won't declare
echo isset($a); // False - $a has a NULL value
echo isset($b); // True - $b is set to a non-NULL Value. empty() will return True too.
echo isset($c); // False - $c is not set.

Другой способ сделать то, что Капитан упомянул выше:

$address = "";
foreach( array( "address1", "address2", "address3" ) as $param )
{
    $param = trim($_REQUEST[$param]);
    $address .= !empty( $param ) ? ', '.$param : "";
}

Как это работает:

  1. Определите имена элементов в нужном массиве $ _REQUEST.
  2. Вы просматриваете каждый элемент, извлекаете его значение из $ _REQUEST, stripлюбые пробелы (с помощью trim ()).
  3. Если параметр не пустой, добавьте его к $ address.
  4. Если он пуст, вы добавляете пустую строку.

Если вы не видели этого раньше, этот синтаксис condition ? expr_if_true : expr_if_false называется троичным оператором .

Немного чище, IMO.Меньше операторов if / else, бегающих вокруг.

0 голосов
/ 06 апреля 2011

определить новую переменную php перед импортом в db

$address=$_REQUEST["address1"];

if (trim($_REQUEST["address2"]!=''))
$address.=','.$_REQUEST["address2"]
...