2011-12-21 81 views
-3

以下是我的代码,用于上传图像并使用各自的图像名称更新数据库。在MySQL数据库中PHP文件上传和更新相同

上传工作正常,但在语法上有一些问题来更新mysql数据库。

function storeimage() 
{ 
    $files = array(); 

    $target_path1 = $_FILES['file1']['tmp_name']; 
    $target_path2 = $_FILES['file2']['tmp_name']; 
    $target_path3 = $_FILES['file3']['tmp_name']; 

    $files = array(1=>'file1',2=>'file2',3=>'file3'); 
    //uploadimages($files)  
    //$target_path = "images/"; 

    foreach($files as $data) 
    { 
     $target_path = $_FILES[$data]['name']; 
     if(move_uploaded_file($_FILES[$data]['tmp_name'], "images/".$target_path)) 
     { 
      $publish = $_POST['publish']; 
      $databaseupdate = "INSERT INTO `uploadfiles`.`uploads` 
       (`id`, `name1`, `name2`, `name3`, `publish`) 
       VALUES (NULL, '$files['file1']','$files['file2']','$files['file3']','$publish')"; 
      $mysqlupdate = mysql_query($databaseupdate); 
      echo "The file ". basename($_FILES[$data]['name']). 
       " has been uploaded<BR>"; 
     } 
     else 
     { 
      echo "There was an error uploading the file, please try again!"; 
     } 
     $target_path =""; 
    } 
} 
+0

请不要在全部大写中写出标题。 – 2011-12-21 20:48:18

+0

我不认为内联替换适用于数组。尝试使用''“。$ files ['file1']。”''' – Corubba 2011-12-21 20:50:19

+1

什么是“但在语法上有一些问题来更新mysql数据库”?你是否得到了错误,他们是什么?或者你只是不喜欢它,并希望其他人重写? – Robert 2011-12-21 20:50:39

回答

0

这是您遇到问题的PHP语法,而不是SQL。

$sql = "INSERT INTO uploads 
     VALUES (NULL,'$files[file1]','$files[file2]','$files[file3]','$publish')"; 

会工作。

但是,这不仅是你的问题。
看来你插入了未知变量,并且不会为查询清理它们。 ,并且您试图在一个查询中插入所有三个并运行三次。 看起来您可能希望将查询移至循环之外。

$names = array();  
foreach($_FILES as $file) 
{  
    if(move_uploaded_file($file['tmp_name'], "images/".$file['name'])) 
    { 
     $names[] = $file['name']; 
    } else { 
     $names[] = ''; 
    } 
} 
if (array_filter($names)) { // at least one file uploaded successfully 
    $publish = mysql_real_escape_string($_POST['publish']); 
    foreach ($names as $i => $name) { 
    $names[$i] = mysql_real_escape_string($name); 
    } 
    $sql = "INSERT INTO uploads VALUES (NULL,'$files[0]','$files[1]','$files[2]','$publish')"; 
    mysql_query($sql) or trigger_error(mysql_error().$sql);  
} 

像这样

+0

是的,或者你可以这样做:'{$ files ['file1']}' - 如果你想插入一个数组项的值为一个字符串 – rroche 2011-12-21 20:55:23

+1

你可以不使用引号索引数组吗?我建议''VALUES(NULL,'{$ files ['file1']},{$ files ['file2']},...)“'代替。 – 2011-12-21 20:55:26

+0

@火箭它是每个变量4个附加符号。似乎对我来说太过于矫枉过正。哦,是的,你可以,在双引号字符串中。 – 2011-12-21 20:59:11

0

首先,你为什么要使用$files['file1']等,要尽量获取文件名?你不应该使用$_FILES[$data]['name']?或者$_FILES['file1']['name'], $_FILES['file2']['name']等。

此外,还有一些SQL引用问题。什么是这样的:

$databaseupdate = "INSERT INTO `uploadfiles`.`uploads` 
    (`id`, `name1`, `name2`, `name3`, `publish`) 
    VALUES (NULL, '" . $_FILES['file1']['name'] . 
    "','" . $_FILES['file2']['name'] . 
    "','" . $_FILES['file3']['name'] ."','$publish')"; 

其次,你迭代“文件1”,“文件2”和“文件3”,但你似乎是试图将它们全部插入到表中的一行。如果你有三个文件,并且你想把它们全部插入到数据库中,你不应该为每个文件插入一行吗?在这种情况下,该表只需要一个“名称”列。

+0

这看起来非常适合评论。改进答案或删除答案,并在OP上张贴相同的通知/评论作为评论。 – 2011-12-21 21:16:21

+0

我无法在问题中添加评论。 – kclair 2011-12-21 21:17:29

+1

这看起来非常适合回答我的问题。欢迎来到Stackoverflow。不要让这个社区的混蛋把你打倒,否则他们会。 – phpmeh 2011-12-21 21:23:45