Jump to content
  • 0

Чудо письмо...


Bolmazov
 Share

Question

Я даже сейчас не знаю что думать, куда писать, у кого спросить совета по такой нелепой проблеме:

На сайте есть форма. Форма отправляется письмом на почту. В форме поле "Модель автомобиля". При тестировании мной (во всех поп-браузерах) значение этого поля в письме содержит название модели. А заказчик говорит, что ему приходят письма где значением этого поля является какое-то число... ЧТО ЗА НА..?! Голову сломал!!!

ВОПРОС: Почему это происходит и как это исправить?!

Пример нормальной формы:

Ф.И.О.: Пупкин Андрей 
Контактный телефон: 8-900-000-8-000
Модель автомобиля: PANDA 4x4 CLIMBING
Желаемая дата тест-драйва: бла-бла-бла
Наиболее удобное для вас время: с 11 до 22

Пример косячной формы:

Ф.И.О.: Пупкин Андрей 
Контактный телефон: 8-900-000-8-000
Модель автомобиля: 4
Желаемая дата тест-драйва: бла-бла-бла
Наиболее удобное для вас время: с 11 до 22

И УБЕДИТЕЛЬНАЯ ПРОСЬБА, НЕ СПАМТЕ ПОЖАЛУЙСТА ФОРМУ!

да... и код обработки формы, если поможет:

if($_POST['send']) {
$fio = substr(htmlspecialchars(trim($_POST['fio'])), 0, 100);
$tel = substr(htmlspecialchars(trim($_POST['tel'])), 0, 100);
$model = substr(htmlspecialchars(trim($_POST['model'])), 0, 100);
$date = substr(htmlspecialchars(trim($_POST['date'])), 0, 50);
$time = substr(htmlspecialchars(trim($_POST['time'])), 0, 20);

$title = "Заявка на тест-драйв от {$fio}";
$mess = "
Ф.И.О.: {$fio}
Контактный телефон: {$tel}
Модель автомобиля: {$model}
Желаемая дата тест-драйва: {$date}
Наиболее удобное для вас время: {$time}";

mail("to@me.com", $title, $mess);
header("Refresh: 2; /");
echo("<p>Письмо отправлено. Перенаправление...</p>");
}

Edited by Bolmazov
Link to comment
Share on other sites

Recommended Posts

  • 0

Код добавил в мой первый пост (как раз в тот момент когда ты писал свой).

:)

И пожалуйста, не надо отправлять мне пустые формы, да сейчас, в тестовых целях, они отсылаются.

Edited by Bolmazov
Link to comment
Share on other sites

  • 0
Дебажте, отправляйте форму сразу на 2 адреса, если будет разница в письмах копайте егошный почтовик, если нет, то дебажте снова

+1 подозрение на почтовик начальства :)

Link to comment
Share on other sites

  • 0

а я бы посоветовал искать косячный браузер.

Судя по всему браузер отправляет 4, вместо наименования модели. А скрипт просто берет и отправляет то, что прислал ему браузер.

Может какой-то браузер не поддерживает кириллицу в значениях option и вместо правильного значения шлет номер выбранного option?

Link to comment
Share on other sites

  • 0
а я бы посоветовал искать косячный браузер.

Судя по всему браузер отправляет 4, вместо наименования модели. А скрипт просто берет и отправляет то, что прислал ему браузер.

Может какой-то браузер не поддерживает кириллицу в значениях option и вместо правильного значения шлет номер выбранного option?

В том то и дело что там не кирилица, я тож так в начале подумал, мож с кодировкой проблемы , и т.д. посмотрел, а там всё на латинице

Link to comment
Share on other sites

  • 0

Позвольте и мне внести свое скромное мнение, быть может я ошибаюсь, но:

substr() возвращает часть строки str, начинающуюся с позиции start длиной length. Строка начинается с нуля. Так для строки "абвгдежз", позиции 0 соответствует символ "а", 2 - "в". Если третий аргумент не указан, то возвращается вся оставшаяся часть строки.

Пример кода

<?php

$string = substr("Hello, world!", 7, 1);

echo($string);

?>

Результатом выполнения этого скрипта будет символ w. Если же третий параметр не указан, то возвратится подстрока "world!".

$model = substr(htmlspecialchars(trim($_POST['model'])), 0, 100);

Edited by rus
Link to comment
Share on other sites

  • 0
Позвольте и мне внести свое скромное мнение, быть может я ошибаюсь, но:

$model = substr(htmlspecialchars(trim($_POST['model'])), 0, 100);

всё правильно, только к чему ты всё это ?

эта хрень берёт первые 100 символов строки. всё должно умещаться

Link to comment
Share on other sites

  • 0
всё правильно, только к чему ты всё это ?

эта хрень берёт первые 100 символов строки. всё должно умещаться

Да, вижу что 100, но мало ли... может лагает что-то.

Тут как говорится все варианты хороши, когда не знаешь за что браться.

Edited by rus
Link to comment
Share on other sites

  • 0
Да, вижу что 100, но мало ли... может лагает что-то.

Тут как говорится все варианты хороши, когда не знаешь за что браться.

С таким подходом карты Таро будут более эффективны :)

Link to comment
Share on other sites

  • 0
С таким подходом карты Таро будут более эффективны :)

Да ладно, хочешь сказать что у тебя такого никогда не было?

Когда вроде как все проверил-перепроверил и вроде все должно работать... но не работает, а ошибка буквально под носом и что самое интересное в какой-то мелочи. :)

Link to comment
Share on other sites

  • 0
Да ладно, хочешь сказать что у тебя такого никогда не было?

Когда вроде как все проверил-перепроверил и вроде все должно работать... но не работает, а ошибка буквально под носом и что самое интересное в какой-то мелочи. :)

бывало, но лучшей способ это не в панике по 300 раз ступориться на одних и тех же мелочах, а отойти и отвлечься(пивка попить :) ), а потом уже новым свежим взглядом продолжить.

Link to comment
Share on other sites

  • 0
бывало, но лучшей способ это не в панике по 300 раз ступориться на одних и тех же мелочах, а отойти и отвлечься(пивка попить :) ), а потом уже новым свежим взглядом продолжить.

+1 Плус адын © AMD :)

Link to comment
Share on other sites

  • 0

Стыдно сказать, но пока не знаю. Как было предложено в одном из первых постов, добавил свой ящик в копию и когда у них вновь повториться косяк - сравним результаты. Если будут результаты - сообщу.

Link to comment
Share on other sites

  • 0

ВОПРОС: Почему это происходит и как это исправить?!

Вы попробуйте посмотреть что у вас приходит в масиве $_POST, в форме просто укажите другой файл с таким кодом:

echo '<pre>'.var_dump($_POST).'</pre>';

или

echo '<pre>'.print_r($_POST).'</pre>';

Если все верно приходит виноват не скрипт :(

Edited by Mot
Link to comment
Share on other sites

  • 0
Вы попробуйте посмотреть что у вас приходит в масиве $_POST, в форме просто укажите другой файл с таким кодом:

echo '<pre>'.var_dump($_POST).'</pre>';

или

echo '<pre>'.print_r($_POST).'</pre>';

Если все верно приходит виноват не скрипт :(

Да я бы не стал вскрывать мозги здесь если бы не проделал таких шагов :(

В IE6,7,8, F, S, O переменные $_POST['model'] и $model совпадают.

Edited by Bolmazov
Link to comment
Share on other sites

  • 0

Если я правильно понял у вас раньше было примерно так:

<select gtbfieldid="20" name="model">
<option value="1">Выберите модель </option>
<option value="2">BRAVO</option>
<option value="3">PANDA</option>
<option value="4">PANDA 4x4 CLIMBING</option>
<option value="5">GRANDE PUNTO 3D</option>
<option value="6">GRANDE PUNTO 5D </option>
<option value="7">ALBEA</option>
<option value="8">CROMA</option>
<option value="9">DOBLO PANORAMA</option>
<option value="10">DOBLO CARGO</option>
<option value="11">DUCATO</option>
<option value="12">SEDICI</option>
</select>

Где value = id_машини

В вашем коде:

if($_POST['send']) {
$fio = substr(htmlspecialchars(trim($_POST['fio'])), 0, 100);
$tel = substr(htmlspecialchars(trim($_POST['tel'])), 0, 100);
$model = substr(htmlspecialchars(trim($_POST['model'])), 0, 100);
$date = substr(htmlspecialchars(trim($_POST['date'])), 0, 50);
$time = substr(htmlspecialchars(trim($_POST['time'])), 0, 20);

$title = "Заявка на тест-драйв от {$fio}";
$mess = "
Ф.И.О.: {$fio}
Контактный телефон: {$tel}
Модель автомобиля: {$model}
Желаемая дата тест-драйва: {$date}
Наиболее удобное для вас время: {$time}";

mail("to@me.com", $title, $mess);
header("Refresh: 2; /");
echo("<p>Письмо отправлено. Перенаправление...</p>");
}

Вы просто отправляете id_машини, а не ее название.

Я прав? Если да - можно создать массив из наименования машин и по пришедшему значению id брать ее название.

Сейчас у вас вот так:

<select gtbfieldid="20" name="model">
<option value="Выберите модель">Выберите модель </option>
<option value="BRAVO">BRAVO</option>
<option value="PANDA">PANDA</option>
<option value="PANDA 4x4 CLIMBING">PANDA 4x4 CLIMBING</option>
<option value="GRANDE PUNTO 3D">GRANDE PUNTO 3D</option>
<option value="GRANDE PUNTO 5D">GRANDE PUNTO 5D </option>
<option value="ALBEA">ALBEA</option>
<option value="CROMA">CROMA</option>
<option value="DOBLO PANORAMA">DOBLO PANORAMA</option>
<option value="DOBLO CARGO">DOBLO CARGO</option>
<option value="DUCATO">DUCATO</option>
<option value="SEDICI">SEDICI</option>
</select>

Так в чем проблема, или она уже решена?

Edited by Mot
Link to comment
Share on other sites

  • 0

Числовое value было давным давно. Вариант не подходил т.к. список клиентом мог расширяться (у них был штатный знайка html'я), а php править они не могли (и не должны) и value стало дублировать контент. Основной мой пос как раз о том, что хоть value и дублирует контент иногда приходят цифры!

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

На данный момент эта идея хоть и бред, но дает конечную причину. Хотелось бы надеется, что таких серферов в природе нет и причина в другом.

(иначе придется палить их и отнимать возможность размножения для исключения таких фриков из генофонда человечества :( )

Edited by Bolmazov
Link to comment
Share on other sites

  • 0
Основной мой пос как раз о том, что хоть value и дублирует контент иногда приходят цифры!

Хоть вы и привели пример скритпа, вы не показали кусок скрипта который формирует список выбора наименования.

Вариант не подходил т.к. список клиентом мог расширяться (у них был штатный знайка html'я), а php править они не могли (и не должны).

Как вариант: через файлы. 1 файл правится(добавляется наименования), а скрип парсит и создает массив с которым потом работает.

ЗЫ: Вот

Edited by Mot
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy