2015-04-28 101 views
-1

执行操作时,能否触发另一个php文件执行php文件?更具体地说,我有一个用echo生成的锚点,它有一个PDF文件的href。除了下载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。我已经使用alert来验证函数是否被执行,并且没问题,所以我猜想问题在于ajax部分。 – Irina

+0

检查控制台,它调用你的文件not..just在文件中回显你的查询,并检查控制台输出。 –

回答

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

你缺乏调试的基本技能。如果我是你,我应该:如果执行Ajax请求的Chrome“网络”检查标签准备

  • 链接<a onclick="insert_download()" ...试穿点击并查看:

    1. 使用浏览器,支持,前正确(通过网络检查标签从你的铬)。如果没有,再检查生成的JS,否则,一些错误的download_pdf.php,请按照下一步

    2. 检查download_pdf.php:打开错误的开始报告(放error_reporting(E_ALL);ini_set('display_errors', 1);你的文件的顶部)尝试呼应的东西在您怀疑会导致错误的任何行之前和/或之后。然后,您可以从网络检查选项卡中看到这些ajax响应...通过这样做,您将缩小代码的哪一行/范围导致该问题。

    请注意,如果您有支持调试器的坚实IDE,则可避免“回声”技巧。

    希望它可以帮助

  • 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); 
    
    ?>