2013-03-16 4 views
-1

Привет Я сейчас разрабатываю быстрый прототип для моего проекта степени. У меня есть предыдущая форма, в которой пользователи будут выбирать некоторые параметры из динамических выпадающих списков, и когда они будут сохранены в таблицах, следующая страница предназначена для загрузки файла пользователем. Этот файл затем сохраняется в отдельной таблице с внешним ключом, ссылающимся на другую таблицу. Проблема связана с страницей загрузки файлов, я не включил переменную, представляющую внешний ключ, так как я хотел посмотреть, смогу ли я заставить его работать первым. Если бы кто-нибудь мог помочь, это было бы высоко оценено.Проблема с сохранением загруженного файла в MySql

Ошибка я получаю либо для имени файла загрузки не является допустимым именем столбца в полях запроса вставки или

Если я пытаюсь изменить SQL я получаю вставки или обновления не может выполняться на дочернем столе по мере нарушения ссылочной целостности.

Могу ли я быть толстым? Я застрял уже несколько часов.

Херес PHP

if (isset($_POST['action']) and $_POST['action'] == 'upload') 
{ 

$uploadfile = $_FILES['upload']['tmp_name']; 
$uploadname = $_FILES['upload']['name']; 

if(is_uploaded_file($uploadname)) { 


$uploadtype = $_FILES['upload']['type']; 
$uploaddata = file_get_contents($uploadfile); 



// Prepare user-submitted values for safe database insert 

$uploadname = mysql_real_escape_string($uploadname); 
$uploadtype = mysql_real_escape_string($uploadtype); 
$uploaddata = mysql_real_escape_string($uploaddata); 

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData) 
     VALUES (".$uploadname.",".$uploadtype.",".$uploaddata.")"; 
$exesql=mysql_query($sql) OR die(mysql_error()); 
} 
else { 
echo 'Error: File could not be uploaded.'; 
} 
} 
include("file.html.php"); 

и здесь является file.html.php

<form action="" method="post" enctype="multipart/form-data"> 
     <div> 
      <label for="upload">Upload File: 
      <input type="file" id="upload" name="upload"/></label> 
     </div> 
     <div> 
      <input type="hidden" name="action" value="upload"/> 
      <input type="submit" value="Upload"/> 
     </div> 
    </form> 

Здесь структура таблицы product_logs

Field  Type   Null Key  Default   Extra 
logID  int(5)   NO PRI   NULL   auto_increment 
dateCreated date   NO    NULL  
malResultID int(6)   NO MUL   NULL  
mimeType varchar(50) NO    NULL  
fileData mediumblob  NO    NULL  
fileName varchar(255) NO    NULL 
+0

Спасибо всем, мне удалось исправить эту проблему. –

ответ

0

Необходимо изменить Sql, как-

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData) 
     VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')"; 

Кроме того, как мы видели ваше имя таблицы product_logs

вы можете разделить структуру таблицы product_logs? так что у нас есть лучшее разъяснение вашего вопроса.

Thanks

+0

поле \t Тип \t Null \t Key \t По умолчанию \t Extra LOGID \t Int (5) \t NO \t PRI \t NULL \t auto_increment dateCreated \t Дата \t NO \t \t NULL \t malResultID \t Int (6) \t NO \t MUL \t NULL \t mimeType \t varchar (50) \t NO \t \t NULL \t FILEDATA \t \t MEDIUMBLOB NO \t \t \t NULL имя_файла \t VARCHAR (255) \t NO \t \t NULL –

+0

Таким образом, вы должны ввести dateCreated, malResultID также в вашем SQL заявление, как эти поля также не равно нулю. Другой вопрос - malResultID называется внешним ключом из любой другой таблицы? –

+0

Извините, я повторно отредактировал свое оригинальное сообщение со структурой Im немного новичком, поэтому, если я поместил их в null, это позволит мне просто попробовать загрузить, чтобы увидеть, работает ли это? Большое спасибо за ваш ответ. –

0

Вы забыли одинарные кавычки здесь

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData) 
VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')"; 

и прекратить использование mysql_* ИТС устаревшее, используйте mysqli или pdo

0

Вы забыли кавычки вокруг ваших значений в запросе:

$sql = "INSERT INTO product_logs (fileName, mimeType, fileData) 
     VALUES ('".$uploadname."','".$uploadtype."','".$uploaddata."')"; 
       ^--   ^^    ^^    ^

Обратите внимание, что хранение файлов в БД редко является хорошей идеей, и приводит к серьезным проблемам в будущем.

Если вы разрешаете большие загрузки, обратите внимание, что вы тратите большие объемы памяти на две копии загруженного файла в памяти. Немного МЕНЬЕ плохой метод будет

$sql = "INSERT .... " . mysql_real_escape_string(file_get_contents(...)); 

Сохранение как минимум одной копии пространства для файла.

Смежные вопросы