-1

我使用 href 将参数从一页传递到另一页但出现错误。注意:未定义的索引:/var/www/html/download/get_file.php 中的 $table 第 3 行错误!查询失败:

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 3 行的“WHERE id = 1”附近使用正确的语法

我想将href中的表名传递给其他脚本来执行它,所以我有很多表。

希望这能解释我想要什么。

 href='get_file.php?id={$row['id']}&$table'>Download

这是我的代码

<?php

if(isset($_POST["dropdown"]))

{
$table = $_POST['dropdown'];
// Connect to the database
$dbLink = new mysqli('localhost', 'sqldata', 'sqldata', 'balhaf');
if(mysqli_connect_errno()) {
die("MySQL connection failed: ". mysqli_connect_error());
}
// Query for a list of all existing files
$sql = "SELECT id, name, mime, size, created FROM $table";
$result = $dbLink->query($sql);
// Check if it was successfull
if($result) {
// Make sure there are some files in there
if($result->num_rows == 0) {
    echo '<p>There are no files in the database</p>';
}
else {
    // Print the top of a table
    echo '<table border="1" align="center">
          <H2 align="center"> Report Table</H>
            <tr>
                <td><b>Name</b></td>
                <td><b>Mime</b></td>
                <td><b>Size (bytes)</b></td>
                <td><b>Created</b></td>
                <td><b>Download</b></td>

            </tr>';

    // Print each file
    while($row = $result->fetch_assoc()) {
        echo "
            <tr>
                <td>{$row['name']}</td>
                <td>{$row['mime']}</td>
                <td>{$row['size']}</td>
                <td>{$row['created']}</td>
                <td><a style='text-decoration:none;' href='get_file.php?id=   {$row['id']}&$table'>Download</a></td>
            </tr>";
    }

    // Close table
    echo '</table>';
    }

    // Free the result
    $result->free();
    }
   else
   {
   echo 'Error! SQL query failed:';
   echo "<pre>{$dbLink->error}</pre>";
    }
  // Close the mysql connection
  $dbLink->close();

  }
  ?>

我的第二个代码 get_file.php

<?php

$table =$_GET['$table'];

// Make sure an ID was passed
if(isset($_GET['id'])) {
// Get the ID
$id = intval($_GET['id']);

// Make sure the ID is in fact a valid ID
if($id <= 0) {
    die('The ID is invalid!');
}
else {
    // Connect to the database
    $dbLink = new mysqli('localhost', 'sqldata', 'sqldata', 'accounts');
    if(mysqli_connect_errno()) {
        die("MySQL connection failed: ". mysqli_connect_error());
    }

    // Fetch the file information
    $query = "
        SELECT mime, name, size, data
        FROM $table
        WHERE id = {$id}";
    $result = $dbLink->query($query);

    if($result) {
        // Make sure the result is valid
        if($result->num_rows == 1) {
        // Get the row
            $row = mysqli_fetch_assoc($result);

            // Print headers
            header("Content-Type: ". $row['mime']);
            header("Content-Length: ". $row['size']);
            header("Content-Disposition: attachment; filename=". $row['name']);

            // Print data
            echo $row['data'];
        }
        else {
            echo 'Error! No image exists with that ID.';
         }

        // Free the mysqli resources
        @mysqli_free_result($result);
        }
        else {
        echo "Error! Query failed: <pre>{$dbLink->error}</pre>";
        }
        @mysqli_close($dbLink);
        }
        }
        else {
        echo 'Error! No ID was passed.';
        }
        ?>
4

3 回答 3

1

在 href 中使用双引号,因为内部带有变量的单引号按字面意思解析,就好像没有变量一样。或者像使用 $row['id'] 一样使用 {}。

顺便说一句,巨大的风险!

于 2013-08-22T01:39:21.550 回答
1

将您的链接更新为href='get_file.php?id={$row['id']}&table=$table'- 这样您实际上在查询字符串中就有了正确的名称/值对。

然后在第二个文件中,使用$table =$_GET['table'],而不是$table =$_GET['$table'].

正如其他人所指出的,您的代码存在许多安全问题。您需要重新考虑构建查询的方法。

于 2013-08-22T01:44:25.940 回答
0

问题来了。。

$table =$_GET['$table']; 

它应该是

$table =$_GET['table'];

为此,您的此代码:href='get_file.php?id= {$row['id']}&$table'>

应该改成这个代码:href='get_file.php?id={$row['id']}&table={$table}'>

你的问题就解决了。。

注意:mysql_* 现在已经贬值了。所以最好使用 mysqli_* 或 PDO

于 2013-08-22T01:49:42.477 回答