我正在尝试在提交时以相同的形式上传图片和文字。图像文件进入上传文件夹,但图像参考和文本应该进入我的数据库。
当我按提交时。文本转到数据库,图像上传到上传文件夹,但没有插入带有文本的数据库。
我认为我的MYSQL有错误,但我找不到小提示!
这是我的php:
<?php
if(isset($_POST['submitted']) == 1) {
$ds = DIRECTORY_SEPARATOR; //1
$storeFolder = 'uploads'; //2
$text = mysqli_real_escape_string($dbc, $_POST['text']);
$ext = pathinfo($_FILES['file']['name'], PATHINFO_EXTENSION);
$newname = time();
$random = rand(100,999);
$name = $newname.$rand.'.'.$ext;
if(isset($_POST['id']) != ''){
$action = 'updated';
$q = "UPDATE votes SET text = '$text', image = '$name'";
} else{
$action = 'added';
$q = "INSERT INTO votes (text, image) VALUES ('$_POST[text]', '$_POST[name]')";
}
$r = mysqli_query($dbc, $q);
if (!empty($_FILES)) {
$tempFile = $_FILES['file']['tmp_name']; //3
$targetPath = dirname( __FILE__ ) . $ds. $storeFolder . $ds; //4
$targetFile = $targetPath. $name; //5
move_uploaded_file($tempFile,$targetFile); //6
}
if($r) {
$message = '<p class="alert alert-succes">Page was '.$action.'!</p>';
} else {
$message = '<p class="alert alert-danger">Page could not be '.$action.' because: '.mysqli_error($dbc);
$message .= '<p class="alert alert-warning">Query: '.$q.'</p>';
}
}
?>
答案 0 :(得分:1)
$_FILES['image']
在您的代码中的任何位置都不存在,并且可能不是上传文件,因为您正在使用$_FILES['file']
,它也是数组格式。您显然需要使用先前在代码中生成的$name
变量。
您之前使用此行清理了$_POST['text']
:
$text = mysqli_real_escape_string($dbc, $_POST['text']);
但未将其用于INSERT
声明。
更改此行:
$q = "INSERT INTO votes (text, image) VALUES ('$_POST[text]', '$_FILES[image]')";
为:
$q = "INSERT INTO votes (text, image) VALUES ('$text', '$name')";
这也是错误的:
$random = rand(100,999);
$name = $newname.$rand.'.'.$ext;
更改为:
$rand = rand(100,999);
$name = $newname.$rand.'.'.$ext;
您需要非常小心如何命名变量并使用它们。不要忘记他们所命名的内容,即使只是一个从原始定义中得出的拼写错误或大写字母也行不通。 PHP无法猜测&#34;猜测&#34 34;你想做什么 - 你必须非常精确!