Почему этот код отправки адреса электронной почты не работает с Opera и Internet Explorer? - PullRequest
2 голосов
/ 31 июля 2009

Я только что обнаружил форму сохранения адреса электронной почты на моем веб-сайте не работает в Opera и Internet Explorer (7 во всяком случае) и, возможно, в других браузерах. Прекрасно работает с Firefox. К сожалению, я не разработчик и больше не общаюсь с парнем, который написал код для формы, поэтому я не знаю, как это исправить. Я предполагаю, что проблема связана с кодом ниже:

<?php
    $str = '';

    if (isset($_POST['submit']))
    {
        if(!eregi("^[[:alnum:]][a-z0-9_.-]*@[a-z0-9.-]+\.[a-z]{2,4}$", $_POST['email'])) {
            $str = "<span style='color: red'>Not a valid email address</span>";
        } else {
            $file = 'emails.txt';
            $text = "$_POST[email]\n";

            if (is_writable($file)) {
                if (!$fh = fopen($file, 'a')) {
                    exit;
                }

                if (fwrite($fh, $text) === FALSE) {
                    exit;
                }

                fclose($fh);
            }
            header('Location: thankyou.html');
        }
    }
?>

а затем бит тела:

<form action="index.php" method="post">
    <input type="text" name="email" style="width: 250px;" />
    <input type="image" src="img/button-submit.png" name="submit" value="Submit" style="position: relative; top: 5px; left: 10px" />
</form>

<?php echo $str ?>

Кто-нибудь испытывает жалость к беспомощному не-dev и знает, что здесь не работает?

Ответы [ 7 ]

2 голосов
/ 31 июля 2009

Это вызвано тем фактом, что вход отправки имеет тип 'изображение'. При отправке IE7 возвращает только координаты x и y клика.

Это должно сработать:

Заменить:

if (isset($_POST['submit']))

С:

if (isset($_POST['submit']) || isset($_POST['submit_x']))
1 голос
/ 31 июля 2009

Это проблема на основе браузера

в вашей форме вы использовали <input type="image" />

IE не передает пары имя / значение для ввода типа изображения, вместо этого он только отправляет пары key_x / value_x и key_y / value_y

Вы, вероятно, хотите использовать <input type="submit" /> в качестве замены / дополнения, поскольку это полностью поддерживается во всех типах браузеров (подумайте также о текстовых браузерах, пожалуйста, я все еще использую их.)

0 голосов
/ 31 июля 2009

Включите в форму скрытое поле, которое будет действительным и присутствует только в том случае, если вы отправите форму. Что-то вроде:

<input type="hidden" name="checkemail" value="1" />

Затем в вашем PHP измените условие if для проверки этой конкретной переменной:

<?php
    $str = '';

    if (isset($_POST["checkemail"]))
    {
        //-- rest of your code
    }
?>

Это позволит вам сохранить изображение в качестве кнопки отправки и работать в разных браузерах, которые отличаются тем, как они отправляют значение, если оно вообще есть, имени кнопок типа изображения.

0 голосов
/ 31 июля 2009

Я знаю, что это не решит твою проблему, но мне не нравится строка:

$text = "$_POST[email]\n";

Разве это не плохая практика? Я годами не использовал PHP, но я думаю, что вы должны изменить его на

$text = $_POST['email'] . "\n";

или что-то в этом роде. Использование $_POST[email] без кавычек вокруг ключа массива заставляет PHP сначала искать константу с именем «email». Только не найдя его, он преобразует email в строку, а затем извлекает значение из ассоциативного массива. Просто потерял мощность процессора.

0 голосов
/ 31 июля 2009

Предполагая, что php в вашем коде находится в том же файле, что и форма ... вы можете попробовать добавить имя вашего php-файла в действие формы.

<form action="" method="post">

... становится ...

<form action="name_of_php_file" method="post">
0 голосов
/ 31 июля 2009

Ваш form элемент самозакрыт. Удалите в конце тега /, и он должен работать. (Э-э, это может работать. В любом случае, не должно быть косой черты.)

0 голосов
/ 31 июля 2009

К сожалению, ошибка, если она вообще есть, будет между браузером и сервером, а не PHP. Если бы вы могли предоставить некоторые детали, такие как HTML-форма, которая не работает в IE7, мы могли бы помочь вам больше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...