引号不在阵列的正确位置

时间:2012-04-04 13:21:32

标签: php header

我一直收到这个错误,我尝试在实际数组周围加上引号,句号,没有任何效果。

解析错误:语法错误,意外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();

5 个答案:

答案 0 :(得分:1)

尝试complex (curly) syntaxsymple syntaxconcatenation operator

// 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循环;)

答案 1 :(得分:1)

由于密钥是文字字符串,因此您可以删除内部引号:

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

请参阅simple syntax部分中的示例。

答案 2 :(得分:0)

而不是

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

你必须写

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

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

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

答案 3 :(得分:0)

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

'Content-Length: ' . $results['Size']
"Content-Length: {$results['Size']}"

答案 4 :(得分:0)

由于您在字符串中嵌套数组访问器,我认为您需要这种语法:

"Content-length: {$results['Size']}"