【发布时间】:2022-06-10 23:04:08
【问题描述】:
我正在使用 HTML 表单填写与公司相关的数据此表单允许员工在每次客户订购商品时发布客户信息但是要求必须包括通过表单将图像上传到服务器图像将存储在一个名为 images 的文件中,然后每次我们通过表单 POST 时,它都会使用 PHP MySql 将数据和信息插入数据库,注意它是 7.4 PHP 版本,请帮助我们发布图像
我已经成功使用了这段代码,但是由于它有一个工作原理的结构,所以有点困难,因为 html 表单是内部的,它是从外部文件调用的,所以 HTML 表单位于名为“customer_form.php”的文件中的脚本中在外部,我们有 add_customer.php ,其中包含此代码的 php 部分,
我的问题如下:
我已经成功上传图片到服务器 我已成功插入数据库
问题是它在名为“S_Image”的列中发布了图像的链接,但是它总是选择插入行之前的最后一行,我的意思是它是最后一行 - 1 并且不可能将它与下一个链接发布信息时的行,即使我使用了 WHERE 条件,仍然可能是因为尚未生成下一个 ID,并且在插入数据时 ID 仍然未知或显示在表单中..
我需要将图像的链接(URL)发布到正确的位置,这需要使用 post 命令或数据库插入,如果可能,请提供帮助,非常感谢。
HTML 前端
<div class="form-group">
<label for="S_Image">Upload Image</label>
<input name="PIC" value="<?php echo htmlspecialchars($edit ? $customer['S_Image'] : '', ENT_QUOTES, 'UTF-8'); ?>" placeholder="Upload Image" class="form-control" type="file" accept="image/png, image/gif, image/jpeg">
</div>
PHP 服务器端
<?php
function generateRandomString($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[rand(0, $charactersLength - 1)];
}
return $randomString;
}
// If upload button is clicked ...
if (isset($_POST['upload'])) {
##########################
$PIC = "";
$filename = $_FILES["PIC"]["name"];
$fileEXE = end(explode(".",$filename));
$File_type = $_FILES["PIC"]["type"];
$AllowedEXE = array('image/jpeg', 'image/gif', 'image/png');
$tempname = $_FILES["PIC"]["tmp_name"];
$newName = generateRandomString().".".$fileEXE;
$folder = "images/".$newName;
if(in_array($File_type, $AllowedEXE)){
if(move_uploaded_file($tempname, $folder)){
$PIC = $newName;
}
}
###########################
if(!empty($PIC)){
$servername = "localhost";
$username = "";
$password = "";
$dbname = "";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
// Get all the submitted data from the form
$sql = "INSERT INTO S (S_Image) VALUES ('$PIC')";
--------------------------
// note i also tried this but it didn't work ID is still not known because it will be posted next
SELECT * FROM S ORDER BY ID DESC LIMIT 1;
SELECT * FROM S WHERE id=(SELECT max(id) FROM S);
$id = "SELECT id FROM S WHERE id = id+1";
------------------
$sql = "INSERT INTO S
(S_Image)
VALUES ('$PIC')
WHERE id = $id";
// Execute query
if ($conn->query($sql) === TRUE) {
echo'DONE!';
} else {
echo "Error: " . $sql . "<br>" . $conn->error;
}
}
}
?>
我知道我犯了错误,但我尝试了所有可能的命令,但仍然失败了系统没有得到下一个 ID,即使尝试从 $_POST['id'] 方法获取它并手动输入并将其添加到在哪里条件仍然不起作用。
【问题讨论】:
-
良好的代码缩进将帮助我们阅读代码,更重要的是,它将帮助您调试代码Take a quick look at a coding standard 为您自己的利益。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
-
你的描述也很辛苦。同样,请根据需要使用带有大写字母、句号和其他标点符号的正确句子 - 它使文本很多更易于阅读和理解。我假设您希望那些试图帮助您的人能够轻松理解您的要求?如果是这样,那么请花时间正确地写。另见How to Ask,其中提到了这一点。并使用tour,因为您是新手,因为它解释了 Stackoverflow 的工作原理。谢谢。
-
第一个明显的错误! INSERT 语句没有 WHERE 子句。那应该会产生错误,您是否看到任何错误,如果没有则添加错误报告
-
无论如何要解决问题,您需要在表单中上传正确的ID以及图片(例如,您可以将其添加到隐藏字段中)。然后服务器将始终知道您要将其关联到哪个 ID。
标签: javascript php html mysql database