【发布时间】:2018-03-31 16:53:50
【问题描述】:
我看到了一些关于与此问题相关的内容类型的帖子,但我不知道如何处理这些信息。所以我写这篇文章希望能对我的具体问题有所帮助。
这是我用 PHP 编写的 HTML:
<div class="hello-text">
<?php
if($_SESSION['fname'] != ""){
$result = glob ("users/" . $_SESSION['user_id'] . "/profile_picture.*");
if($result){
echo "users/" . $_SESSION['user_id'] . "/profile_picture";
echo "<div style='height: 50px; width: 50px; overflow-x: hidden;'><img src= 'users/" . $_SESSION['user_id'] . "/profile_picture' style='height:100%;'></div>";
}else{
echo "<form action='pp_upload.php' method='POST' enctype='multipart/form-data'><input type='file' onchange='this.form.submit()' name='image' id='file-input' style='display: none;'/><label for='file-input'><img src='images/set-profile-picture.jpg' style='height:50px; cursor: pointer;'></label></form>";
}
echo " Hello, " . $_SESSION['fname'] . " ";
} else {
echo "Please enter your details using the 'change' link below ";
}
?>
</div>
基本上我想做的是将用户的个人资料图片呈现在一个字符串旁边,上面写着“你好,[用户的名字]”。最初 if 语句不起作用,但我通过使用 glob() 函数解决了这个问题。现在,当我尝试通过在文件结构中查找图像(使用他们在数据库中的用户 ID)来渲染他们的个人资料图片时,它无法渲染图像。我猜这是因为我没有图像名称的扩展名,但我不能确定。
由于我允许用户上传任何文件类型的图像,因此我没有 URL 上的文件扩展名。如果用户没有头像,那么它将触发else 语句,该语句会呈现一个图像,他们可以单击该图像来上传他们的头像。如果用户在数据库中没有名字,那么它将要求他们在页面底部的表格中输入他们的名字。
以下是用户上传个人资料图片时运行的内容:
<?php
session_start();
if(isset($_FILES['image'])){
$errors= array();
$file_name = $_FILES['image']['name'];
$file_size =$_FILES['image']['size'];
$file_tmp =$_FILES['image']['tmp_name'];
$file_type=$_FILES['image']['type'];
$file_ext=strtolower(end(explode('.',$_FILES['image']['name'])));
$expensions= array("jpeg","jpg","png");
if(in_array($file_ext,$expensions)=== false){
$errors[]="extension not allowed, please choose a JPEG or PNG file.";
}
if($file_size > 2097152){
$errors[]='File size must be excately 2 MB';
}
if(empty($errors)==true){
move_uploaded_file($file_tmp,"users/" . $_SESSION['user_id'] . "/" . $file_name);
rename("users/" . $_SESSION['user_id'] . "/" . $file_name, "users/" . $_SESSION['user_id'] . "/profile_picture." . $file_ext);
echo "Success";
}else{
print_r($errors);
}
}
【问题讨论】:
-
您的
glob()会检查profile_picture.*,即“profile_picture”,然后是句点和其他内容。因此,将您的<img src="">设置为“profile_picture”不会指向现有文件。您应该检查$result中的内容,并可能将其设置为图像的src。 -
如果用户至少有1张图片,并且在上传新图片时删除了旧图片,您可以使用
$result[0]来操作src的路径。 -
@rickdenhaan if 语句不是问题,它通过了检查。图像标签不起作用。我可以把它放在 if 语句之外,它仍然不起作用。
-
@VeteranLK 问题不在 if 语句中。结果变量不影响 img 标签。
-
@AdamCole,重命名发生在哪里?我在您的代码中没有看到类似的内容。