【问题标题】:Variable for file directory path not being recognized无法识别文件目录路径的变量
【发布时间】:2023-04-07 08:56:01
【问题描述】:

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

但是,问题是我回显的img src 无法读取包含图像文件路径的变量。我一直在花时间验证我的变量的有效性、回显img src 的代码语法以及移动/存储代码的成功执行,但是当我参考视图源时我仍然得到<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 html image


    【解决方案1】:

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

    更新表格后,只需向$location 变量声明一个头像会话变量,通过将所有$location 变量替换为$_SESSION["avatar_column"] 来更新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;
          }
    

    HTML:

        <div class="profileImage">
                    <?php
                    $_SESSION["avatar"] = (empty($_SESSION["avatar"])) ? "img/default_pic.jpg" : $_SESSION["avatar"] ;
                     echo "<img src='".$_SESSION["avatar"]."' class= 'profilePic' id='profilePic'> ";
                     ?>
            .
            .
            .
    

    谢谢!

    【讨论】:

      【解决方案2】:

      试试这个代码

      <?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 = (empty($location)) ? "img/default_pic.jpg" : $location ;?还有,0777mkdir部分有什么意义?
      • mkdir() 将创建目录,如果不存在 0777(所有组)权限 $location = (empty($location)) ? “img/default_pic.jpg”:$位置;有了这个,我们检查了 $location 是否有值,如果没有,那么它将采用默认路径,如 'img/default.jpg'
      • 还有一个我想问的,你编码在一页或分开。如果在同一页面中,则可能存在范围变量问题。
      • 我为你编辑了我的答案,试试这个我告诉你,如果你的页面完全像这样工作..
      • 花时间回复,非常感谢。现在会显示默认图片,但不会显示上传的图片。我所有的代码都在一页上。我要做一个选择查询,将位置变量重新分配给数据库中记录的文件路径。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-12-25
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      • 1970-01-01
      相关资源
      最近更新 更多