if(isset($_POST['submit'])) дважды не работает второй раз

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

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

РЕДАКТИРОВАТЬ: Я загружаю более упрощенный код:

страница 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 ответа

Решение

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

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

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

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

value="<? echo $data; ?>"?

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

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

который будет держать вашу форму в целости и сохранности.

Ваш тег отправки написан с большой буквы "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 не предоставляют значение кнопки submit (по крайней мере, не input type="submit" не знаю о input type="image" хоть)

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

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

 if (intval($_POST['submitted']) > 0)
Другие вопросы по тегам