Я использую PHP для составления формы HTML для отправки по электронной почте. Например, у меня есть такой код:
$userOutput .= '<input type="hidden" id="seenUser" name="seenUser" value="'.$lastUsername.'">';
$userOutput .= '<input type="hidden" id="seenToken" name="seenToken" value="'.$userToken.'">';
Когда это электронное письмо поступает в мой почтовый ящик, если я использую инспектор кода Firefox, элементы отображаются следующим образом:
<input type="hidden" id="x_683480324seenUser" name="seenUser" value="someUsername">
<input type="hidden" id="x_683480324seenToken" name="seenToken" value="6ed3738a6e20f56f83ec83d9ef77a169">
Почемузначения атрибута id имеют префиксы x_683480324
?
На странице, предназначенной для получения отправки формы, я использую:
if (isset($_POST['seenUser'])&&isset($_POST['seenToken'])) {
... и это, очевидно, не удается из-за учетной записинепредсказуемого префикса.
Длинная версия
Вот форма, как она появляется в моей веб-почте. Очевидно, что onSubmit
был добавлен моим провайдером веб-почты. Представляется разумным заключить, что изменения в значении form
id
, а также в моем вопросе - значения input
id
- вероятно, также были изменены поставщиком веб-почты.
<form id="x_-381141859birdsSeen" action="https://www.MYDOMAIN.com.au/MYPAGE.php" method="post" onsubmit="return window.confirm("You are about to send information to an external page. Do you want to continue?");" target="_blank">
<h4>Pacific Baza <input type="checkbox" name="pacbaz1" value="pacbaz1"></h4>
2019-10-23 - <a href="https://www.OBFUSCATED.org/" target="_blank">AU-NSW-KRG</a>
<br>
<h4>Whiskered Tern <input type="checkbox" name="whiter2" value="whiter2"></h4>
2019-10-22 - <a href="https://www.OBFUSCATED.org/" target="_blank">AU-NSW-NEW</a>
<br>
<input type="hidden" id="x_-381141859seenUser" name="seenUser" value="OBFUSCATED">
<input type="hidden" id="x_-381141859seenToken" name="seenToken" value="8c1865d190e5a11d2cfe548224bf8d56">
<input type="submit" value="Seen them!">
</form>
Перед тем, как получить лекцию, я понимаю, что, возможно, не все почтовые провайдеры будут поддерживать использование формы в электронной почте. Как бы то ни было, эта форма работает , когда я изменяю свою проверку параметров $ _POST (по сравнению с кодом, приведенным в приведенном выше вопросе), следующим образом:
foreach($_POST as $postName=>$postValue) {
echo 'PostVar: '.$postName.'<br />';
if (substr($postName, -8)==='seenUser'&&strlen($postName)>8) { // The POST variable name is longer than 8 chars and the last 8 chars are 'seenUser'
$postedSeenUser = $postValue; // assign the convoluted variable's value to our nice simple name
}
if (substr($postName, -9)==='seenToken'&&strlen($postName)>9) { // The POST variable name is longer than 9 chars and the last 9 chars are 'seenToken'
$postedSeenToken = $postValue; // assign the convoluted variable's value to our nice simple name
}
if ($postName==='seenUser') $postedSeenUser = $postValue; // Just in case the variable arrives with nice clean name as desired
if ($postName==='seenToken') $postedSeenToken = $postValue; // Just in case the variable arrives with nice clean name as desired
} // And now our variables should contain nice neat seenUser and seenToken values if they existed in some convoluted manner.
if (isset($postedSeenUser)&&isset($postedSeenToken)) {
Хотявозможно, именно эти два последних утверждения «поймать простое дело» и приведут вышеописанное к работе, остается вопрос: почему в первую очередь не сработало следующее:
if (isset($_POST['seenUser'])&&isset($_POST['seenToken'])) {