我正在尝试使用PHP和MySql创建文件上载脚本。但是这个sript向我展示了err.php页面(当有任何输入验证错误时应该执行它。)我试过调整它但没有机会。以下是我的PHP脚本
<?php
//Start session
session_start();
//Include database connection details
require_once('default.php');
//Connect to mysql server
$link = mysql_connect(DB_HOST, DB_USER, DB_PSWD);
if(!$link) {
die('Failed to connect to server: ' . mysql_error());
}
//Select database
$db = mysql_select_db(DB_NAME);
if(!$db) {
die("Unable to select database");
}
function clean($str) {
$str = @trim($str);
if(get_magic_quotes_gpc()) {
$str = stripslashes($str);
}
return mysql_real_escape_string($str);
}
//Function to sanitize values received from the form. Prevents SQL injection
$name = clean($_POST['Name']);
$toupld = ($_POST['file']);
$source = clean($_POST['type']);
$Desc = clean($_POST['Desc']);
$By = clean($_POST['By']);
$For = clean($_POST['For']);
if($name == '') {
$errmsg_arr[] = 'Name missing';
$errflag = true;
}
if($toupld == '') {
$errmsg_arr[] = 'Path missing';
$errflag = true;
}
if($source == '') {
$errmsg_arr[] = 'Type missing';
$errflag = true;
}
if($Desc == '') {
$errmsg_arr[] = 'Description missing';
$errflag = true;
}
if($By == '') {
$errmsg_arr[] = 'By missing';
$errflag = true;
}
if($For == '') {
$errmsg_arr[] = 'For missing';
$errflag = true;
}
function findexts ($fname) {
$fname = strtolower($fname) ;
$extensions = split("[/\\.]", $fname) ;
$n = count($extensions)-1;
$extensions = $extensions[$n];
}
$target_path="../notice/";
if($errflag) {
$_SESSION['ERRMSG_ARR'] = $errmsg_arr;
session_write_close();
header("location: ../err.php");
exit();
}
if($_FILES['file']['error']==0){
if(($_FILES['file']['size']<1000000)&&($_FILES['file']['type']=="application/msword")||($_FILES['file']['type']=="application/pdf")){
$ext=findtext($_FILES['file']['name']);
$random=rand(0,5);
$random2=$random.".";
$target=$target.$random2.$ext;
if(move_uploaded_file($_FILES['file']['tmp_name'],$target)){
$qry="INSERT INTO PALMSIS.Notice(NoticeID,Name,Date,Timestamp,Type,Descr,By,For) VALUES('$random','$name',NOW(),NOW(),'$source','$Desc','$By','$For')";
$result=@mysql_query($qry);
if($result){
header("location:./noticeupld.php");
exit();
}
else{
die("query Failed");
}
}
else{
header("location:./success.php");
}
}
else{
header("location:./noproper.php");
}
}
else{
header("location:./error.php");
}?>
答案 0 :(得分:1)
我首先上传一个文件然后查看是否有效...然后添加其他部分并查看问题的开始位置。此代码假定您有一个具有名为“file_name”的文本字段的表单,您可以在其中指定在将文件移动到服务器时要调用的文件,以及作为文件的文件字段。不要忘记你的表格必须是多部分的。这是人们经常忘记的事情,也是造成很多麻烦的原因。
$fileName = $_REQUEST[ 'file_name' ];
$folder = "./";
if ( move_uploaded_file( $_FILES[ 'file' ][ 'tmp_name' ], $folder . $fileName ) ) {
echo "SUCCESS:" . $folder.$fileName . " has been saved";
}
else{
echo "FAIL:";
}
答案 1 :(得分:1)
所有我能想到的就是它上面的文件必须低于1mb,这对于.pdf很容易,图形超过...我会从一些基本的故障排除技术开始。
例如:
if($_FILES['file']['error']==0){
$flag = $flag+1;
echo 'No errors reported on file upload<br>';
}
if($_FILES['file']['size']<1000000){
$flag = $flag+1;
echo 'Size is confirmed under 1mb<br>';
}
if(($_FILES['file']['type']=="application/msword")||($_FILES['file']['type']=="application/pdf")){
$flag = $flag+1;
echo 'Correct Filetype confirmed<br>';
}
通过这种方式,您可以知道哪些人通过了支票。
祝你好运伴侣!
答案 2 :(得分:0)
您可能没有必要,但最好将$errflag
初始化为false,将$errmsg_arr
初始化为空数组。