【问题标题】:Does an update have to be different to an insert when uploading a file?上传文件时更新是否必须与插入不同?
【发布时间】:2015-06-25 04:58:01
【问题描述】:

我正在制作的 CRUD 的更新部分有问题。创建工作正常,我使用非常相似的代码进行更新,但出现问题,文件上传似乎有问题。

我有一个显示数据库中所有行的页面。每一行旁边都有一个链接,上面写着编辑,当点击它时,它会转到一个页面,该页面在表单中显示来自 Db 的行。然后可以更改信息,并且有一个提交按钮,单击该按钮会使表单的操作运行,这是一个包含以下内容的 php 文件:

<?php
include ('includes/DbCon.php');

if (isset($_POST['ud_id']))$id = $_POST['ud_id'];

$query = "SELECT * FROM news WHERE id = '$id'";
$result = $mysqli->query ($query);
if(mysqli_num_rows($result)>=1)
{
$row = mysqli_fetch_array($result, MYSQLI_BOTH);
    $headline = $row['headline'];
    $body = $row['body'];
    $image = $row['image'];
}
else{
    $mysqli->error;
}


//Set directory etc for image upload
$target_dir = "images/photo/";
$target_file = $target_dir . basename($_FILES["ud_image"]["name"]);

if (move_uploaded_file($_FILES["ud_image"]["tmp_name"], $target_file)or die($mysqli->error))
{
    echo '<script type="text/javascript">';
    echo 'alert("News Items Saved")';
    echo '</script>';
} else {
        echo "Sorry, there was an error with your file.";
}

还有更多内容,但它并没有解决这个问题,所以我需要帮助找出问题所在。我使用了 var_dump 并打印了变量以查看传递了什么,一切都很好,直到它到达 $target_file。当我打印该变量时,我得到“图像/照片”,但我怀疑它应该是完整的文件名以及目标路径。

和插入代码的设置方式一样,所以不知道有什么问题。

根据要求,表格如下:

<form action="update.php" method="post" class="newNews">

<input type="hidden" name="ud_id" value="<?=$id;?>">

<label for="title">Title</label><br />
<input type="text" name="ud_headline" value="<?=$headline;?>"/>

<label for="text">Body</label><br />
<textarea name="ud_body" rows="5" cols="21" value="" class="editBody"><?=$body;?></textarea>

<p>Current Photo</p>
<img src="images/photo/<?=$image?>" alt=" " width="auto" height="auto"><br />           

<input type="file" name="ud_image" class="newsImage" ><br />

<input type="submit" name="submit" value="Update news item" class='addNew' />

</form>

【问题讨论】:

  • 可以给我们看一下表格代码吗??
  • 表格已添加到问题中。可能是因为它没有设置enctype?
  • 如果有的话,实际的 sql 错误又是什么?
  • @tdrsam 你用 enctype="multipart/form-data" 试过了吗??
  • 我刚刚添加了 enctype 并上传了图像,但更新实际上并没有将字符串保存到 Db。查询是这样的:$edit = mysqli_query($mysqli,"UPDATE news SET headline='$ud_headline', body='$ud_body', image='$ud_image' WHERE id='$id'");

标签: php mysqli image-uploading


【解决方案1】:

您的move_uploaded_file() 函数似乎有问题。来自在线手册:

http://php.net/manual/en/function.move-uploaded-file.php

试试这个代码:

<?php
...
if ($_FILES["ud_image"]["error"] == UPLOAD_ERR_OK)
{
    $tmp_name = $_FILES["ud_image"]["tmp_name"];
    $name = $_FILES["ud_image"]["name"];
    if (move_uploaded_file($tmp_name, "$target_dir$name"))
    {
        echo '<script type="text/javascript">';
        echo 'alert("News Items Saved")';
        echo '</script>';
    }
    else
    {
        echo "Sorry, there was an error with your file.";
    }
}
else
{
    echo "Sorry, there was an error with your file.";
}

【讨论】:

  • 文件上传工作正常 - 文件存储在目标目录中。但是,数据库中的行没有更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-25
  • 2022-12-20
  • 1970-01-01
  • 2013-09-04
  • 2020-10-11
  • 1970-01-01
  • 2010-09-17
相关资源
最近更新 更多