0

我不断收到此错误,我尝试在实际数组、句点周围加上引号,但没有任何效果。

解析错误:语法错误,意外的 T_ENCAPSED_AND_WHITESPACE,在第 8 行需要 T_STRING 或 T_VARIABLE 或 T_NUM_STRING

$id = $_GET['id'];
$record = "SELECT `Name`, `Type`, `Size`, `Content` FROM election_candidates WHERE `ID` = '$id'";
$result = $db->query($record);

foreach ($result as $results) {
    header("Content-length: $results['Size']");  <---Line 8
    header("Content-type: $results['Type']");
    header("Content-Disposition: attachment; filename=$results['Name']");

    // echo $results['Size'];

    echo $results['Content'];
}

exit();
4

5 回答 5

1

尝试复杂(卷曲)语法简单语法连接运算符

// Added isset() and intval()
$id = isset($_GET['id']) ? intval($_GET['id']) : 0;
// Removed quotes from 'id'=...
$record = "SELECT `Name`, `Type`, `Size`, `Content` FROM election_candidates WHERE `ID` = $id";
$result = $db->query($record);

foreach ($result as $results) {
    // complex (curly) syntax
    header("Content-length: {$results['Size']}");
    // simple syntax (without quotes)
    header("Content-type: $results[Type]");
    // using concatenation operator
    header('Content-Disposition: attachment; filename='.$results['Name']);

    // echo $results['Size'];

    echo $results['Content'];
}

exit();

此外,您应该转义$_GET['id'],并且在 MySQL 中您不需要为整数加上引号。我已经在上面的代码中纠正了这两个“问题”。

您还可以添加LIMIT 1到 SQL 查询并删除foreach循环;)

于 2012-04-04T13:23:33.843 回答
1

由于键是文字字符串,您可以删除内部引号:

header("Content-length: $results[Size]");

请参阅简单语法部分中的示例。

于 2012-04-04T13:36:09.470 回答
0

代替

header("Content-length: $results['Size']");

你必须写

header("Content-length: ".$results['Size']);

或者

header("Content-length: {$results['Size']}");

你必须在第 9 行和第 10 行做同样的事情

于 2012-04-04T13:23:54.893 回答
0

您不能在插值字符串中使用数组下标。你有两个选择:

'Content-Length: ' . $results['Size']
"Content-Length: {$results['Size']}"
于 2012-04-04T13:24:12.033 回答
0

由于您将数组访问器嵌套在字符串中,因此我认为您需要以下语法:

"Content-length: {$results['Size']}"
于 2012-04-04T13:24:39.307 回答