【问题标题】:Update image name in the database with php用php更新数据库中的图像名称
【发布时间】:2021-06-05 12:47:39
【问题描述】:

[EDITED WITH SOLUTION] Noob 错误,它只是缺少表单中的enctype="multipart/form-data"

我不知道为什么我的代码突然停止工作。我用 php 和 mySQL 创建了一个 CRUD 应用程序。现在,当我尝试更新数据库中的图像名称时,我没有得到任何结果。我很确定我使用的代码是正确的,但也许我遗漏了一些东西

数据库表有一个名为“图像”的列,我在其中存储图像名称及其扩展名(例如 logo.jpg)

这是让我更改一些值的 update.php。如果我尝试更新所有其他字段,我不会出错并且一切正常,但我无法更改图像。我错过了什么?我对php真的很陌生,我不知道我是否不小心写错了东西,在此先感谢! (如果需要更多代码,请告诉我)

<?php
include 'functions.php';

$msg = '';

if(isset($_GET['id'])){
    if(isset($_POST['update'])){

        // Posted Values
        $title=$_POST['title'];
        $category=$_POST['category'];
        $preview=$_POST['preview'];
        $main=$_POST['main'];
        $created = $_POST['created'];

        $imageName=$_FILES['immagine']['name'];

        // Query for Insertion
        $data = [
            'title' => $title,
            'category' => $category,
            'preview' => $preview,
            'main' => $main,
            'id' => $_GET['id'],
            'created' => $created,
            'immagine' => $imageName,
        ];

        $sql="UPDATE post SET title=:title, category=:category, preview=:preview, main=:main, created=:created, image=:immagine WHERE id=:id";

        //Prepare Query for Execution
        $stmt = $pdo->prepare($sql);

        // Query Execution
        $stmt->execute($data);

    

        header('Location: preview.php?id=' . $_GET['id']);
  }

    $stmt = $pdo->prepare('SELECT * FROM post WHERE id = ?');
    $stmt->execute([$_GET['id']]);
    $contact = $stmt->fetch(PDO::FETCH_ASSOC);

}
?>

<!DOCTYPE html>

<html>
    <body>
        <div class="container_create">
            <div class="topnav">
                <a href="preview.php?id=<?php echo $_GET['id']; ?>"><img src="IMG/Back_icon.svg" alt="menu" id="back_icon"></a>
                <img src="IMG/Logo_orizontale.svg" alt="menu" id="hyperink_logo">
            </div>

            <p id="titolo_create">Impostazione Pagina</p>

            <div class="box_create">
                <form action="update.php?id=<?php echo $_GET['id']; ?>" method="post" id="form_create">

                    <label class="labels_create">Data</label>
                    <input type="datetime-local" name="created" class="inputs_create" id="myDatetimeField" value="<?=$contact['created']?>">

                    <label class="labels_create">Titolo del Articolo</label>
                    <input type="text" name="title" class="inputs_create" id="title" value="<?=$contact['title']?>">

                    <label class="labels_create">Categoria</label>
                    <input type="text" name="category" class="inputs_create" id="cat" value="<?=$contact['category']?>">

                    <label class="labels_create">Descrizione</label>
                    <textarea type="text" name="preview" id="preview" class="inputs_create" row="5" col="50" onkeyup ="limite_caratteri()"><?=$contact['preview']?></textarea>


                    <label class="labels_create">Contenuto del Articolo</label>
                    <div class="text_editor">
                        <textarea id="main" name="main" rows="5" cols="50"><?=$contact['main']?></textarea>
                    </div>

                    <input type="file" id="immagine" name="immagine" class="inputs_create_file" accept="image/*"><span><?php echo $contact['image']?></span>

                    <input type="submit" name="update" value="Salva Modifiche" class="btn_create">
                </form>
            </div>

【问题讨论】:

  • 以前可以,但现在不行了……那么,你改了什么?
  • 我真的不知道,因为我在没有图像字段的情况下进行了一些测试,当我尝试重新编写代码时它不起作用。我真的很困惑@ADyson
  • 不是你的问题的解决方案,但是注意header不会终止脚本,你应该在设置标题后添加die()以防止脚本的其余部分执行。
  • 刚刚注意到这个问题,你的form没有enctype="multipart/form-data"属性,没有这个文件不会发布。见:stackoverflow.com/questions/4526273/…
  • 啊!抱歉,我只在此代码的后端工作,我完全忘记检查 enctype 是否存在-.-' 非常感谢@Geoffrey,我可能会在此之后花费一天

标签: php sql database


【解决方案1】:

您的表单无法发布图片,因为您没有设置enctype 属性,默认情况下,HTML 表单以纯文本形式发布,并且不会包含任何二进制数据,例如图片上传。要更正此问题,您需要将 enctype 设置为 multipart/form-data

例如:

<form action="update.php?id=<?php echo $_GET['id']; ?>" method="post" id="form_create" enctype="multipart/form-data">

请参阅:What does enctype='multipart/form-data' mean? 了解更多信息。

【讨论】:

    猜你喜欢
    • 2019-09-11
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 2012-07-05
    • 2011-05-30
    • 2012-02-05
    相关资源
    最近更新 更多