Слишком много вложенных операторов IF - плохая практика, потому что их трудно отлаживать. Вместо этого вы должны разбить их на маленькие операторы
Например:
<?php
session_start();
if !(isset( Слишком много вложенных операторов IF - плохая практика, потому что их трудно отлаживать. Вместо этого вы должны разбить их на маленькие операторы
Например:
[110] Теперь код становится понятнее, и вы можете отследить. Похоже, ваш код содержит ошибку в функции mail, поэтому он возвращает False, после чего появляется сообщение.
POST['fullname']) || isset( Слишком много вложенных операторов IF - плохая практика, потому что их трудно отлаживать. Вместо этого вы должны разбить их на маленькие операторы
Например:
[110] Теперь код становится понятнее, и вы можете отследить. Похоже, ваш код содержит ошибку в функции mail, поэтому он возвращает False, после чего появляется сообщение.
POST['email']) || isset( Слишком много вложенных операторов IF - плохая практика, потому что их трудно отлаживать. Вместо этого вы должны разбить их на маленькие операторы
Например:
[110] Теперь код становится понятнее, и вы можете отследить. Похоже, ваш код содержит ошибку в функции mail, поэтому он возвращает False, после чего появляется сообщение.
POST['phone'])) {
echo "Your enquiry could not be sent for some reason; please try sending us again.";
exit();
}
$fullname = Слишком много вложенных операторов IF - плохая практика, потому что их трудно отлаживать. Вместо этого вы должны разбить их на маленькие операторы
Например:
[110] Теперь код становится понятнее, и вы можете отследить. Похоже, ваш код содержит ошибку в функции mail, поэтому он возвращает False, после чего появляется сообщение.
POST['fullname'];
$email = Слишком много вложенных операторов IF - плохая практика, потому что их трудно отлаживать. Вместо этого вы должны разбить их на маленькие операторы
Например:
[110] Теперь код становится понятнее, и вы можете отследить. Похоже, ваш код содержит ошибку в функции mail, поэтому он возвращает False, после чего появляется сообщение.
POST['email'];
$phone = Слишком много вложенных операторов IF - плохая практика, потому что их трудно отлаживать. Вместо этого вы должны разбить их на маленькие операторы
Например:
[110] Теперь код становится понятнее, и вы можете отследить. Похоже, ваш код содержит ошибку в функции mail, поэтому он возвращает False, после чего появляется сообщение.
POST['phone'];
$headers = "MIME-Version: 1.0"."\r\n";
$headers.= "Content-type:text/html;charset=UTF-8"."\r\n";
$headers.= 'From: <'.$email.'>'."\r\n";
$mailto = "google@gmail.com";
$subject = "Web Design & Development Service";
$msg2send = "Hi $fullname,
Hi, we have received one fresh query for you.
Name: $fullname
Email: $email
Phone: $phone ";
$msg2send = nl2br($msg2send);
if (mail($mailto, $subject, $msg2send, $headers)) {
echo "Thanks for writing to us. We will get back to you as soon as possible.";
} else {
echo "Please fill out all the mandatory fields.";
}
?>
Теперь код становится понятнее, и вы можете отследить. Похоже, ваш код содержит ошибку в функции mail, поэтому он возвращает False, после чего появляется сообщение.
Для меня, простых пользовательских элементов конфигурации и пользовательских данных лучше, чтобы быть сохраненным или в простом конфигурационном XML-файле, дб SQLLite или в SQL Server MS Компактный дб. Точный носитель зависит от специфических особенностей реализации.
Я только использую реестр для вещей, которые я должен нечасто устанавливать и это, пользователи не должны мочь изменяться/видеть. Например, я сохранил зашифрованную информацию о лицензии в реестре прежде для предотвращения случайного пользовательского удаления данных.
Я собираюсь получить противоположное представление.
Реестр является прекрасным местом для помещения данных конфигурации всех типов. В целом это быстрее, чем большинство конфигурационных файлов и более надежно (отдельные операции на реестре проведены поэтому, если Ваши сбои приложения во время записи, реестр не повреждается - в целом, который не имеет место с ini файлами).
Marcelo MD совершенно прав: Хранение вещей как операционный процент, завершенный в реестре (или любой другой не volitile устройство хранения данных), является ужасной идеей. С другой стороны, хранить данные как последний раз используемые файлы очень хорошо - реестр был создан для просто такой проблемы.
Много других комментаторов на этом сообщении, говорящем о списке MRU, обсудили проблему того, что происходит, когда список MRU выходит из синхронизации из-за сбоев приложения. Я задаюсь вопросом, почему хранение списка MRU в плоском файле в устройстве хранения данных в расчете на пользователя немного лучше?
Я также не уверен, каковы "последствия безопасности" того, чтобы хранить Ваши данные в реестре. Реестр так же безопасен как файловая система - реестр и файловая система используют тот же механизм ACL для защиты их данных.
Если Вы собираетесь хранить свои пользовательские данные в файле, необходимо ли абсолютно поместить данные в %APPDATA %\CompanyName\ApplicationName, по крайней мере - тот путь, если два различных разработчика создают приложение с тем же именем (сколько "приложения" менеджера Медиа там там?) у Вас не будет коллизий.
Используя реестр, чтобы хранить данные имеет главным образом одну проблему: это не очень удобно для пользователя. У пользователей нет фактически шанса резервного копирования их настроек, копирования их к другому компьютеру, поиск и устранение неисправностей их (или сброс их), если они повреждаются, или обычно просто посмотрите то, что делает их программное обеспечение.
Мое эмпирическое правило состоит в том, чтобы использовать реестр только для общения с ОС. Ассоциации типа файла, записи деинсталлятора, процессы для выполнения при запуске те вещи, очевидно, должны быть в реестре.
Но данные, которые являются для использования в Вашем приложении только, принадлежат файла в Вашей папке App Data. (whiever один из 3 + папки App Data Microsoft в настоящее время хочет, чтобы Вы использовали, так или иначе),
Поскольку у каждого пользователя есть пространство для каталога в Windows, уже выделенном тому, чтобы хранить данные пользователя приложения, я использую его, чтобы хранить данные уровня пользователя (предпочтения, например) там.
В C# я получил бы его путем выполнения чего-то вроде этого:
Environment.GetFolderPath( Environment.SpecialFolder.ApplicationData);
Как правило, я буду хранить файлы SQLite там или независимо от того, что подходит для приложения.
Я думаю, что Microsoft поощряет использование изолированного устройства хранения данных вместо реестра Windows.
Вот статья, которая объясняет, как использовать ее в .NET.
Можно найти те файлы в Windows XP в соответствии с Документами и Настройками \\Локальное Приложение Settings\устройство хранения данных Data\Isolated. Данные находятся в .dat файлах
Я дифференцировался бы:
С одной стороны, существуют данные специфичной для приложений конфигурации, которые необходимы, чтобы приложение работало, например, IP-адреса для соединения с, который папки использовать для какой файлы и т.д., и не тривиальное на пользовательские настройки. Те, которые я вставил файл конфигурации, ini формат для простого материала, xml, если это становится более сложным.
С другой стороны, там тривиально на пользовательские настройки (лучший пример: положения окна и расположение). Чтобы постараться не создавать помехи файлам конфигурации (который некоторые пользователи захотят отредактировать сами, столь немногие и ясно расположенные записи - необходимость), мне нравится помещать тех, которые в реестре (при этом консервативные значения по умолчанию установлены в приложении, если никакие настройки в реестре не могут быть найдены).
Я главным образом делаю это как istmatt Саис: Я храню файлы конфигурации в %APPDATA%
папка. Обычно в %APPDATA%\ApplicationName
, Мне не нравится значение по умолчанию.NET APPDATA%\CompanyName\ApplicationName\Version
, тот уровень детализации и сложность контрпродуктивны для большинства малых и средних приложений.
Я не соглашаюсь с примером Marcelo MD того, чтобы не хранить недавно используемые файлы в реестре. IMO это - точно энергозависимый вид пользователя определенная информация, которая может храниться там. (Его пример того, какой не сделать, очень хорош, хотя!)
Если Ваше приложение будет развернутым "на предприятии", имейте в виду, что администраторы могут настроить реестр с помощью инструментов групповой политики. Например, если бы Firefox использовал реестр для вещей как прокси-сервер, то он сделал бы развертывание снимком, потому что администратор может использовать стандартные инструменты в активном каталоге для установки его. Если Вы используете что-либо еще, я не думаю, что такие вещи могут быть сделаны очень легко.
Не отклоняйте реестр все вместе. Если существует шанс, администратор мог бы хотеть стандартизировать части Вашей конфигурации через сеть, поместить установку в реестр.
Мне кажется легче думать о том, что Вы не должны помещать там. например: динамические данные, такие как "последний файл редактора, открытый" и на опции проекта. Это является действительно раздражающим, когда Ваше приложение теряет синхронизацию с реестром (удаление файла, системный катастрофический отказ, и т.д.) и получает информацию, которая больше не допустима, возможно заводя в тупик пользователя.
В более раннем задании я видел парня, который сохранил передачу данных completness процент там, Пишущий новые значения в каждом 10k или таким образом, и имея GUI получают это значение каждую секунду, таким образом, это могло показать в строке заголовка.