我正在学习php和mysqli。我编写了一个程序,允许用户将名称和图像上传到数据库。他们可以单击数据库中的姓名,然后单击姓名,他们将看到该人的照片。
下面是我的 PHP 文件。一切正常,只是图像不显示。当我点击一个名字时,我看到的只是一个带有问号的蓝色框。有人可以看看我的代码并给我一些关于如何解决这个问题的提示吗?谢谢!
主文件
<?php
//Turn on error reporting
ini_set('display_errors', 'On');
//Connects to the database
$mysqli = new mysqli("abc", "abc","abc", "abc");
if($mysqli->connect_errno){
echo "Connection error: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.11.1/jquery.validate.js"></script>
<script>$(document).ready(function() {$("form").validate();});</script>
<title>Homework</title>
<meta charset="UTF-8">
<p></p>
</head>
<body>
<div>Homework</div>
<p></p>
<div>
<form method="post" action="index.php" enctype="multipart/form-data">
Celebrity Name: <input type="text" name="c_name">
Celebrity Photo: <input type="file" name="c_picture">
<input type="submit" name="add" value="Upload">
</form>
</div>
<br>
<div>
<table>
<tr>
<td>See below for a list of celebrities in our database</td>
</tr>
<?php
//Display names in the celebrity database
if(!($stmt = $mysqli->prepare("SELECT c_id, c_name FROM celebrity"))){
echo "Prepare failed: " . $stmt->errno . " " . $stmt->error;
}
if(!$stmt->execute()){
echo "Execute failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error;
}
if(!$stmt->bind_result($c_id, $c_name)){
echo "Bind failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error;
}
while($stmt->fetch()){
echo "<tr><td><a href='img.php?c_id=".$c_id."'>" . $c_name . "</a></td></tr>";
//echo "<tr>\n<td>\n" . $c_name . "\n</td>\n</tr>";
}
$stmt->close();
?>
</table>
</div>
</body>
</html>
img.php
<?php
//Turn on error reporting
ini_set('display_errors', 'On');
//Connects to the database
$mysqli = new mysqli("blah", "blah","blah", "blah");
if($mysqli->connect_errno){
echo "Connection error: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
$c_id=1;
//retrieve the blob
if(!($stmt = $mysqli->prepare("SELECT c_picture FROM celebrity where c_name = ?"))){
echo "Prepare failed: " . $stmt->errno . " " . $stmt->error;
}
//if(!($stmt->bind_param("i",$_GET['c_id']))){
if(!($stmt->bind_param("i",$c_id))){
echo "Bind failed: " . $stmt->errno . " " . $stmt->error;
}
if(!$stmt->execute()){
echo "Execute failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error;
}
$stmt->store_result();
if(!$stmt->bind_result($c_picture)){
echo "Bind failed: " . $mysqli->connect_errno . " " . $mysqli->connect_error;
}
$stmt->fetch();
header("Content-Type: image/jpeg");
echo $c_picture;
$stmt->close();
?>
索引.php
<?php
//Turn on error reporting
ini_set('display_errors', 'On');
//Connects to the database
$mysqli = new mysqli("blah", "blah","blah", "blah");
if($mysqli->connect_errno){
echo "Connection error: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$errorinfo = $_FILES['c_picture']['error'];
$img = $_FILES['c_picture']['name'];
$imgTmp = $_FILES['c_picture']['tmp_name'];
$imgSize = $_FILES['c_picture']['size'];
$imgType = $_FILES['c_picture']['type'];
}
//Check image type and size
if (($imgType == 'image/jpeg' || $imgType == 'image/gif' || $imgType == 'image/png') && $imgSize < 1048576)
{
//Insert name and image file into celebrity database (c_name, c_picture) values (?, ?)
if(!($stmt = $mysqli->prepare("INSERT INTO celebrity(c_name, c_picture) VALUES (?, ?)")))
{
echo "Prepare failed: " . $stmt->errno . " " . $stmt->error;
}
if(!($stmt->bind_param("sb",$_POST['c_name'], $img)))
{
echo "Bind failed: " . $stmt->errno . " " . $stmt->error;
}
if(!$stmt->execute())
{
echo "Execute failed: " . $stmt->errno . " " . $stmt->error;
}
else
{
echo "Added " . $stmt->affected_rows . " celebrity to database.";
}
}
else
{
echo "Only jpegs, gifs, and pngs under 1MB can be uploaded";
}
?>