Редактирую форму для отправки сообщения с сайта на емайл. Всё прекрассно работает. Отправляет, уведомляет, и по факту отправки/ошибки данных выводит подтверждающую/предупреждающую страницу, соответственно. Проблема: При попытке передать данные, об ошибке из одного скрипта в другой - ничего не получается. Проверенно, что данные скриптом собираются в надлежащем виде и наполенны нужным содержимым. Задача: передать данные из файла message.php лежащие в переменной $reason в переменную $error файла message_notsend.php и для вывода там этих данных на экран. напишите пожалуйста простой код как это сделать. мой вариант почему-то неработает. актуальный блок кода файла message.php PHP: <? // if the missing_fields_redirect option is on: redirect them if ($missing_fields_redirect) { header ("Location: $missing_fields_redirect?error=$reason"); exit; } $require; $missing_field_list .= "<b>Заполните данные: $required[$i]</b><br>\n"; } } // send error to our mighty error function if ($missing_field_list) print_error($missing_field_list,"missing"); } ... // our mighty error function.. function print_error($reason,$type = 0) { build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet); // for missing required data if ($type == "missing") { if ($missing_field_redirect) { header ("Location: $missing_field_redirect"); exit; } else { ?> Форма Вашего заказа не прошла подтверждение ввиду следующих причин: <p> <ul> <? echo $reason."\n"; ?> </ul> ... // if the redirect option is set: redirect them if ($redirect) { header("Location: $redirect"); exit; блок кода файла message_notsend.php больше в этом файле вообще пхп кода никакого другого не предвидится. только дизайн страници хтмл. Код (Text): <?php $oshibka = $_GET['error']; ?> <?php echo $oshibka."\n"; ?>
Pit-Bull 1)Помещай PHP-код не в блок Code а в блок PHP, при чем вначале скрипта обязательно открывай дескриптор <?php 2)Хм... А на message_notsend.php точно переход поулчается вида /message_notsend.php?error=что-то ? Возможно, у тебя не определена переменная $reason, или в переменной $redirect нет $reason ?
1. Будьсделнвашвысокблагородье. Весь по струнке, носом к солнцу. 2. Точно. Получается такой переход. Только без что-то. Просто /message_notsend.php?error= и конец строки адреса на этом. Поподробнее, как определить эти переменные. Я просто интуитивно переделываю готовый скрипт отправки. В пхп знаю ничто, вплоть до далёк от его азбуки. Тем не менее прошу сдуть щёки, преодолеть презренье, многим другим областям понзнания я владычественный повелитель, а здесь нужно разово решить единичный вопрос создания формы отправки своими силами, без претензий на всезнайство и мировое господство. Прошу помощи, в этом интересном вопросе. Как передать данные одного массива из одного пхп файла, в другой пхп/хтмл файл и вывести там его на экран. Можно просто привести банальный отвлечённый пример синтаксиса, не вникая в перепетии моего скрипта. Хотя сразу замечу, что все данные скрипт из себя самого выводит на экран замечательно и в должном виде. Значит всё в нём работает нормально. При неумелых попытках передать данные в другой файл - отображается пустое значение. ЗЫ: кстати \©/ - это не стаканчик с колой а тонущий человек воздевший ручки к верху, прогнувшаяся под гирей палка, критический момент в игровом автомате pinbal, или банальный гиперволновой перемодулятор фазового потока высокочастотного излучения для секретного спутника шпиона модификации КЦ/9у, в общем полная зависть члену по фрейду. Прости за эту самую смешную шутку в мире.
PHP: <?php // файл 1.php session_start(); $_SESSION['reason'] = array(1, 2, 3, 4, 5); ?> PHP: <?php // файл 2.php session_start(); $error = $_SESSION['reason']; print_r($error); ?> Код (Text): http://site.home/1.php http://site.home/2.php
А кто мешает обработать ошибку на этой же странице? Это, честно говоря, решение через жопу в данном случае. Если же не одумаешься, то втыкай про сессии http://php.net/session
Интересно получается... Где-то человек просто молодец, например: не пришлось объяснять что разделение кода от представления это есть хорошо... сам дошел. Это плюс '+'. А вот банальных истин не понимает... это минус'-'. Pit-Bull, читайте мануал товарищ. Мне почему-то кажется что у Вас все получится.
Вполне возможно что так оно и есть. Изначально, я и пробовал сделать именно через НЕ жопу. Конкретно, если оставить всё как есть, то скрипт работает идиально, всё отправляет, всё выводит. Но написан он так - что по умолчанию выводит он сообщение об ошибке в выстраиваемую самим скриптом хтмл страницу. страница напрочь лишена дизайна. просто белый фон, пустое пространство и сообщения об отправке/ошибке. а нужно - что бы тоже самое значение выводилось на странице, с таким же дизайном как и форма отправки, как и весь остальной сайт. попытка тупо вставить весь код этого самого обрабатывающего пхп скрипта в нужном месте задизайненой хтмл страници привела к тому, что сообщение об ошибке на ней выводится, и дизайн присутствует. Но непонятным мне образом карёжится весь дизайн, фон одного полня таблици расползается на все ниже и справа присутствующие и все попытки сознательного редактирования элементов скрипта которые могли бы теоретически за это отвечать - безрезультатны. Страница выглядит непристойно. Посему было решено передавать данные в другую страницу и там их выводить. К тому же в описании самого скрипта присутствует возможность данную функцию включить. Только не написанно как передавать данные. Так что: 1. данные обрабатывающим форму скриптом собираются и выводтся идиально самим собой, в случае отсутствия перехода на отдельную страницу об ошибке. 2. переход на страницу в случае ошибки/успеха отправки переходит замечательно. как передать данные в эту страницу. сейчас буду пытаться вышеизложенным примером.
1 Вопрос. а как правильно записать, если переменная reason УЖЕ собрала в себя все данные, и 1,2,3,4, вручную мне задать её ненужно. быть может в таком случае мне понадобиться что-то типа PHP: <?php // файл 1.php session_start(); $_SESSION['peredacha'] = array($reason); ?> PHP: <?php // файл 2.php session_start(); $error = $_SESSION['peredacha']; print_r($error); ?>
Тогда в помощь конструкция: PHP: <?php $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason; ?>
Пока поробовал тот вариант что предлагал сам выше. конечно есть какой-то прогресс. раньше вообще ничего не выдавал или ошибку.. а тут. вот что выдал в том месте задизайненной страници, в котором код вставлен был. Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at /home/uХХХХ/mysiteru/www/message_error.php:10) in home/uХХХХ/mysiteru/www/message_error.php on line 80 Array ( [0] => )
Pit-Bull Заголовки, установки сессии/куки, должны быть установлены до первого вывода (любого) в браузер. В данном случае, интепретатор сообщает, что вы уже отправили заголовки на 10 строке файла message_error, и пытаетесь это сделать еще раз на 80-ой строке. Лучше всего, объявлять сессии в самом начале файла.
и в том и в другом случае одинаковое сообщение по адресу файл2 лайн 80 находится строчка session_start();. PHP: <?php session_start(); $error = $_SESSION['reason']; print_r($error); ?> файл 1 такой. PHP: <?php ... if ($missing_fields_redirect) { session_start(); $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason; header ("Location: $missing_fields_redirect"); exit; ... ?> В данном случае происходит проверка, если заданно значение $missing_fields_redirect, в котором содержиться адрес перехода на отдельную задизайненную страницу об ошибке Вида http://mysite.ru/message_error.php тогда работает редирект, если значение не задано - то скрипт там дальше может сам работать и выводить в чистую белую страницу нужные данные.
В обоих файлах я убрал из кода открытие сессии и установил его самой первой строчкой. PHP: <?php session_start(); ?> Сообщение об ошибке действительно пропало. но вместо него ничего не появилось. Опять выводится пустота.
разумно, теперь добавь в самое начало скриптов: error_reporting(E_ALL); ЗЫ: Хотя и разумно, но все же стоит не забывать: куда и когда запускать механизм сессий. Заметьте, что php по умолчанию не делает авто-запуск сессий... стоит задуматься: почему?
О боги. Добейте... Что он от меня теперь хочет??? Код (Text): Notice: Undefined variable: separator in /home/uХХХХ/mysiteru/www/message.php on line 49 Notice: Undefined variable: newline in /home/uХХХХ/mysiteru/www/message.php on line 52 Notice: Undefined offset: 2 in /home/uХХХХ/mysiteru/www/message.php on line 120 Notice: Undefined index: HTTP_REFERER in /home/uХХХХ/mysiteru/www/message.php on line 122 Notice: Undefined offset: 1 in /home/uХХХХ/mysiteru/www/message.php on line 123 Notice: Undefined offset: 1 in /home/uХХХХ/mysiteru/www/message.php on line 124 Notice: Undefined offset: 1 in /home/uХХХХ/mysiteru/www/message.php on line 99 Notice: Undefined variable: required in /home/uХХХХ/mysiteru/www/message.php on line 283 Warning: Cannot modify header information - headers already sent by (output started at /home/uХХХХ/mysiteru/www/message.php:49) in /home/uХХХХ/mysiteru/www/message.php on line 296 привожу указанные строки кода. 49 define("SEPARATOR", ($separator)?$separator:": "); 52 define("NEWLINE", ($newline)?$newline:"\n"); 120 122 123 124, (121 - пустая) $referer = $temp[2]; if ($referer=="") {$referer = $_SERVER['HTTP_REFERER']; list($remove,$stuff)=split('//',$referer,2); list($home,$stuff)=split('/',$stuff,2); 99 if (trim(strtolower($temp2[1])) == trim(strtolower($temp[1]))) 283 $require = $required; Самый последний варнинг выдаётся вот на эту самую строку, где я редирект делаю header ("Location: $missing_fields_redirect"); в общем виде тот же код, напоминаю его. PHP: <?php // This is because I originally had it require but too many people // were used to Matt's Formmail.pl which used required instead. if ($required) $require = $required; // handle the required fields if ($require) { // seperate at the commas $require = ereg_replace( " +", "", $require); $required = split(",",$require); for ($i=0;$i<count($required);$i++) { $string = trim($required[$i]); // check if they exsist if((!(${$string})) || (!(${$string}))) { // if the missing_fields_redirect option is on: redirect them if ($missing_fields_redirect) { $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason; header ("Location: $missing_fields_redirect"); exit; } $require; $missing_field_list .= "<b>Заполните данные: $required[$i]</b><br>\n"; } } // send error to our mighty error function if ($missing_field_list) print_error($missing_field_list,"missing"); } ?> <?php ... // our mighty error function.. function print_error($reason,$type = 0) { build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet); // for missing required data if ($type == "missing") { if ($missing_field_redirect) { header ("Location: $missing_field_redirect"); exit; } else { ?> Форма Вашего послания не прошла подтверждение ввиду следующих причин: <p> <ul> <? echo $reason."\n"; ?> </ul> ... ?> весь код этого скрипта открыт ТУТ http://www.dtheatre.com/scripts/ скачать сразу - http://www.dtheatre.com/scripts/formmail_files/formmail.v50.zip
Pit-Bull Были бы рядом - добил, честное слово. Перевожу: Замечание: Переменная не определена, но используется: $separator (где...) Замечание: Нет элемента массива с индексом "2": (где ...) Замечание: то же самое, только индекс уже другой Внимание: Не могу отправить заголовок с помощью функции header() - мы уже отослали браузеру все header(). По последней ошибке Вам уже указывали что не так:
Действительно, указал 2 раза открытие сессии по ошибке. Одно в начала, второе в месте вывода принимаемых данных. Удалил второе открытие. Значение в принимающем файле никакое не выводится по прежнему.
По делу. Вот код. Он должен передавать данные собранные в одном файле для вывода в другом файле. Он неработает. Бьюсь как рыба об лёд уже много дней... Помогите отправить данные из одного файла в другой. файл 1 передаёт (строка 18 и 44) PHP: <?php ... // This is because I originally had it require but too many people // were used to Matt's Formmail.pl which used required instead. if ($required) $require = $required; // handle the required fields if ($require) { // seperate at the commas $require = ereg_replace( " +", "", $require); $required = split(",",$require); for ($i=0;$i<count($required);$i++) { $string = trim($required[$i]); // check if they exsist if((!(${$string})) || (!(${$string}))) { // if the missing_fields_redirect option is on: redirect them if ($missing_fields_redirect) { $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason; header ("Location: $missing_fields_redirect"); exit; } $require; $missing_field_list .= "<b>Заполните данные: $required[$i]</b><br>\n"; } } // send error to our mighty error function if ($missing_field_list) print_error($missing_field_list,"missing"); } ... ?> ... и тут тоже поставил ... <?php // our mighty error function.. function print_error($reason,$type = 0) { build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet); // for missing required data if ($type == "missing") { if ($missing_field_redirect) { $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason; header ("Location: $missing_field_redirect"); exit; } else { ?> убрать в обоих местах, поставить в обоих местах или оставить только в каком-то одном предложенную строку $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason; работоспособности не добавляет файл 2 принимает, простите, не то написал. исправил. PHP: <?php $error = $_SESSION['reason']; echo $error; print_r($error); ?> это весь пхп код который только есть в этом принимающем файле, кроме открытия сессии вверху. никакие переменные в принимающем файле как видете не определены и я не знаю как их определять и надо ли. в самом начале обоих файлов красуется PHP: <?php session_start(); ?>
может если так не работает... может действительно сбросить значения в тхт файл в одном скрипте и проситать его другим скриптом для вывода на экран в нужном месте отформатированной хтмл страницы?
честно говоря, я уже в отчаянии... знали бы вы СКОЛЬКО вариантов перестановок мест слагаемых я перепробовал... ( никогда так долго и безрезультатно проблема не мучила ни один мой проект...