Что вызвало бы неправильную оценку isset () и in_array ()?

РЕДАКТИРОВАТЬ:

Разработчик нарушил маршрутизацию. Это повлияло на мою страницу таким образом, что это привело к сбою в работе, поэтому она действовала иначе, чем другие серверы, использующие почтовую программу.

Итак, у нас есть массив с именем $ mailSettings. Этот массив обрабатывает значения по умолчанию, если новые значения не передаются почтовой программе. Это настроено здесь:

     $mailSettings = array(
"TOADDRESS" => $wuMail_Config->DefaultToAddress,
"TONAME" => $wuMail_Config->DefaultToName,
"CC" => $wuMail_Config->DefaultCC,
"BCC" => $wuMail_Config->DefaultBCC,
"SUBJECT" => $wuMail_Config->DefaultSubject,
"MESSAGE" => $wuMail_Config->DefaultMessage,
"HTML" => $wuMail_Config->DefaultHTML,
"FROMADDRESS" => $wuMail_Config->DefaultFromAddress,
"FROMNAME" => $wuMail_Config->DefaultFromName,
"REPLYADDRESS" => $wuMail_Config->DefaultReplyAddress,
"REPLYNAME" => $wuMail_Config->DefaultReplyName
);

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

        $mailData = array(
"TOADDRESS" => $email,
"TONAME" => $username,
"SUBJECT" => "Welcome to SiteName! Please verify your email address.",
"MESSAGE" => $message,
"HTML" => $message
);

Итак, мы делаем следующее: мы берем $ mailData и преобразуем каждое имя ключа в заглавную версию. Так что, если они отправят «toAddReSs», он будет оцениваться как «TOADDRESS», все заглавные буквы — в соответствии с массивом $ mailSettings. Мы делаем это здесь …

foreach($mailData as $submittedOption => $submittedValue){
$submittedOptionUPPER = strtoupper($submittedOption);
$submittedOpts[] = $submittedOptionUPPER;
if(in_array($submittedOptionUPPER, $mailSettings)){
$mailSettings[$submittedOptionUPPER] = $data[$submittedOption];
} else {
echo "Mail Configuration Error";
}
}

Я также пытался, если (isset ($ mailSettings [$ submitOptionUPPER]) {и это тоже не работает. Когда я печатаю $ mailData & $ mailSettings, оба точно такие же, как указано выше (значения по умолчанию правильно извлекаются из нашего конфигурационного файла).

Проблема в том, что я могу сделать print_r для обоих массивов ПРАВО НАД Eval (isset или in_array), и они выглядят нормально … но на этом сервере (и ни на одном из наших других серверов) код переходит в эхо «Ошибка конфигурации почты. » Я не могу (на всю жизнь) понять это … и так пришло время StackOverflow.

Есть ли какая-то причина, по которой isset AND in_array может что-то потерпеть (только на одном конкретном сервере)?

Другие факты, чтобы знать …

  1. $ mailSettings находится внутри функции wuMail ($ mailData) {}
  2. $ mailData передается в wuMail () с любой страницы, содержащей файл wuMail (для конфигурации / функции)
  3. На других серверах wuMail ($ mailData) не приводит к ошибкам. На этом сервере он думает, что значения не существуют в массиве (иначе он думает, что разработчик попытался использовать wuMail () неправильно, передав неверный ключ) ~ Мы делаем это для защиты от ошибок разработчика, чтобы мы могли легко найти страницы неправильно используя wuMail, если это так … ну, мы подумали, что это так — и обнаружили, что нет, функция оценивает неправильно.

Есть идеи?

2

Решение

Вам нужно использовать array_key_exists($submittedOptionUPPER, $mailSettings) или же isset($mailSettings[$submittedOptionUPPER]) проверить ключ, однако я думаю, что вы делаете сводится к следующему:

// covert keys to uppercase
$mailData = array_change_key_case($mailData, CASE_UPPER);

// check if there are keys in $mailData that aren't in $mailSettings
if(array_key_diff($mailData, $mailSettings) {
echo "Mail Configuration Error"; // do something else?
}
// merge $mailData into $mailSettings
$mailSettings = array_merge($mailSettings, $mailData);
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]