За последние 24 часа нас посетили 20256 программистов и 1694 робота. Сейчас ищут 1852 программиста ...

Не отправляется функция в пиьсме

Тема в разделе "PHP для новичков", создана пользователем BoB, 20 авг 2009.

  1. BoB

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

    С нами с:
    22 мар 2009
    Сообщения:
    19
    Симпатии:
    0
    Здравствуйте.

    Я на сайте сделал форму отправки заказа по почте с помощью formmail. Дописал функцию которая бы отправляла номер письма на почту и отображалась при успешной отправки письма на страничке.

    PHP:
    1. $f = fopen('number.txt', 'r');
    2. $n = fgets($f);
    3. fclose($f);
    4. $fw = fopen('number.txt', 'w+');
    5. $n++;
    6. fputs ($fw, $n);
    7. fclose($fw);
    Добавляю строчку чтобы оно отображалось на страничке


    PHP:
    1.         if (send_mail()) {
    2.             if (isset($form['redirect'])) {
    3.                 if (isset($form['redirect_values']))
    4.                     header('Location: ' . $form['redirect'] . '?' . getenv('QUERY_STRING') . "\r\n");
    5.                 else
    6.                     header('Location: ' . $form['redirect'] . "\r\n");
    7.             } else {
    8.                 if (!isset($form['title']))
    9.                     $form['title'] = 'PHPFormMail - Form Results';
    10.                                                                                    $output = "<h1>Ваш заказ был отправлен.</h1><b>Номер заказа : </b>".$n."\n";
    11.                 reset($form);
    12.                 while (list($key,$val) = each($form)) {
    13.                     if ((!$in_array_func($key,$invis_array)) && ((isset($form['print_blank_fields'])) || ($val))) {
    14.                         $output .= '<div class="field"><b>';
    15.                         if(($use_field_alias) && ($form['alias_method'] != 'email'))
    16.                             $output .= htmlspecialchars($fieldname_lookup[$key]);
    17.                         else
    18.                             $output .= htmlspecialchars($key);
    19.                         if ((isset($form['hidden'])) && ($in_array_func($key,$form['hidden'])))
    20.                             $output .= ":</b> <i>(hidden)</i></div>\n";
    21.                         else
    22.                             $output .= ':</b> ' . nl2br(htmlspecialchars(stripslashes($val))) . "</div>\n";
    23.                     }
    24.                 }
    25.                 if (isset($form['return_link_url']) && isset($form['return_link_title']))
    26.                     $output .= '<div class="returnlink"><a href="' . $form["return_link_url"] . '">'. $form["return_link_title"] . "</a></div>\n";
    27.                 output_html($output);
    28.             }
    29.         }
    Все замечательно отображается.

    Добавляю строчку чтобы оно отправлялось в письме, приходит только

    "Below is the result of your feedback form. It was submitted by
    Номер заказа :"

    Без самого номера

    PHP:
    1.  $mailbody = 'Below is the result of your feedback form.  It was submitted by' . $mail_newline . 'Номер заказа : '. $n;
    2.  
    3.     if (isset($realname))
    4.         $mailbody.= $realname . ' (' . $form['email'] . ') on ' . $mail_date . $mail_newline . $mail_newline ;
    5.     else
    6.         $mailbody.= $form['email'] . ' on ' . $mail_date . $mail_newline . $mail_newline ;
    7.        
    8.     reset($form);
    Подскажите как сделать чтобы номер приходил на почту?

    Спасибо.
     
  2. kokopelli

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

    С нами с:
    18 авг 2009
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    -то..
    Боюсь, этих кусков недостаточно. Вроде ясно, что $n у тебя при отправке не имеет правильного значения, но почему это происходит - ч.з. Как эти куски сопряжены между собой, и что между ними находится? Попытайся отследить изменения $n.

    Кстати, зачем ты в первом фрагменте открываешь в моде w+ ? Вполне достаточно w. Излишества вредны.. А лучше открыть один раз r+, прочитать, потом rewind($f), потом ftruncate($f,0), записать новое n, закрыть файл. Дважды открывать не вижу смысла.
     
  3. BoB

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

    С нами с:
    22 мар 2009
    Сообщения:
    19
    Симпатии:
    0
    Сначала идет кусок кода об отправке письма, а затем уже о вывода странички с информацией. Тоесть значение $n тут не причем, оно по идее не изменяется между этими кусками.

    А про начало...учусь =)
     
  4. kokopelli

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

    С нами с:
    18 авг 2009
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    -то..
    - проверь это. Сделай echo $n или запиши его в файл..
     
  5. kokopelli

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

    С нами с:
    18 авг 2009
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    -то..
    $n не может быть ни при чем. Сделай $n=12345; непосредственно перед первой строкой последнего фрагмента. Если это значение не придет - я тебе поверю.
     
  6. BoB

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

    С нами с:
    22 мар 2009
    Сообщения:
    19
    Симпатии:
    0
    =) Действительно теперь на почту приходит 12345 а на страничке отправки $n из файла =)
     
  7. kokopelli

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

    С нами с:
    18 авг 2009
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    -то..
    Ищи, где теряешь $n (или где не устанавливаешь).
    Используй дополнительную печать при отладке.
     
  8. BoB

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

    С нами с:
    22 мар 2009
    Сообщения:
    19
    Симпатии:
    0
    Интересный факт =) Вставил этот код

    PHP:
    1. $f = fopen('number.txt', 'r');
    2.  $n = fgets($f);
    3.  fclose($f);
    4.  $fw = fopen('number.txt', 'w');
    5.  $n++;
    6.  fputs ($fw, $n);
    7.  fclose($fw);
    Сразу перед кодом отправки на почту(раньше он был в самом начале скрипта), и теперь на страничке отправки не видно номера, но в письме его видно =)
     
  9. BoB

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

    С нами с:
    22 мар 2009
    Сообщения:
    19
    Симпатии:
    0
    Добавил функцию

    PHP:
    1.  $f = fopen('number.txt', 'r');
    2.   $n = fgets($f);
    3.   fclose($f);
    Перед выводом сообщения и он выводит например номер 3048, а на почту приходит 3049
     
  10. kokopelli

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

    С нами с:
    18 авг 2009
    Сообщения:
    42
    Симпатии:
    0
    Адрес:
    -то..
    Где-то кто-то увеличивает n. Если тебе это не нужно - ищи, где и кто)).
    Где стоит твой код увеличения $n? Не после этого чтения?
     
  11. BoB

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

    С нами с:
    22 мар 2009
    Сообщения:
    19
    Симпатии:
    0
    Код стоит сразу перед кодом отправки. Если я не добавляю эти 3 строчки, то число нормально увеличивается на 1, но не отображается в страничке об отправки. Эти строчки ведь не могут увеличивать:/ они только читают переменную:/
     
  12. BoB

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

    С нами с:
    22 мар 2009
    Сообщения:
    19
    Симпатии:
    0
    Ура получилось =)) Я добавил эту строчку в начало кода

    PHP:
    1.  $f = fopen('number.txt', 'r');
    2.   $n = fgets($f);
    3.   fclose($f);
    4.   $fw = fopen('number.txt', 'w');
    5.   $n++;
    6.   fputs ($fw, $n);
    7.   fclose($fw);

    и добавил эту
    PHP:
    1.  $f = fopen('number.txt', 'r');
    2.    $n = fgets($f);
    3.    fclose($f);
    Перед кодом об отправке, и число теперь и там и там нормальное =)


    Спасибо =)