使用<;时不显示PHP图像;img>;

使用<;时不显示PHP图像;img>;,php,image,Php,Image,我发现很多帖子都描述了同样的问题,但我尝试的一切都失败了。 对于个人资料页,我让人们可以上传4张图片。当没有可用图片时,我希望显示默认图片。我的完整代码如下所示: $id = $_GET['ID']; $link = mysql_connect("xxx", "xxx", "xxx"); mysql_select_db("xxx"); $sql = "SELECT * FROM profielen WHERE ID = $id"; $result = mysql_query("$sql"); $

我发现很多帖子都描述了同样的问题,但我尝试的一切都失败了。 对于个人资料页,我让人们可以上传4张图片。当没有可用图片时,我希望显示默认图片。我的完整代码如下所示:

$id = $_GET['ID'];
$link = mysql_connect("xxx", "xxx", "xxx");
mysql_select_db("xxx");
$sql = "SELECT * FROM profielen WHERE ID = $id";
$result = mysql_query("$sql");
$row = mysql_fetch_assoc($result);
mysql_close($link);

header("Content-type: image/jpeg");

if ($row['Foto4'] == NULL){
    //echo '<img src="/img/noImage.jpg" />';
    echo $row['Foto5'];
}
else {
    echo $row['Foto4'];
}
$id=$\u GET['id'];
$link=mysql_connect(“xxx”、“xxx”、“xxx”);
mysql_select_db(“xxx”);
$sql=“从profielen中选择*,其中ID=$ID”;
$result=mysql_查询($sql”);
$row=mysql\u fetch\u assoc($result);
mysql_close($link);
标题(“内容类型:图像/jpeg”);
if($row['Foto4']==NULL){
//回声';
echo$row['Foto5'];
}
否则{
echo$row['Foto4'];
}
在这种形式下,代码是有效的,因此我知道if语句是正确的。 当我尝试取消注释注释行时,它显示一个断开的链接作为图像

我尝试过使用双引号,然后在img标记中转义双引号。我还尝试将其作为变量调用,并且在img路径之前不使用/。而且还试图说echo“没有图像”,但似乎如果我做了echo$row[x]以外的任何事情,它就是不起作用。当我尝试用HTML显示图像时,效果很好,因此文件名是正确的


我没什么主意了,也许有人能帮上忙?

如果使用内容类型
image/jpeg
,浏览器需要图像的原始二进制数据。相反,您为它提供HTML代码

您可以改为使用
位置
-标题,它告诉浏览器打开另一个地址

header("Location: /img/noImage.jpg");

请记住,如果使用此方法,则无法输出任何其他数据或写入任何其他标题。

代码的问题在于,您发送HTML是为了将图像嵌入回,而实际上,您应该将图像数据发送回。您可以通过将用户重定向到“noImage.jpg”来解决这个问题,这样用户将从请求中获得一个图像,一切都会很好:)

这方面的代码可能如下所示:

if ($row['Foto4'] == NULL){
    header('Location: /image/noImage.jpg');
} else {
    echo $row['Foto4'];
}

mysql扩展已被删除。。。您根本不做任何错误检查或处理。。。你的代码允许sql注入…Foto5和Foto4包含什么?你应该输出二进制文件,而不是HTML。我不小心写了“重定向:”而不是“位置:”,修复了那个可怕的错误。啊,那太糟糕了。如果投票人发表了评论或提出了编辑意见,会更有帮助。:)哇,我太傻了,我已经在另一页上用过了,所以我应该知道这一点。谢谢!我是如此专注于图像的事情,以至于我没有看到这一点。您为我节省了更多的搜索时间:-)