if (isset ($ _ POST ['submit'])) дважды не работает второй раз - PullRequest
0 голосов
/ 11 марта 2011

Я вырываю волосы. У меня было это работает раньше.

My confirm.php проверяет переменные из формы предыдущей страницы. Затем повторите их, чтобы зритель мог подтвердить ответы. Если все выглядит хорошо, они могут щелкнуть изображение PayPal name="submit", и он снова проходит через isset и отправляет mail() и обновляет URL-адрес для действия формы, а затем публикует переменные в PayPal с помощью некоторого кода JavaScript, с которым я получил помощь ранее.

EDIT: Я загружаю более упрощенный код:

страница form.php:

<form action="test.php" method="post">
    Name: <input type="text" name="name" value=""/>
    <input type="submit" name="send" value="send"/>
</form>

Confirm.php:

<?
ini_set("display_errors","2");
ERROR_REPORTING(E_ALL);

$url = '';
    if (isset($_POST['send']))
        {
            $data = $_POST['name'];
        }else{ 
            echo "SEND is not Set";
        }


    if (isset($_POST['submit']))
        {
            $data = $_POST['data'];
            $my_message = ' TEST DATA:<br/><br/>Child Name'. $data .'';
            $subject = 'Mike TEST';
            $headers = "From: mrawers@xxxx.com\r\n";
            $headers .= "Reply-To: mrawers@xxxx.com\r\n";
            $headers .= "Content-type: text/html\r\n";

            $url = "https://www.paypal.com/cgi-bin/webscr";

            mail("mike.rawers@xxxx.com",$my_message,$subject,$headers);
        }else{ 
            echo "SUBMIT is not Set";
        }
?>
<html>
<head>
</head>

<body>

<form action="<? echo $url; ?>" method="post">
    Name:   <? echo $data; ?><input type="hidden" name="data" value="<? echo $data; ?>"/><br/><br/>
<input type="submit" value="submit" name="submit">
</form>
<?
if ($url != "") {
?>
<script language="javascript">
document.forms[0].submit();
</script>
<?
}else{ echo "URL NOT SET";}
?>
</body>
</html>

Ответы [ 3 ]

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

Когда ваша форма отправляется, она устанавливает переменные в $_POST как

$_POST['Submit_x']  $_POST['Submit_y']

Вот почему ваше состояние каждый раз терпит неудачу.

Вы проверяете с помощью $_POST['submit'] PHP учитывает регистр символов имен переменных.

1 голос
/ 11 марта 2011
value="<? echo $data; ?>"?

Это плохая практика.если $data содержит двойные кавычки, это нарушит вашу форму.Таким образом, слепая выдача предоставленных пользователем данных - это именно то, как происходят атаки XSS.Вы должны иметь, как минимум:

value="<?php echo htmlspecialchars($data) ?>">

, что сохранит вашу форму без изменений.

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

Ваш тег отправки написан с заглавной буквы 'S':

<input type="image" src="https://www.paypal.com/en_US/i/btn/btn_paynowCC_LG.gif" border="0" name="Submit" alt="PayPal - The safer, easier way to pay online!">

, но ваш PHP проверяет строчную букву "submit".На дополнительном примечании я бы добавил скрытое поле с именем submit, старые IE не предоставляют значение кнопки отправки (по крайней мере, не input type="submit", хотя и не знают о input type="image")

<input type="hidden" name="submitted" value="1"> 

в вашей проверке PHP для

 if (intval($_POST['submitted']) > 0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...