Эхо обратно из PHP включает файл не работает в IE - PullRequest
1 голос
/ 06 марта 2011

У меня есть простая форма, которая публикует информацию о регистрации в учетной записи mailchimp.Форма и сообщения из файла включения отлично работают в Firefox, но в IE ничего не происходит.Если адрес электронной почты не введен, он должен вернуться с ошибкой, как в Firefox.Я понятия не имею, как решить эту проблему.Если есть ошибка, она должна отобразить ошибку в div в форме, которая снова отлично работает в Firefox, и ничего не происходит в IE.Это не имеет никакого смысла для меня.Мне нужно, чтобы это работало сегодня.Я попытался переместить файлы в то же место, что и index.php, изменил разрешения и т. Д., Но безуспешно.Мне нужна серьезная помощь!Я даже не могу заставить этот кусок кода вернуться в IE: if (! $ _ GET ['email']) {return "Адрес электронной почты не указан";}

Вы можете попробовать форму по адресу: www.terrybryan.com/index.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
        <title>Ajax Mailing List Sign Up System</title>
        <link type="text/css" rel="stylesheet" href="css/default.css" />

    </head>

    <body>
        <form id="signup" action="<?=$_SERVER['PHP_SELF']; ?>" method="get" style="width:250px;">
          <fieldset>

              <label for="email" id="email-label">Email Address</label>
              <input type="text" name="email" id="email" />


              <label for="zipcode" id="zipcode-label">Zip Code</label>
              <input type="text" name="zipcode" id="zip" />

               <label for="events" id="events-label">Receive future info from us?</label>
               Yes<input type="radio" name="events" value="Yes" checked="checked" />
               No<input type="radio" name="events" value="No" />

               <label for="hearabout" id="hearabout-label">How did you hear about us?</label>
               <select name="hearabout" id="hearabout">
<option value="Ice">Ice</option>
<option value="Radio">Radio</option>
<option value="Friend">Friend</option>
<option value="Door Hanger">Door Hanger</option>
</select>
            <br /><br />
              <input type="image" src="i/join.jpg" name="submit" value="Join" class="btn" alt="Join" />
              <br /><br />
            <div id="response">
                <? require_once 'store-address.php'; if($_GET['submit']){ echo storeAddress(); } ?>
              </div>
          </fieldset>
        </form>    

        <!-- Some fancy Ajax stuff to store the sign up info. If you don't want to use it, just delete it and the form will still work  -->

    </body>
</html>

, и вот файл включения, из которого возвращается сообщение:

<?php
/*///////////////////////////////////////////////////////////////////////
Part of the code from the book 
Building Findable Websites: Web Standards, SEO, and Beyond
by Aarron Walter (aarron@buildingfindablewebsites.com)
http://buildingfindablewebsites.com

Distrbuted under Creative Commons license
http://creativecommons.org/licenses/by-sa/3.0/us/
///////////////////////////////////////////////////////////////////////*/
require_once('MCAPI.class.php');

function storeAddress(){

    // Validation
    if(!$_GET['email']){ return "No email address provided"; } 

    if(!preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*$/i", $_GET['email'])) {
        return "Email address is invalid"; 
    }


    // grab an API Key from http://admin.mailchimp.com/account/api/
    $api = new MCAPI('********');

    // grab your List's Unique Id by going to http://admin.mailchimp.com/lists/
    // Click the "settings" link for the list - the Unique Id is at the bottom of that page. 
    $list_id = "********";

    // Merge variables are the names of all of the fields your mailing list accepts
    // Ex: first name is by default FNAME
    // You can define the names of each merge variable in Lists > click the desired list > list settings > Merge tags for personalization
    // Pass merge values to the API in an array as follows
    $mergeVars = array('ZIPCODE'=>$_GET['zipcode'],
                        'EVENTS'=>$_GET['events'],
                        'HEARABOUT'=>$_GET['hearabout']);

    if($api->listSubscribe($list_id, $_GET['email'], $mergeVars) === true) {
        // It worked!   
        return 'Success! Check your email to confirm sign up.';
    }else{
        // An error ocurred, return error message   
        return 'Error: ' . $api->errorMessage;
    }

}

// If being called via ajax, autorun the function
//if($_GET['ajax']){ echo storeAddress(); }
?>

Кто-нибудь знает, почему эта простая форма не будет работать в IE, как в Firefox и других браузерах?

Спасибо,

T Bryan

Ответы [ 4 ]

2 голосов
/ 06 марта 2011

И вот почему: при использовании кнопки изображения в IE, когда вы нажимаете на нее, вместо отправки $_POST['nameofbutton'], она отправляет $_POST['nameofbutton_x'] и $_POST['nameofbutton_y'].Теперь Firefox отправляет как $_POST['nameofbutton_x'] и $_POST['nameofbutton_y'], так и $_POST['nameofbutton'].Значения _x и _y хранят координаты x и y того места, где вы щелкнули кнопку изображения, поэтому вы можете делать разные вещи в зависимости от того, где пользователь щелкнул, чтобы сделать что-то вроде карты изображения.

Итак, когда выпроверить на if($_GET['submit']){ echo storeAddress(); } ?> вы не получите его в IE, потому что IE не имеет $_GET['submit'], у него есть $_GET['submit_x'] и $_GET['submit_y'], поэтому вы должны проверить на $_GET['submit_x'] или y.

НаименееЯ думаю, что формат был _x и _y, может немного отличаться.Простой способ узнать это: print_r($_GET);

О, к тому же, кстати, будьте осторожны, используя Get для форм, особенно если они должны передавать много потенциально длинной информации, IE имеет как 255 символовпредел в адресной строке и все, что после этого будет обрезано и оставлено из $ _GET или искажено.Лучше всего использовать Post для форм.Get действительно хорош только для таких вещей, как структурирование ссылок для контроллера CMS или регистрационных ссылок для проверки электронной почты и тому подобное.

1 голос
/ 06 марта 2011

Я хотел бы предложить очень простой подход, стилизовать вашу кнопку с помощью CSS или сделать <a href="javascript:;" onclick="document.yourformname.submit"><img src="path/to/your/image" alt="my image button" /></a>

1 голос
/ 06 марта 2011

Я предлагаю изменить ваш HTML-код для отправки:

От:

<input type="image" src="i/join.jpg" name="submit" value="Join" class="btn" alt="Join" />

Кому:

<input type="submit" name="submit" value="Join" class="btn" alt="Join" />

тип отправки, как правило, надежен, другие типы (включая, к сожалению, отправку изображений и т. Д.) Часто реализуются по-разному в разных браузерах. Другой вещью, на которую нельзя положиться, является содержание submit, т. Е. В некоторых случаях отправка html вместо значения (обычно с вещами, отличными от стандартного значения submit), или отправка нескольких форм на странице, что раздражает.

Так что, в общем, лучше пойти с простым <input type='submit' ...etc, и пойти с простой проверкой -presence- отправки и не быть слишком конкретным в том, что содержит представление.

0 голосов
/ 06 марта 2011

Поскольку PHP работает на сервере, он должен (обычно) предоставлять одинаковый ответ браузеру для того же ввода.Поскольку форма использует метод «get», входные данные полностью определяются URL-адресом (плюс заголовки, включая файлы cookie, хотя здесь они не учитываются).

В любом случае, когда вы отправляетеВ форме из Firefox вы должны увидеть, что URL-адрес отправленной формы появляется в адресной строке Firefox.Если PHP-скрипт выдает перенаправление в качестве ответа, то URL-адрес может появиться только на короткое время.В любом случае, он должен быть доступен в истории вашего браузера.

Если вы можете скопировать этот URL-адрес в адресную строку IE и отправить тот же запрос от IE (опять же, при условии, что файлы cookie не задействованы), тогда выдолжен получить почти такой же ответ от сервера.Если вы не видите то же самое в окне браузера IE, как в Firefox, это может быть вызвано несколькими причинами.

  1. Просмотр источника.(Просмотр -> Просмотр источника).Если он полностью пуст, сценарий, вероятно, не был выполнен правильно.

  2. Если у вас есть доступ к журналам ошибок сервера, проверьте сообщение об ошибке, относящееся к вашему запросу.Разумная реализация PHP (в сотрудничестве с здравомыслящим сервером) обеспечит ведение журнала ошибок.Иногда это действительно единственный способ узнать, что происходит с вашим сценарием.Если у вас есть доступ к веб-серверу через учетную запись FTP, вы, вероятно, найдете журналы на верхнем уровне или рядом с ним.

  3. Если у вас нет доступа к серверу, вывсе еще можно получить низкоуровневое представление о том, что происходит с вашим запросом, с помощью Firebug Lite или Fiddler2 .

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