Php 无法识别文件目录路径的变量

Php 无法识别文件目录路径的变量,php,html,image,Php,Html,Image,到目前为止,我已经成功地将上传的图像移动到其指定的目录,并将移动图像的文件路径存储到我拥有的数据库中 然而,问题是,我回送的imgsrc无法读取包含图像文件路径的变量。我一直在花时间验证我的变量的有效性,回显img src的代码语法,以及移动/存储代码的成功执行,但是当我参考页面的视图源代码时,我仍然得到,该页面应该显示变量中包含的文件路径 我相信文件路径存储在变量中,因为将图像移动到目录和将查询移动到数据库的函数能够识别变量 我的编码和故障排除经验还很幼稚,因此如果我的问题的性质是烦人的琐碎,

到目前为止,我已经成功地将上传的图像移动到其指定的目录,并将移动图像的文件路径存储到我拥有的数据库中

然而,问题是,我回送的
imgsrc
无法读取包含图像文件路径的变量。我一直在花时间验证我的变量的有效性,回显
img src
的代码语法,以及移动/存储代码的成功执行,但是当我参考页面的视图源代码时,我仍然得到
,该页面应该显示变量中包含的文件路径

我相信文件路径存储在变量中,因为将图像移动到目录和将查询移动到数据库的函数能够识别变量

我的编码和故障排除经验还很幼稚,因此如果我的问题的性质是烦人的琐碎,请原谅我

在问这个问题之前,我已经在SOF中搜索了一些问题,但没有一个答案直接解决了我的问题(至少在我搜索的问题中)

主PHP块

  //assigning post values to simple variables
        $location = $_POST['avatar'];
                    .
                    .
                    .

  //re-new session variables to show most recent entries
        $_SESSION["avatar"] = $location;
                    .
                    .
                    .

  if (is_uploaded_file($_FILES["avatar"]["tmp_name"])) {

        //define variables relevant to image uploading
             $type = explode('.', $_FILES["avatar"]["name"]);
             $type = $type[count($type)-1];
             $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
             $rdn = substr(str_shuffle($chars), 0, 15);
        //check image size
             if($_FILES["avatar"]["size"] > 6500000) {
               echo"Image must be below 6.5 MB.";
               unlink($_FILES["avatar"]["tmp_name"]);
               exit();
             }
       //if image passes size check continue
             else {
               $location = "user_data/user_avatars/$rdn/".uniqid(rand()).'.'.$type;
               mkdir("user_data/user_avatars/$rdn/");
               move_uploaded_file( $_FILES["avatar"]["tmp_name"], $location);
           }

           }
           else {
             $location = "img/default_pic.jpg";
           }
HTML块

              <div class="profileImage">
                <?php

                  echo "<img src='".$location."' class='profilePic' id='profilePic'/>";

                ?><br />
                  <input type="file" name="avatar" id="avatar" accept=".jpg,.png,.jpeg"/>
                    .
                    .
                    .


. . .
查看源文件

<div class="profileImage">
                <img src='' class='profilePic' id='profilePic'/><br />
                  <input type="file" name="avatar" id="avatar" accept=".jpg,.png,.jpeg"/>
                    .
                    .
                    .


. . .
试试这段代码

<?php

error_reporting(E_ALL);
ini_set('display_errors','on');  

$location = ""; //path

if($_POST && $_FILES)
{
  if(is_uploaded_file())
  {

       // your code

      if(<your condition >)
      {
      }
      else
       {
        $location = "./user_data/user_avatars/".$rdn."/".uniqid(rand()).'.'.$type;

        if(!is_dir("./user_data/user_avatars/".$rdn."/"))
        {
           mkdir("./user_data/user_avatars/".$rdn."/",0777,true);
        }
        move_uploaded_file( $_FILES["avatar"]["tmp_name"], $location);
      }
  }
  else
  {
      $location = "img/default_pic.jpg";
  }

}
?>

Html代码:-

<div>
  <?php
  $location = (empty($location)) ? "img/default_pic.jpg" : $location ;
   echo "<img src='".location."' alt='".."'> ";
   ?>
</div>

如果有帮助的话,别忘了标记为答案,这样其他人可以很容易地得到正确的答案


祝你好运

好了,我终于找到了错误并成功地解决了

更新表后,只需向
$location
变量声明一个虚拟角色会话变量,通过将所有
$location
变量替换为
$\u会话[“虚拟角色列”]
来更新html插入,就可以了

PHP:

    $updateCD = "UPDATE users SET languages=?, interests=?, hobbies=?, bio=?, personal_link=?, country=?, avatar=? WHERE email=?";
  $updateST = $con->prepare($updateCD);
  $updateST->bind_param('ssssssss', $lg, $it, $hb, $bio, $pl, $ct, $location, $_SESSION["email_login"]);
  $updateST->execute();

  $_SESSION["avatar"] = $location;   //Important!

  if ($updateST->errno) {
      echo "FAILURE!!! " . $updateST->error;
      }
    <div class="profileImage">
                <?php
                $_SESSION["avatar"] = (empty($_SESSION["avatar"])) ? "img/default_pic.jpg" : $_SESSION["avatar"] ;
                 echo "<img src='".$_SESSION["avatar"]."' class= 'profilePic' id='profilePic'> ";
                 ?>
        .
        .
        .
HTML:

    $updateCD = "UPDATE users SET languages=?, interests=?, hobbies=?, bio=?, personal_link=?, country=?, avatar=? WHERE email=?";
  $updateST = $con->prepare($updateCD);
  $updateST->bind_param('ssssssss', $lg, $it, $hb, $bio, $pl, $ct, $location, $_SESSION["email_login"]);
  $updateST->execute();

  $_SESSION["avatar"] = $location;   //Important!

  if ($updateST->errno) {
      echo "FAILURE!!! " . $updateST->error;
      }
    <div class="profileImage">
                <?php
                $_SESSION["avatar"] = (empty($_SESSION["avatar"])) ? "img/default_pic.jpg" : $_SESSION["avatar"] ;
                 echo "<img src='".$_SESSION["avatar"]."' class= 'profilePic' id='profilePic'> ";
                 ?>
        .
        .
        .

.
.
.

谢谢大家!

问题仍然存在,但代码看起来更干净。我不太明白你建议的最后一部分,
$location=(empty($location))?“img/default_pic.jpg”:$location?另外,
mkdir
部分中的
0777
的意义是什么?如果没有0777(所有组)权限$location=(空($location)),mkdir()将创建目录?“img/default_pic.jpg”:$location;有了这个,我们检查$location是否有值,如果没有,那么它将采用默认路径,比如'img/default.jpg',我想再问一个问题,您可以在一个页面或单独的页面中编写代码。如果在同一页中,则可能存在范围变量的问题。我为您编辑了我的答案,请尝试一下。我告诉过您,如果您的页面与此完全相同……感谢您花时间回复,非常感谢。现在会显示默认图片,但不会显示上载的图片。我所有的代码都在一页上。我将执行一个select查询,将location变量重新分配到数据库中记录的文件路径。