У меня есть страница загрузки файлов, где я хочу, чтобы люди, загружающие мой файл, заполняли форму. Форма выглядит следующим образом:
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" name="download">
<tr>
<td width='30%' class="left">Your name</td>
<td width='70%'><input name="name" type="text" value=""></td>
</tr>
<tr>
<td class="left">Your organisation</td>
<td><input name="organisation" type="text" value=""></td>
</tr>
<tr>
<td class="left">The place your map will cover</td>
<td><input name="area" type="text" value=""></td>
</tr>
<tr>
<td class="left">Your email</td>
<td><input name="email" type="text" value=""></td>
</tr>
<tr>
<td class="left"> </td>
<td><input name="MM_load" type="hidden" value="download">
<input style="margin-top: .8em" type="submit" class="button" value="Download Now"></td>
</tr>
</form>
В PHP до HTML у меня есть:
if ((isset($_POST['MM_load']))&&($_POST['MM_load']=='download')) {
$organisation = mysqli_real_escape_string($db, stripslashes($_POST['organisation']));
$area = mysqli_real_escape_string($db, stripslashes($_POST['area']));
$name = mysqli_real_escape_string($db, stripslashes($_POST['name']));
$email = mysqli_real_escape_string($db, stripslashes($_POST['email']));
$query_insert = "INSERT INTO downloads (organisation, area, name, email) VALUES ('$organisation', '$area', '$name', '$email')";
$result = $db->query($query_insert) or die($db->error.__LINE__);
echo "<script>window.getElementsByClassName('dl_link').click();</script>";
$insertGoTo = "thanks.php";
echo "<script type='text/javascript'>window.location.href='".$insertGoTo."'</script>";
}
Затем в теле страницы находится ссылка для скачивания:
<a style="visibility:hidden" class="dl_link" href="https://example.com/defib-package/defib.1.1.zip" download></a>
Цель:
Пользователь заполняет форму и нажимает кнопку Загрузить сейчас.
Страница перезагружается и вставляет данные в базу данных.
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 1052]. 1023 *
Затем пользователь перенаправляется на страницу благодарности. php страница.
Шаги 1, 2 и 4 работают, но 3 - нет.
Я пытался изменить ссылку на скачивание, чтобы ее можно было щелкнуть вручную. Это тогда работает. Я попытался поместить PHP (включая встроенный javascript) в заголовок страницы, который не помогает. Я новичок в javascript, поэтому я ожидаю, что проблема лежит там, но это код, который я скопировал из другого ответа о переполнении стека. Откуда мне go отсюда?
РЕДАКТИРОВАТЬ в ответ на ответ coredo. Coredo помог мне добиться определенного прогресса, но я еще не там. Тайм-аут работает хорошо, но я получаю «Uncaught TypeError: window.getElementById не является функцией» в консоли для щелчка по ссылке. Я поменял класс на id и поместил его в функцию, но все попытки выдают что-то по одной линии. Мой последний код:
$insertGoTo = "thanks.php";
echo "<script type='text/javascript'>
alert('Just starting');
function dl() {window.getElementById('dl_link').click();}
dl();
alert('Part way');
setTimeout(function(){ window.location.href='".$insertGoTo."' }, 5000);
</script>";
РЕДАКТИРОВАТЬ 2 Взломали его!
getElementById не работает с элементом окна. Его пришлось изменить на документ.
Похоже, что щелчок пытался выполнить до создания DOM. Так что я завернул его в window.onload. Окончательная форма скрипта:
$ insertGoTo = "спасибо. php"; echo "window.onload = function () {document.getElementById ('dl_link'). click ();} setTimeout (function () {window.location.href = '". $ insertGoTo. "'}, 2000);" ; }