【问题标题】:PHP-SQL: How to ensure image details are not overwritten when updating only text fieldsPHP-SQL:如何确保仅更新文本字段时不会覆盖图像细节
【发布时间】:2016-01-09 07:13:57
【问题描述】:

我正在使用下面的代码来更新我的经典(书籍)数据库中的字段。问题是它无法保留早期的图像,当我只更新文本字段时,即。它用空白(或类似空白的东西)覆盖图像详细信息字段,因此显示的是更新的文本字段,但图像链接损坏。

if (!empty($_FILES["image2"]))

  {
    $ed_author   = get_post($conn, 'ed_author');
    $ed_title    = get_post($conn, 'ed_title');
    $ed_category = get_post($conn, 'ed_category');
    $ed_year     = get_post($conn, 'ed_year');
    $hid_isbn     = get_post($conn, 'hid_isbn');

    $filetmp = $_FILES["image2"]["tmp_name"];
    $filename = $_FILES["image2"]["name"];
    $filetype = $_FILES["image2"]["type"];
    $filepath = "images/".$filename;

    move_uploaded_file($filetmp, $filepath);        

    $query    = "UPDATE classics SET author='$ed_author', title='$ed_title', type='$ed_category', year='$ed_year', filename='$filename', filepath='$filepath', filetype='$filetype'WHERE isbn='$hid_isbn'";     

    $result   = $conn->query($query);

    if (!$result) echo "EDIT with image failed: $query<br>" .
    $conn->error . "<br><br>";
    $result   = $conn->query($query);                   
  }
     else{
        $ed_author   = get_post($conn, 'ed_author');
        $ed_title    = get_post($conn, 'ed_title');
        $ed_category = get_post($conn, 'ed_category');
        $ed_year     = get_post($conn, 'ed_year');
        $hid_isbn     = get_post($conn, 'hid_isbn');
        $oldfilename = get_post($conn, 'oldfilename');
        $oldfilepath = get_post($conn, 'oldfilepath');
        $oldfiletype = get_post($conn, 'oldfiletype');      


    $query  = "UPDATE classics SET author='$ed_author', title='$ed_title', type='$ed_category', year='$ed_year', filename='$oldfilename', filepath='$oldfilepath', filetype='$oldfiletype' WHERE isbn='$hid_isbn'";     
        $result   = $conn->query($query);

    if (!$result) echo "EDIT with image failed: $query<br>" .
    $conn->error . "<br><br>";

     }   

我知道问题在于:当没有添加新图像时,image2 永远不会测试为空,因此仍会转到 if 块 (!empty($_FILES["image2"]))` 而不是 else。那么当没有选择图像时,我应该如何检查 image2 呢?不胜感激。

另外,为了更完整,这里是表格,并附上一张记录的图像,在更新后没有添加新图像,图像链接损坏:

 <form action="sqltest.php" method="post" enctype="multipart/form-data"><pre>
        Author <input type="text" name="ed_author" value="<?php echo $row[0]; ?>">
         Title <input type="text" name="ed_title" value="<?php echo $row[1]; ?>">
      Category <input type="text" name="ed_category" value="<?php echo $row[2]; ?>">
          Year <input type="text" name="ed_year" value="<?php echo $row[3]; ?>">
          ISBN <input type="text" name="hid_isbn" value="<?php echo $row[4]; ?>"readonly>

               <input type="hidden" name="oldfilename" value="<?php echo $row[6]; ?>">  
               <input type="hidden" name="oldfilepath" value="<?php echo $row[7]; ?>">
               <input type="hidden" name="oldfiletype" value="<?php echo $row[8]; ?>">

               <input type="file" name="image2">
               <input type="hidden" name="edit" value="yes">
               <input type="submit" name="btn2" value="SUBMIT EDIT">

        </pre></form>

【问题讨论】:

    标签: php sql image forms sql-update


    【解决方案1】:

    这里的问题是$_FILES['image2']确实在提交文件输入的时候总是填满。

    您可以尝试以下方法:

    1. 在脚本开头添加var_dump($_FILES['image2'])
    2. 发送未选择图像的请求
    3. 保存输出
    4. 发送带有所选图片的请求
    5. 保存输出
    6. 注意区别
    7. 相应地调整您的代码

    这很可能会导致您例如检查该字段的error 索引,如下所示:

    if (!empty($_FILES['image2']) && $_FILES['image2']['error'] != UPLOAD_ERR_NO_FILE) { ... }
    

    但是,您可能还必须重新构建代码,因为如果您现在保持原样,则在没有上传图像时所有其他字段都不会更新(因为 if 块永远不会执行)。

    您可以在此处找到更多信息:POST method uploads 和此处:Upload errors explained

    【讨论】:

    • 感谢帮助我获得了数组键;我得到了 ["error"]=> int(4),我发现它与 UPLOAD_ERR_NO_FILE 相同。但是,当执行新的 if 时,最终会遇到与以前相同的问题,仅更新文本时不会保留旧图像。
    • 您是否确保执行了正确的 if/else,例如通过包含一些调试输出?如果是这样:我真的不明白为什么会这样做,但我也没有你的完整脚本或整页输出。但是,我建议从 HTML 中删除 oldfilenameoldfilepatholdfiletype,然后在 else 部分的查询中删除 filenamefilepathfiletype 的更新。这里的想法是:如果您的图像没有任何变化,那么为什么要更新它呢? (这都是假设“不保留”是指数据从数据库中消失)
    • 谢谢 - 成功了。只需删除 oldfilename、oldfilepath 和 oldfiletype & filename、filepath 和 filetype。所以也许旧文件名/路径/类型是不可理解的值?将尝试和数字。再次感谢。
    • 也许它们在你的 HTML 中已经是空的了,有问题吗?我相信你会发现的!不客气,乐于助人:)
    猜你喜欢
    • 1970-01-01
    • 2022-01-19
    • 2020-12-23
    • 2022-08-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-25
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多