【问题标题】:show path of image on update form php在更新表单php上显示图像路径
【发布时间】:2013-10-25 07:25:58
【问题描述】:

当填充更新表单的字段时,如何显示当前图像的路径,如下所示

因此,如果用户不想更改图像,则使用相同的图像。 这是浏览器显示的内容: <input type="file" value="uploads/chaps_B.jpg" name="image_edit"></input>

我感觉我的photopath 不在范围内,但不确定如何修复它。所有变量都填充表单并保存到数据库中,只是无法确定图像路径。

     if(isset($_POST['update_submit']))
    {
$get_products = $db->prepare("select `photopath` from `item` where 
                            `item_id` = '$get_item' LIMIT 1");
$get_products->execute();
$path= $get_products->fetchColumn(6);

if($_FILES['image_edit']['tmp_name'] != "")
    {
        $edit_name = $_POST['item_name'];
        $edit_description =$_POST['item_description'];
        $form_id = $_POST['edit_form_id'];

        $file_dir = "uploads/";
        $image = $file_dir. $_FILES['image_edit']['name'];
        move_uploaded_file($_FILES['image_edit']['tmp_name'], $image);

        $edit_sql =$db->prepare("UPDATE item SET item_name = '$edit_name', 
                item_description = '$edit_description', 
                photopath ='$image' WHERE item_id = '$form_id'");

        $edit_sql->execute();
        header("Location: manage_items.php");
        exit();

        }
        else
        {
            $edit_name = $_POST['item_name'];
            $edit_description =$_POST['item_description'];
            $form_id = $_POST['edit_form_id'];

            $edit_sql =$db->prepare("UPDATE item SET item_name = '$edit_name', 
                item_description = '$edit_description' 
                 WHERE item_id = '$form_id'");

                $edit_sql->execute();
                header("Location: manage_items.php");
                exit();
            }

更新表格

      <form action="item_edit.php" method="post" enctype="multipart/form-data">

        <input type = "text" name="item_name" value="<?php echo $item_name ?> "/>
        <textarea name="item_description"><?php echo $item_description ?></textarea>

        <p> <img src="<?php echo $image; ?>" width="75" height="75" /></p>
        <input type="file" name="image_edit" />

        <input name="edit_form_id" type="hidden" value="<?php echo $get_item ?>">
        <p><input type="submit" name="update_submit" value="Update"/></p>
        <p><input type="submit" name="cancel_edit" value="Cancel"/></p>
      </form>

数据库结构

【问题讨论】:

  • 很可能是相对路径问题。你能分享页面的路径和上传目录相对于web root的路径吗?
  • @Akshay 他们在同一个目录中。上传在 htdocs 文件夹中
  • 阻止它重新插入数据库的方法是检查该字段的$_POST 是否为空,这样您就可以跳过将其插入数据库的步骤。
  • ok 你必须做什么,在你的表单中 然后当然是在 edit.php 之前if file upload check $image = $_POST['imgEdit']; 如果用户上传文件 $image 变量自动更新他的值,否则你有相同记录的隐藏最后一个图像名称。
  • 这个问题的答案可能会对你有所帮助stackoverflow.com/questions/19089020/how-to-update-type-file/…

标签: php mysql


【解决方案1】:

在检索单行时,您不必按照代码注释中的要求进行循环。

至于数据库,你到底在存储什么,你的表结构是什么样的? 您可以轻松地将图像的名称保存在字段中并检索它,甚至无法获得完整路径(因为那里可能有更多图像)

编辑 1

这是解决空字符串插入问题的一种方法,是的,但是查询必须有所不同,因此您必须编写一个插入图像的方法和一个排除它的方法

编辑 2

在您检索到图像路径后,您现在要做的就是使用 PHP 的 explode 来拆分字符串,例如$aPath = explode('/', $yourDBfield);,这会给你一个包含在 / 上分割的项目的数组,因为文件总是在最后,只需这样做: $image = $aPath[(count( $aPath)-1)];,这应该会给你图像。

编辑 3

根据 OP 的要求,

主要查询应包括图像更新,例如当值集不为空时。

$edit_sql =$db->prepare("UPDATE item SET item_name = '$edit_name', 
            item_description = '$edit_description', 
            photopath ='$image' WHERE item_id = '$form_id'");

其他查询应排除 photopath = '$image' 例如

$edit_sql =$db->prepare("UPDATE item SET item_name = '$edit_name', 
            item_description = '$edit_description', 
            WHERE item_id = '$form_id'");

如 cmets 中所述,您还可以添加默认路径,例如$image(未拆分)到请求页面时字段的值,这样您只需要编写 1 个查询,并且图像将保持不变。

【讨论】:

  • 添加了一张db结构的照片
  • 代码中的 fetchColumn 方法返回什么?它可能会为每一行获取一个列数组,因此您必须找出哪一行适合您的用户。
  • 返回路径uploads/filename.extension
  • 你现在要做的就是使用 PHP 的 explode 来分割字符串,例如$aPath = explode('/', $yourDBfield);,这将为您提供一个数组,其中包含在 / 上拆分的项目,因为文件将始终位于末尾,只需执行以下操作:$image = $aPath[(count($aPath)-1)];,这应该会给您图像。
  • 完成,还添加了@m-t提到的一些额外选项,这比编写2个查询更好(例如,只需将图像作为字段的默认值)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-10-15
  • 1970-01-01
  • 2021-02-17
  • 2019-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多