2015-04-28 6 views
-1

Можно ли запустить выполнение php-файла из другого php-файла при выполнении действия? Более конкретно, у меня есть якорь, сгенерированный с эхом, который имеет href для файла pdf. Помимо загрузки pdf, я хочу вставить некоторую информацию в таблицу. Вот мой код, который не работает:Выполнение php-файла из другого php-файла

require('./database_connection.php'); 
    $query = "select author,title,link,book_id from book where category='".$_REQUEST['categorie']."'"; 
    $result = mysql_query($query); 
    $result2 = mysql_query("select user_id from user where username='".$_REQUEST["username"]."'"); 
    $row2 = mysql_fetch_row($result2); 
    while($row= mysql_fetch_row($result)) 
    { 
     echo '<h4>'.$row[0].' - '.$row[1].'</h4>'; 
     if(isset($_SESSION["username"]) && !empty($_SESSION["username"])) 
     { 
      echo '<input type="hidden" name="id_carte" value="'.$row[3].'">'; 
      echo '<input type="hidden" name="id_user" value="'.$row2[0].'">'; 
      echo ' <script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
        <script language="javascript"> 
        function insert_download() { 
        $.ajax({ 
        type: "GET", 
        url: "insert_download.php" , 
        success : function() { 
        location.reload(); 
        } 
        }); 
        } 
        </script> 
        <a onclick="insert_download()" href="'.$row[2].'" download> download </a>'; 
        } 

И вот insert_download.php:

<?php 
require('./database_connection.php'); 
$query = "insert into download(user_id,book_id,date)values(". 
      $_REQUEST["id_carte"].",". 
      $_REQUEST["id_user"].",". 
      date("Y-m-d h:i:s").")"; 
mysql_query($query,$con); 
mysql_close($con); 
?> 

Может кто-нибудь помочь мне с этим? Благодаря!

+0

любая ошибка, которую вы получаете? –

+0

У меня нет ошибки, она просто не работает для выполнения insert_download.php. Я использовал предупреждение, чтобы проверить, выполняется ли функция, и все в порядке, поэтому я думаю, проблема связана с частью ajax. – Irina

+0

проверить с помощью консоли, что он вызывает ваш файл, а не ... просто эхо ваш запрос в файл и проверяется с выходом консоли. –

ответ

0

Почему бы не использовать перенаправление вместо «сложного» AJAX?

<!-- in your first document --> 
echo '<input type="hidden" name="id_carte" value="'.$row[3].'">'; 
echo '<input type="hidden" name="id_user" value="'.$row2[0].'">'; 
echo '<a href="download_pdf.php?redirect=' . $row[2] .'">download</a>'; 

и download_pdf.php

<?php 
require('./database_connection.php'); 
... 
mysql_close($con); 

header("location: " . $_GET['redirect']); 
+0

Я тоже пробовал, он не работает. Кроме того, мне нужно, чтобы файл исполнялся каждый раз при загрузке pdf-файла, что означает каждый раз, когда пользователь нажимает на якорь – Irina

0

Вы не хватает базовых навыков отладки. Если бы я был ты, я должен:

  1. Используйте браузер, который поддерживающий, например: Chrome с «Network» вкладка готового

  2. Постарайтесь нажмите на ссылке <a onclick="insert_download()" ... и увидеть проверки, если запрос Аякса выполняется (через закладку «Проверка сети» с вашего хрома). Если нет, то повторно проверить сгенерированные JS, в противном случае, что-то не так с download_pdf.php, следовать на следующем шаге

  3. Проверка download_pdf.php: включить отчеты об ошибках в начале (поставил error_reporting(E_ALL); и ini_set('display_errors', 1); на верхней части файла) пытаются вторя что-то до и/или после любой строки, которую вы подозреваете, что приводит к ошибкам. Затем вы можете увидеть эти ответы ajax на вкладке «Проверка сети» ... Поступая таким образом, вы намерены сузить, какая строка/область кода вызывает проблему.

Обратите внимание, что «эхо» можно избежать, если у вас есть надежная среда разработки, поддерживающая отладчик.

Надеется, что это может помочь

1

Как я правильно понимаю, вы хотите, чтобы отобразить ссылку, и когда пользователь нажимает на эту ссылку,

  • некоторых данные вставляются в базу данных или что-то;
  • пользователь видит диалоговое окно загрузки, позволяющее ему загружать файл?

Если это правильно, вы можете использовать этот код:

На веб-странице:

<a href="result.php?file=dummy.pdf">download</a> 

result.php:

<?php 

$file = isset($_GET['file']) ? $_GET['file'] : ""; 

?> 
<!DOCTYPE html> 
<html> 
    <head> 
     <title>Downloading...</title> 
     <script type="text/javascript"> 

     function redirect(url) { 
      //window.location.replace(url); 
      window.location.href = url; 
     } 

     </script> 
    </head> 
    <body> 
     Download is starting... 
     <script type="text/javascript"> 

     redirect("http://example.com/download.php?file=dummy.pdf"); 

     </script> 
    </body> 
</html> 

скачать.php:

<?php 

$file = isset($_GET['file']) ? $_GET['file'] : "nullfile"; 
$file_url = "download_dir_or_something/".$file; 

// Put some line in a log file... 
file_put_contents("logfile.txt", "successful on ".date("Y-m-d H:i:s")."\n", FILE_APPEND); 
// ...or anything else to execute, for example, inserting data into a database. 

header("Content-Type: application/octet-stream"); 
header("Content-Transfer-Encoding: Binary"); 
header("Content-disposition: attachment; filename=\"".basename($file_url)."\""); 
readfile($file_url); 

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