2015-12-23 3 views
0

как сделать гиперссылку для загрузки загружаемого файла и к тому же он обновит свою базу данных?HTML-гиперссылка с событием onclick Javascript

На данный момент я могу скачать файл, но он не изменит статус файла.

Вот мой код

<a href="reports/<?php echo $row['file']; ?>" target="_blank" onclick="return runMyFunction();">Docx</a> 

<script type="text/javascript"> 
    Cufon.now(); 
    function runMyFunction() { 
     <?php 
      mysql_query("update report_upload set status=1 from report_upload where year='$year' AND area='$area'",$conn);  
     ?> 
     return true; 
    } 
</script> 

try1 .html

<form id='login' action='adminReportDownload.php' method='POST' enctype='multipart/form-data'> 
                  <input type="hidden" value="<?php echo $area;?>" name="yeara"> 
                  <input type="hidden" value="<?php echo $year; ?>" name="yeary"> 
                  <input type="hidden" value="<?php echo $abc123; ?>" name="abc123"> 
                  <input type="submit" name="submit" id="submit" value="Download"> 
                  </form> 

.php

$a = $_POST['yeara']; 
$b = $_POST['yeary']; 
$c = $_POST['abc123']; 
$file_path = 'reports/'.$c; 
$sqlABC = "UPDATE report_upload SET status='1', usedBy='$sesId' where year='$b' AND area='$a' "; 
$eviABC = mysql_query($sqlABC, $conn); 

header("location: reports/$c"); 
+0

Вы можете использовать событие onunload JavaScript и выполнить запрос ajax. – www139

ответ

0

Поскольку РНР на стороне сервера, она выполняется, прежде чем ваш браузер отображает ваши веб-страница. Таким образом, ваша функция JavaScript runMyFunction содержит только инструкцию return true;.

Тем более, что попытка выполнить серверные операции с клиентской стороны - плохая идея, лучшим решением может быть ссылка на страницу PHP, которая отправляет файл и одновременно обновляет базу данных.

Для дальнейшего чтения this question about PHP readfile может быть полезно.

+0

вот так? Я редактирую код, при попытке части. Хотя он может обновить статус, но он не может его загрузить –

+0

@NurfarahadibahShapiee Это выглядит правильно. Что вы подразумеваете, не загружая? Является ли вызов заголовка не перенаправлением? – Hatchet

+0

действительно, если по гиперссылке, когда пользователь нажимает на нее, она автоматически загружает загруженный файл. –

0

вы можете достичь этого, отправив запрос на сервер, когда щелкните по ссылке.

  1. на EventHandler, предотвратить поведение по умолчанию e.preventDefault(); e.stopPropagation()
  2. написать метод Ajax, чтобы отправить запрос на разъединить
  3. на ServerSide, обновить базу данных, запись в файл интерфейса.
+0

вот так? Я редактирую код, при попытке части. Хотя он может обновлять статус, но он не может загрузить его –

+0

, вам нужно изменить заголовок ответа на «Content-Disposition», «attachment; filename = \ "" + "xxx \" "' – Sean

Смежные вопросы