从另一个php文件

时间:2015-04-28 14:55:26

标签: javascript php

执行操作时,我可以从另一个php文件触发php文件的执行吗?更具体地说,我有一个用echo生成的锚,它有一个pdf文件的href。除了下载pdf我想在表格中插入一些信息。这是我的代码,但不起作用:

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

任何人都可以帮我吗?谢谢!

3 个答案:

答案 0 :(得分: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>

<强>的download.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);

?>

答案 1 :(得分:0)

为什么不使用重定向而不是&#34;复杂&#34; 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']);

答案 2 :(得分:0)

您缺乏调试的基本技能。如果我是你,我应该:

  1. 使用支持的浏览器,例如:Chrome with&#34; Network&#34;检查标签准备

  2. 点击链接<a onclick="insert_download()" ...,查看是否正确执行了ajax请求(通过Chrome中的网络检查标签)。如果没有,请重新检查生成的js,否则download_pdf.php出现问题,请按照下一步操作

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

  4. 请注意&#34;回声&#34;如果你有一个支持调试器的可靠IDE,可以避免技巧。

    希望它可以提供帮助