【发布时间】: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,我可能会在此之后花费一天