我的表单是为用户上传图片。图像存储在一个文件夹中,该路径应该存储在数据库中,但事实并非如此。也就是说,图像正确上传到文件夹,但路径未保存到db。
我尝试了两个完全不同的查询,但都没有奏效。我也引用了这两个问题; How to upload images into MySQL database using PHP code和php image not uploading to database,以下是相关代码。
<?php
// load current profile photo script
$username='';
$check_pic='';
$check_pic = mysqli_query($connection,"SELECT profile_pic FROM users WHERE username='$username'");
$get_pic_row = mysqli_fetch_assoc($check_pic);
$profile_pic_db = $get_pic_row['profile_pic'];
if ($profile_pic_db == "") {
$profile_pic = "images/default_pic.jpg";
}
else
{
$profile_pic = "userdata/profile_pics/".$profile_pic_db;
}
//script for uploading profile photo
if (isset($_FILES['profilepic'])) {
if ((@$_FILES["profilepic"]["type"]=="image/jpeg")) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$rand_dir_name = substr(str_shuffle($chars), 0, 15);
mkdir("C:/xampp/htdocs/folder/userdata/profile_pics/$rand_dir_name");
if (file_exists("C:/xampp/htdocs/folder/userdata/profile_pics/$rand_dir_name/".@$_FILES["profilepic"]["name"]))
{
echo @$_FILES["profilepic"]["name"]." Already exists";
}
else
{
//moves images to folder userdata/profile_pics...
move_uploaded_file(@$_FILES["profilepic"]["tmp_name"],"C:/xampp/htdocs/folder/userdata/profile_pics/$rand_dir_name/".$_FILES["profilepic"]["name"]);
//saves image url to table...
$profile_pic_name = (@$_FILES["profilepic"]["name"]);
$profile_pic_loc = "C:/xampp/htdocs/folder/userdata/profile_pics/$rand_dir_name/$profile_pic_name'";
if($profile_pic_query = mysqli_query($connection, "INSERT INTO users (profile_pic) VALUES ('$profile_pic_loc')")){
echo "successful upload";
}
else {
echo "unsuccessful upload";
}
header("Location: profile.php");
}
}
else
{
echo "unsuccessful";
}
}
echo"
<p>UPLOAD PROFILE PHOTO:</p>
<form action='' method='POST' enctype='multipart/form-data'>
<img src='$profile_pic' width='70' />
<input type='file' name='profilepic' /><br />
<input type='submit' name='uploadpic' value='Upload Image'>
</form>
";
?>
我尝试将$profile_pic_query
作为if语句的一部分,如上所示,并且没有if语句。我也尝试$profile_pic_name = file_get_contents(@$_FILES["profilepic"]["name"]);
有file_get_contents
和没有//saves image to folder userdata/profile_pics...
move_uploaded_file(@$_FILES["profilepic"]["tmp_name"],"C:/xampp/htdocs/folder/userdata/profile_pics/$rand_dir_name/".$_FILES["profilepic"]["name"]);
//saves image url to table...
$profile_pic_name = @$_FILES["profilepic"]["name"];
$profile_pic_query = mysqli_query($connection, "UPDATE users SET profile_pic='C:/xampp/htdocs/folder/userdata/profile_pics/$rand_dir_name/$profile_pic_name' WHERE username='$username'");
,没有区别。
这是我试过的另一种格式,我尝试过没有做任何不同的事情;
<? php
session_start();
if (isset($_SESSION['user_login'])) {
$username = $_SESSION["user_login"];
}
else {
$username = "";
}
?>
这是会话内容......
//var 3 obj models, cushion, backrest and frame , and var chair01 as a group for including 3 obj
var parts = {
cushion:"cushion",
backrest:"bracket",
frame:"frame";
}
var chair01 = new THREE.Object3D();
var loader = new THREE.OBJLoader( manager );
//load obj model with function
loadObj("chair/obj/cushion.obj", parts.cushion, materialCushion);
loadObj("chair/obj/backrest.obj", parts.backrest, materialBackrest);
loadObj("chair/obj/frame.obj", parts.frame, materialFrame);
function loadObj(path, name, material) {
loader.load('model-stuff/' + path, function( object ) {
object.traverse( function ( child ){
if ( child instanceof THREE.Mesh ) {
var uvs = child.geometry.attributes.uv.array;
child.geometry.addAttribute( 'uv2', new THREE.BufferAttribute( uvs, 2 ) );
child.material = material;
child.receiveShadow = true;
child.castShadow = true;
}
});
parts[name] = object;
parts[name].position.y = -10;
chair01.add( parts[name]);
//parts[name] = object;
}, onProgress, onError);
}
//add chair01 into scene
scene.add(chair01);
//remove frame from chair01
manager.onLoad = function() {
chair01.remove(parts.frame);
}
那么会话,查询是否有问题,或者我是否因为某些原因而发出语法错误而未被警告?
****更新**
根据以下建议,我注释掉了;
标题(位置:&#39; profile.php&#39;);
我显然非常受欢迎的错误:
file_get_contents(.jpg):无法打开流:没有此类文件或目录
常见的建议似乎围绕着确保创建了一个合适的tmp_file,但在这里似乎并非如此?
答案 0 :(得分:1)
你有几个问题。
首先,您存储位置的查询是错误的,您的&#34;插入...其中......&#34;形式是不正确的。您应该使用&#34;插入...值...&#34;如MySQL文档中所述。
其次,你不应该在诸如move或mkdir之类的函数中使用相对路径。您可以在此处了解原因:PHP - Failed to open stream : No such file or directory
第三,你不能使用&#34; header()&#34;回声之后。 Header()发送http响应的头文件。一旦开始回显,就无法完成此操作,因为标题已经发送。
答案 1 :(得分:0)
我自己已经解决了这个问题,并希望与任何有类似困境的人分享......有几个明显的问题。好吧,我收到的错误似乎是错误的。错误是关于负责将图像从客户端上传到服务器的硬盘的脚本部分。脚本正确上传并保存图像,但是当我删除路径中不必要的部分时,我得到的错误得到修复。
主要问题在于查询,将图片网址上传到桌面,根本没有发生。当我重新编写查询时,这一切都得到了纠正。看下面的所有代码。
<?php
$check_pic = mysqli_query($connection,"SELECT profile_pic FROM users WHERE username='$username'");
$get_pic_row = mysqli_fetch_assoc($check_pic);
$profile_pic_db = $get_pic_row['profile_pic'];
if ($profile_pic_db == "") {
$profile_pic = "images/default_pic.jpg";
}
else
{
$profile_pic = "userdata/profile_pics/".$profile_pic_db;
}
//script for uploading profile photo to hard disk
if (isset($_FILES['profilepic'])) {
if ((@$_FILES["profilepic"]["type"]=="image/jpeg")) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
$rand_dir_name = substr(str_shuffle($chars), 0, 15);
mkdir("userdata/profile_pics/$rand_dir_name");
if (file_exists("userdata/profile_pics/$rand_dir_name/".@$_FILES["profilepic"]["name"]))
{
echo @$_FILES["profilepic"]["name"]." Already exists";
}
else
{
move_uploaded_file(@$_FILES["profilepic"]["tmp_name"],"userdata/profile_pics/$rand_dir_name/".$_FILES["profilepic"]["name"]);
//update table with url for photo
$profile_pic_loc = "$rand_dir_name/".@$_FILES["profilepic"]["name"];
$profile_pic_query = mysqli_query($connection, "UPDATE users SET profile_pic='$profile_pic_loc' WHERE username='$username'");
if ($profile_pic_query) {
header("Location: profile.php");
}
else
{
die('failure');
}
}
}
}
echo "
<div>
<p>UPLOAD PROFILE PHOTO:</p>
<form action='profile.php' method='POST' enctype='multipart/form-data'>
<img src='$profile_pic' width='70' />
<input type='file' name='profilepic' /><br />
<input type='submit' name='uploadpic' value='Upload Image'>
</form>
</div>
";
?>
改变;
mkdir("C:/xampp/htdocs/folder/userdata/profile_pics/$rand_dir_name");
if (file_exists("C:/xampp/htdocs/folder/userdata/profile_pics/$rand_dir_name/".@$_FILES["profilepic"]["name"]))
和
move_uploaded_file(@$_FILES["profilepic"]["tmp_name"],"C:/xampp/htdocs/folder/userdata/profile_pics/$rand_dir_name/".$_FILES["profilepic"]["name"]);
到
mkdir("userdata/profile_pics/$rand_dir_name");
if (file_exists("userdata/profile_pics/$rand_dir_name/".@$_FILES["profilepic"]["name"]))
{
和
move_uploaded_file(@$_FILES["profilepic"]["tmp_name"],"userdata/profile_pics/$rand_dir_name/".$_FILES["profilepic"]["name"]);
纠正了所有关于'提交到打开文件流'的错误错误以及什么不是......虽然我仍然不知道这意味着什么。
还将查询更正为;
$profile_pic_loc = "$rand_dir_name/".@$_FILES["profilepic"]["name"];
$profile_pic_query = mysqli_query($connection, "UPDATE users SET profile_pic='$profile_pic_loc' WHERE username='$username'");
if ($profile_pic_query) {
header("Location: profile.php");
}
else
{
die('failure');
}
成功将图片网址插入表格。现在就像一个冠军。
答案 2 :(得分:-1)
更改mkdir()的代码可能对您有帮助。
mkdir("userdata/profile_pics/$rand_dir_name");
TO
mkdir("userdata/profile_pics/$rand_dir_name/{$_FILES['profilepic']['name']}");