在 PHP 中显示上传的图片
Show an uploaded image in PHP
这是我的第一个 post,如果我在这个 post 中做错了什么,请告诉我。
我目前正在做一项包含三个子任务的学校任务。
1) 制作一个可以上传图片的 HTML 表格
2) 将 HTML 表单中的数据保存在文本文档中,并将图像放在服务器上
3) 制作一个显示不同条目(包括图像)的页面。
这是我到目前为止所做的。任务 1 应该是非常正确的。
<!DOCTYPE html>
<html lang="da">
<html>
<head>
<title>Mobiloversigten</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="stylesheet.css">
</head>
<body>
<form name="formular" id="formular" method="post" action="process.php" enctype="multipart/form-data" autocomplete="on">
<fieldset>
<legend>Enhedsoplysninger</legend>
<div><label>Producent: <input type="text" name="manufactor" id="manufactor" required="required" size="30"></label></div>
<div><label>Produktnavn: <input type="text" name="product" id="product" required="required" size="30"></label></div>
<div><label>Farve: <input type="text" name="color" id="color" required="required" size="30"></label></div>
<label>Hukommelse:
<div>
<select size="1" name="memory" id="memory">
<option>8GB</option>
<option>16GB</option>
<option>32GB</option>
<option>64GB</option>
<option>128GB</option>
</select>
</div>
</label>
<div><label>Skærmstørrelse <input type="number" name="displaysize" id="displaysize" min="0" step="0.1" size="30"></label></div>
<div><label>Produktbillede: <input type="file" name="productphoto" id="productphoto" required="required" size="30"></label></div>
</fieldset>
<div><input type="submit" id="ok" value="Indsend"><input type="reset" id="nulstil" value="Nulstil"></div>
</form>
</body>
</html>
我的 process.php 页面如下所示:
<!DOCTYPE html>
<html lang="da">
<html>
<head>
<title>Mobiloversigten</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="stylesheet.css">
</head>
<body>
<a href="index.html">Tilføj flere enheder</a>
<a href="overview.php">Vis enheder</a>
<?php
$manufactor = $_POST['manufactor'];
$product = $_POST['product'];
$color = $_POST['color'];
$memory = $_POST['memory'];
$displaysize = $_POST['displaysize'];
$productphoto = $_FILES['productphoto']['name'];
if($_FILES){
if(strlen($_FILES['productphoto']['type'])==9){
move_uploaded_file($_FILES['productphoto']['tmp_name'], $product . ".".$rest = substr($_FILES['productphoto']['type'], -3));
}
else{move_uploaded_file($_FILES['productphoto']['tmp_name'], $product . ".".$rest = substr($_FILES['productphoto']['type'], -4));
}
}
$user_data = "$manufactor, $product, $color, $memory, $displaysize, $productphoto \r\n";
$mobile_data = "Producent: ,Produktnavn: ,Farve: ,Hukommelse: ,Skærmstørrelse: ";
$fh = fopen("data.txt", "a+") or die("Filen kunne ikke oprettes");
fwrite($fh, $user_data) or die("Kunne ikke skrive til filen");
fclose($fh);
$fj = fopen("mobile.txt", "w") or die("Filen kunne ikke oprettes");
fwrite($fj, $mobile_data) or die("Kunne ikke skrive til filen");
fclose($fj);
?>
</body>
</html>
显示所有条目概览的页面如下所示:
<!DOCTYPE html>
<html lang="da">
<html>
<head>
<title>Mobiloversigt</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Tilføjede enheder</h1>
<?php
fopen("file.txt", "r");
fopen("mobil.txt", "r");
$info = explode(",", file_get_contents("mobil.txt"));
$retrieved_string = file_get_contents("file.txt");
$retrieved_array = explode("\n", $retrieved_string);
$count=count($retrieved_array)-1;
for($y = 0; $y < $count; $y++){
$user_data_array = explode(",",$retrieved_array[$y]);
for($x = 0; $x <= 4; $x++){
echo "<p>$info[$x]</p><p2>$user_data_array[$x]</p2><br>";
} echo "<img src=\"$user_data_array[5]\"><br><br>";
echo "<div><span class=\"linie\"></span></div><br><br>";
}
?>
</body>
</html>
总体问题是,图片不显示。我在我的根文件夹中看到它们,其中包含 .php 文件和索引。文件,但我的浏览器只显示一个蓝色问号 (Safari),所以它似乎无法识别图像位置,即使我可以在文件夹中看到它。
非常感谢您的帮助! :-)
提前致谢
/克里斯
在 process.php 中的主要错误是您使用不同的名称保存照片并打印 tmp_name 是文件。实际上,两者都应该是相同的要求。稍微修改一下代码
if($_FILES){
if(strlen($_FILES['productphoto']['type'])==9)
$name=$product . ".".$rest = substr($_FILES['productphoto']['type'], -3);
else
$name=$product . ".".$rest = substr($_FILES['productphoto']['type'], -4);
move_uploaded_file($_FILES['productphoto']['tmp_name'], $name);
}
$user_data = "$manufactor, $product, $color, $memory, $displaysize, $name \r\n";
在 overview.php 中,如果您使用 file_get_contents,则不需要 fopen,因此删除 fopen 行,第二个错误更正输入文件名,因为您在 data.txt 和 mobile.txt 但从 mobil.txt 和 导入数据file.txt。否则一切都是正确的。
这是我的第一个 post,如果我在这个 post 中做错了什么,请告诉我。
我目前正在做一项包含三个子任务的学校任务。
1) 制作一个可以上传图片的 HTML 表格 2) 将 HTML 表单中的数据保存在文本文档中,并将图像放在服务器上 3) 制作一个显示不同条目(包括图像)的页面。
这是我到目前为止所做的。任务 1 应该是非常正确的。
<!DOCTYPE html>
<html lang="da">
<html>
<head>
<title>Mobiloversigten</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="stylesheet.css">
</head>
<body>
<form name="formular" id="formular" method="post" action="process.php" enctype="multipart/form-data" autocomplete="on">
<fieldset>
<legend>Enhedsoplysninger</legend>
<div><label>Producent: <input type="text" name="manufactor" id="manufactor" required="required" size="30"></label></div>
<div><label>Produktnavn: <input type="text" name="product" id="product" required="required" size="30"></label></div>
<div><label>Farve: <input type="text" name="color" id="color" required="required" size="30"></label></div>
<label>Hukommelse:
<div>
<select size="1" name="memory" id="memory">
<option>8GB</option>
<option>16GB</option>
<option>32GB</option>
<option>64GB</option>
<option>128GB</option>
</select>
</div>
</label>
<div><label>Skærmstørrelse <input type="number" name="displaysize" id="displaysize" min="0" step="0.1" size="30"></label></div>
<div><label>Produktbillede: <input type="file" name="productphoto" id="productphoto" required="required" size="30"></label></div>
</fieldset>
<div><input type="submit" id="ok" value="Indsend"><input type="reset" id="nulstil" value="Nulstil"></div>
</form>
</body>
</html>
我的 process.php 页面如下所示:
<!DOCTYPE html>
<html lang="da">
<html>
<head>
<title>Mobiloversigten</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="stylesheet.css">
</head>
<body>
<a href="index.html">Tilføj flere enheder</a>
<a href="overview.php">Vis enheder</a>
<?php
$manufactor = $_POST['manufactor'];
$product = $_POST['product'];
$color = $_POST['color'];
$memory = $_POST['memory'];
$displaysize = $_POST['displaysize'];
$productphoto = $_FILES['productphoto']['name'];
if($_FILES){
if(strlen($_FILES['productphoto']['type'])==9){
move_uploaded_file($_FILES['productphoto']['tmp_name'], $product . ".".$rest = substr($_FILES['productphoto']['type'], -3));
}
else{move_uploaded_file($_FILES['productphoto']['tmp_name'], $product . ".".$rest = substr($_FILES['productphoto']['type'], -4));
}
}
$user_data = "$manufactor, $product, $color, $memory, $displaysize, $productphoto \r\n";
$mobile_data = "Producent: ,Produktnavn: ,Farve: ,Hukommelse: ,Skærmstørrelse: ";
$fh = fopen("data.txt", "a+") or die("Filen kunne ikke oprettes");
fwrite($fh, $user_data) or die("Kunne ikke skrive til filen");
fclose($fh);
$fj = fopen("mobile.txt", "w") or die("Filen kunne ikke oprettes");
fwrite($fj, $mobile_data) or die("Kunne ikke skrive til filen");
fclose($fj);
?>
</body>
</html>
显示所有条目概览的页面如下所示:
<!DOCTYPE html>
<html lang="da">
<html>
<head>
<title>Mobiloversigt</title>
<meta charset="UTF-8">
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Tilføjede enheder</h1>
<?php
fopen("file.txt", "r");
fopen("mobil.txt", "r");
$info = explode(",", file_get_contents("mobil.txt"));
$retrieved_string = file_get_contents("file.txt");
$retrieved_array = explode("\n", $retrieved_string);
$count=count($retrieved_array)-1;
for($y = 0; $y < $count; $y++){
$user_data_array = explode(",",$retrieved_array[$y]);
for($x = 0; $x <= 4; $x++){
echo "<p>$info[$x]</p><p2>$user_data_array[$x]</p2><br>";
} echo "<img src=\"$user_data_array[5]\"><br><br>";
echo "<div><span class=\"linie\"></span></div><br><br>";
}
?>
</body>
</html>
总体问题是,图片不显示。我在我的根文件夹中看到它们,其中包含 .php 文件和索引。文件,但我的浏览器只显示一个蓝色问号 (Safari),所以它似乎无法识别图像位置,即使我可以在文件夹中看到它。
非常感谢您的帮助! :-)
提前致谢
/克里斯
在 process.php 中的主要错误是您使用不同的名称保存照片并打印 tmp_name 是文件。实际上,两者都应该是相同的要求。稍微修改一下代码
if($_FILES){
if(strlen($_FILES['productphoto']['type'])==9)
$name=$product . ".".$rest = substr($_FILES['productphoto']['type'], -3);
else
$name=$product . ".".$rest = substr($_FILES['productphoto']['type'], -4);
move_uploaded_file($_FILES['productphoto']['tmp_name'], $name);
}
$user_data = "$manufactor, $product, $color, $memory, $displaysize, $name \r\n";
在 overview.php 中,如果您使用 file_get_contents,则不需要 fopen,因此删除 fopen 行,第二个错误更正输入文件名,因为您在 data.txt 和 mobile.txt 但从 mobil.txt 和 导入数据file.txt。否则一切都是正确的。