За последние 24 часа нас посетили 18026 программистов и 1700 роботов. Сейчас ищут 1536 программистов ...

Передача значения переменной из одного пхп файла в другой

Тема в разделе "PHP для новичков", создана пользователем Pit-Bull, 1 апр 2008.

Статус темы:
Закрыта.
  1. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    Редактирую форму для отправки сообщения с сайта на емайл.
    Всё прекрассно работает. Отправляет, уведомляет, и по факту отправки/ошибки данных выводит подтверждающую/предупреждающую страницу, соответственно.

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

    Задача:
    передать данные из файла message.php лежащие в переменной $reason в переменную $error файла message_notsend.php и для вывода там этих данных на экран.

    напишите пожалуйста простой код как это сделать.

    мой вариант почему-то неработает.

    актуальный блок кода файла message.php

    PHP:
    1.  
    2. <?
    3.         // if the missing_fields_redirect option is on: redirect them
    4.          if ($missing_fields_redirect) {
    5.             header ("Location: $missing_fields_redirect?error=$reason");
    6.             exit;
    7.          }
    8.          $require;
    9.          $missing_field_list .= "<b>Заполните данные: $required[$i]</b><br>\n";
    10.       }
    11.    }
    12.    // send error to our mighty error function
    13.    if ($missing_field_list)
    14.       print_error($missing_field_list,"missing");
    15. }
    16.  
    17. ...
    18.  
    19. // our mighty error function..
    20. function print_error($reason,$type = 0) {
    21.    build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet);
    22.    // for missing required data
    23.    if ($type == "missing") {
    24.       if ($missing_field_redirect) {
    25.          header ("Location: $missing_field_redirect");
    26.          exit;
    27.       } else {
    28.       ?>
    29.       Форма Вашего заказа не прошла подтверждение ввиду следующих причин:
    30.       <p>
    31.      
    32. <ul>
    33.       <?
    34.       echo $reason."\n";
    35.       ?>
    36. </ul>
    37.      
    38. ...
    39.  
    40.  
    41. // if the redirect option is set: redirect them
    42. if ($redirect) {
    43.    header("Location: $redirect");
    44.    exit;
    45.  
    блок кода файла message_notsend.php
    больше в этом файле вообще пхп кода никакого другого не предвидится. только дизайн страници хтмл.

    Код (Text):
    1.      
    2.  
    3. <?php
    4.       $oshibka = $_GET['error'];
    5. ?>     
    6.  
    7. <?php
    8.       echo $oshibka."\n";
    9. ?>
     
  2. creage

    creage Активный пользователь

    С нами с:
    12 мар 2008
    Сообщения:
    131
    Симпатии:
    0
    Адрес:
    Киев
    эээ, ну куча способов: сессии; запросом в гете; записать в файл потом прочитать...
     
  3. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Тут никого нет, все ушли в ЖЖЖ
     
  4. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Pit-Bull
    1)Помещай PHP-код не в блок Code а в блок PHP, при чем вначале скрипта обязательно открывай дескриптор <?php
    2)Хм... А на message_notsend.php точно переход поулчается вида /message_notsend.php?error=что-то ? Возможно, у тебя не определена переменная $reason, или в переменной $redirect нет $reason ?
     
  5. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    1. Будьсделнвашвысокблагородье. Весь по струнке, носом к солнцу.
    2. Точно. Получается такой переход. Только без что-то. Просто /message_notsend.php?error= и конец строки адреса на этом.
    Поподробнее, как определить эти переменные. Я просто интуитивно переделываю готовый скрипт отправки. В пхп знаю ничто, вплоть до далёк от его азбуки. Тем не менее прошу сдуть щёки, преодолеть презренье, многим другим областям понзнания я владычественный повелитель, а здесь нужно разово решить единичный вопрос создания формы отправки своими силами, без претензий на всезнайство и мировое господство. Прошу помощи, в этом интересном вопросе.

    Как передать данные одного массива из одного пхп файла, в другой пхп/хтмл файл и вывести там его на экран.
    Можно просто привести банальный отвлечённый пример синтаксиса, не вникая в перепетии моего скрипта.

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

    ЗЫ: кстати \©/ - это не стаканчик с колой а тонущий человек воздевший ручки к верху, прогнувшаяся под гирей палка, критический момент в игровом автомате pinbal, или банальный гиперволновой перемодулятор фазового потока высокочастотного излучения для секретного спутника шпиона модификации КЦ/9у, в общем полная зависть члену по фрейду. Прости за эту самую смешную шутку в мире.
     
  6. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36

    PHP:
    1. <?php
    2. // файл 1.php
    3. $_SESSION['reason'] = array(1, 2, 3, 4, 5);
    4.  
    5. ?>
    PHP:
    1. <?php
    2. // файл 2.php
    3. $error = $_SESSION['reason'];
    4. print_r($error);
    5. ?>
    Код (Text):
    1.  
    2. http://site.home/1.php
    3. http://site.home/2.php
     
  7. Sergey89

    Sergey89 Активный пользователь

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    А кто мешает обработать ошибку на этой же странице?
    Это, честно говоря, решение через жопу в данном случае. Если же не одумаешься, то втыкай про сессии http://php.net/session
     
  8. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Интересно получается... Где-то человек просто молодец, например: не пришлось объяснять что разделение кода от представления это есть хорошо... сам дошел. Это плюс '+'. А вот банальных истин не понимает... это минус'-'.
    Pit-Bull, читайте мануал товарищ. Мне почему-то кажется что у Вас все получится.
     
  9. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    Вполне возможно что так оно и есть.
    Изначально, я и пробовал сделать именно через НЕ жопу.
    Конкретно, если оставить всё как есть, то скрипт работает идиально, всё отправляет, всё выводит.
    Но написан он так - что по умолчанию выводит он сообщение об ошибке в выстраиваемую самим скриптом хтмл страницу. страница напрочь лишена дизайна. просто белый фон, пустое пространство и сообщения об отправке/ошибке.

    а нужно - что бы тоже самое значение выводилось на странице, с таким же дизайном как и форма отправки, как и весь остальной сайт.

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

    Посему было решено передавать данные в другую страницу и там их выводить.
    К тому же в описании самого скрипта присутствует возможность данную функцию включить.
    Только не написанно как передавать данные.

    Так что:
    1. данные обрабатывающим форму скриптом собираются и выводтся идиально самим собой, в случае отсутствия перехода на отдельную страницу об ошибке.
    2. переход на страницу в случае ошибки/успеха отправки переходит замечательно.

    как передать данные в эту страницу. сейчас буду пытаться вышеизложенным примером.
     
  10. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    1 Вопрос.
    а как правильно записать, если переменная reason УЖЕ собрала в себя все данные, и 1,2,3,4, вручную мне задать её ненужно.
    быть может в таком случае мне понадобиться что-то типа

    PHP:
    1. <?php
    2. // файл 1.php
    3. $_SESSION['peredacha'] = array($reason);
    4.  
    5. ?>
    PHP:
    1. <?php
    2. // файл 2.php
    3. $error = $_SESSION['peredacha'];
    4. print_r($error);
    5. ?>
     
  11. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Тогда в помощь конструкция:
    PHP:
    1. <?php
    2. $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason;
    3. ?>
     
  12. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    Пока поробовал тот вариант что предлагал сам выше.

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

    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] => )
     
  13. Elkaz

    Elkaz Старожил
    Команда форума Модератор

    С нами с:
    26 июн 2006
    Сообщения:
    3.373
    Симпатии:
    0
    Адрес:
    Баку, Азербайджан
    Pit-Bull
    Заголовки, установки сессии/куки, должны быть установлены до первого вывода (любого) в браузер.
    В данном случае, интепретатор сообщает, что вы уже отправили заголовки на 10 строке файла message_error, и пытаетесь это сделать еще раз на 80-ой строке. Лучше всего, объявлять сессии в самом начале файла.
     
  14. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    и в том и в другом случае одинаковое сообщение
    по адресу файл2 лайн 80 находится строчка session_start();.

    PHP:
    1.  
    2. <?php
    3.  $error = $_SESSION['reason'];
    4.  print_r($error);
    5.  ?>
    6.  
    файл 1 такой.
    PHP:
    1.  
    2. <?php
    3. ...
    4.          if ($missing_fields_redirect) {
    5.              session_start();
    6.              $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason;
    7.             header ("Location: $missing_fields_redirect");
    8.             exit;
    9. ...
    10. ?>
    В данном случае происходит проверка, если заданно значение $missing_fields_redirect, в котором содержиться адрес перехода на отдельную задизайненную страницу об ошибке Вида http://mysite.ru/message_error.php
    тогда работает редирект, если значение не задано - то скрипт там дальше может сам работать и выводить в чистую белую страницу нужные данные.
     
  15. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    В обоих файлах я убрал из кода открытие сессии и установил его самой первой строчкой.
    PHP:
    1.  
    2. <?php
    3. ?>
    Сообщение об ошибке действительно пропало. но вместо него ничего не появилось. Опять выводится пустота.
     
  16. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    разумно, теперь добавь в самое начало скриптов:
    error_reporting(E_ALL);

    ЗЫ: Хотя и разумно, но все же стоит не забывать: куда и когда запускать механизм сессий. Заметьте, что php по умолчанию не делает авто-запуск сессий... стоит задуматься: почему?
     
  17. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    О боги. Добейте... Что он от меня теперь хочет???

    Код (Text):
    1.  
    2. Notice: Undefined variable: separator in /home/uХХХХ/mysiteru/www/message.php on line 49
    3.  
    4. Notice: Undefined variable: newline in /home/uХХХХ/mysiteru/www/message.php on line 52
    5.  
    6. Notice: Undefined offset: 2 in /home/uХХХХ/mysiteru/www/message.php on line 120
    7.  
    8. Notice: Undefined index: HTTP_REFERER in /home/uХХХХ/mysiteru/www/message.php on line 122
    9.  
    10. Notice: Undefined offset: 1 in /home/uХХХХ/mysiteru/www/message.php on line 123
    11.  
    12. Notice: Undefined offset: 1 in /home/uХХХХ/mysiteru/www/message.php on line 124
    13.  
    14. Notice: Undefined offset: 1 in /home/uХХХХ/mysiteru/www/message.php on line 99
    15.  
    16. Notice: Undefined variable: required in /home/uХХХХ/mysiteru/www/message.php on line 283
    17.  
    18. 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:
    1.  
    2. <?php
    3. // This is because I originally had it require but too many people
    4. // were used to Matt's Formmail.pl which used required instead.
    5. if ($required)
    6.    $require = $required;
    7. // handle the required fields
    8. if ($require) {
    9.    // seperate at the commas
    10.    $require = ereg_replace( " +", "", $require);
    11.    $required = split(",",$require);
    12.    for ($i=0;$i<count($required);$i++) {
    13.       $string = trim($required[$i]);
    14.       // check if they exsist
    15.       if((!(${$string})) || (!(${$string}))) {
    16.          // if the missing_fields_redirect option is on: redirect them
    17.          if ($missing_fields_redirect) {
    18.              $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason;
    19.             header ("Location: $missing_fields_redirect");
    20.             exit;
    21.          }
    22.          $require;
    23.          $missing_field_list .= "<b>Заполните данные: $required[$i]</b><br>\n";
    24.       }
    25.    }
    26.    // send error to our mighty error function
    27.    if ($missing_field_list)
    28.       print_error($missing_field_list,"missing");
    29. }
    30. ?>
    31.  
    32. <?php
    33. ...
    34. // our mighty error function..
    35. function print_error($reason,$type = 0) {
    36.    build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet);
    37.    // for missing required data
    38.    if ($type == "missing") {
    39.       if ($missing_field_redirect) {
    40.          header ("Location: $missing_field_redirect");
    41.          exit;
    42.       } else {
    43.       ?>
    44.       Форма Вашего послания не прошла подтверждение ввиду следующих причин:
    45.       <p>
    46.      
    47. <ul>
    48.       <?
    49.       echo $reason."\n";
    50.       ?>
    51. </ul>
    52. ...
    53. ?>
    54.  
    55.  

    весь код этого скрипта открыт ТУТ http://www.dtheatre.com/scripts/
    скачать сразу - http://www.dtheatre.com/scripts/formmail_files/formmail.v50.zip
     
  18. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Pit-Bull
    Были бы рядом - добил, честное слово.

    Перевожу:
    Замечание: Переменная не определена, но используется: $separator (где...)

    Замечание: Нет элемента массива с индексом "2": (где ...)

    Замечание: то же самое, только индекс уже другой

    Внимание: Не могу отправить заголовок с помощью функции header() - мы уже отослали браузеру все header().

    По последней ошибке Вам уже указывали что не так:
     
  19. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    Действительно, указал 2 раза открытие сессии по ошибке. Одно в начала, второе в месте вывода принимаемых данных. Удалил второе открытие.
    Значение в принимающем файле никакое не выводится по прежнему.
     
  20. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    Но но но. Токо без жертв. )
     
  21. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    По делу говорите, а то я уже одной ногой на жд вокзале
     
  22. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    По делу. Вот код. Он должен передавать данные собранные в одном файле для вывода в другом файле. Он неработает.
    Бьюсь как рыба об лёд уже много дней... Помогите отправить данные из одного файла в другой.

    файл 1 передаёт (строка 18 и 44)
    PHP:
    1.  
    2. <?php
    3. ...
    4. // This is because I originally had it require but too many people
    5. // were used to Matt's Formmail.pl which used required instead.
    6. if ($required)
    7.    $require = $required;
    8. // handle the required fields
    9. if ($require) {
    10.    // seperate at the commas
    11.    $require = ereg_replace( " +", "", $require);
    12.    $required = split(",",$require);
    13.    for ($i=0;$i<count($required);$i++) {
    14.       $string = trim($required[$i]);
    15.       // check if they exsist
    16.       if((!(${$string})) || (!(${$string}))) {
    17.          // if the missing_fields_redirect option is on: redirect them
    18.          if ($missing_fields_redirect) {
    19.              $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason;
    20.             header ("Location: $missing_fields_redirect");
    21.             exit;
    22.          }
    23.          $require;
    24.          $missing_field_list .= "<b>Заполните данные: $required[$i]</b><br>\n";
    25.       }
    26.    }
    27.    // send error to our mighty error function
    28.    if ($missing_field_list)
    29.       print_error($missing_field_list,"missing");
    30. }
    31. ...
    32. ?>
    33.  
    34. ...
    35. и тут тоже поставил
    36. ...
    37.  
    38. <?php
    39. // our mighty error function..
    40. function print_error($reason,$type = 0) {
    41.    build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet);
    42.    // for missing required data
    43.    if ($type == "missing") {
    44.       if ($missing_field_redirect) {
    45.          $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason;
    46.          header ("Location: $missing_field_redirect");
    47.          exit;
    48.       } else {
    49.       ?>
    50.  
    убрать в обоих местах, поставить в обоих местах или оставить только в каком-то одном предложенную строку
    $_SESSION['reason'] = isset($_SESSION['reason']) ? $_SESSION['reason'] : $reason;
    работоспособности не добавляет


    файл 2 принимает,
    простите, не то написал. исправил.
    PHP:
    1.  
    2. <?php
    3.  $error = $_SESSION['reason'];
    4.  echo $error;
    5.  print_r($error);
    6.  ?>
    7.  
    это весь пхп код который только есть в этом принимающем файле, кроме открытия сессии вверху.
    никакие переменные в принимающем файле как видете не определены и я не знаю как их определять и надо ли.


    в самом начале обоих файлов красуется
    PHP:
    1.  
    2. <?php
    3. ?>
    4.  
     
  23. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    может если так не работает... может действительно сбросить значения в тхт файл в одном скрипте и проситать его другим скриптом для вывода на экран в нужном месте отформатированной хтмл страницы?
     
  24. topas

    topas Активный пользователь

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    а разница? Ошибки-то у Вас останутся те же... Надо фиксить существующие
     
  25. Pit-Bull

    Pit-Bull Активный пользователь

    С нами с:
    1 апр 2008
    Сообщения:
    18
    Симпатии:
    0
    Адрес:
    Орёл
    честно говоря, я уже в отчаянии...
    знали бы вы СКОЛЬКО вариантов перестановок мест слагаемых я перепробовал... :((
    никогда так долго и безрезультатно проблема не мучила ни один мой проект...
     
Статус темы:
Закрыта.