2014-02-12 4 views
0

Я написал код для загрузки файла в базу данных MySQL, используя php. Ниже приведен мой код для загрузки файла.Ошибка загрузки файла с помощью php

$data['report_type']  = $this->input->post('report_type'); 
     $data['document_type'] = $this->input->post('document_type'); 
     $data['prescription_id'] = $this->input->post('prescription_id'); 
     $data['description']  = $this->input->post('description'); 
     $data['timestamp']  = strtotime(date('Y-m-d') . ' ' . date('H:i:s')); 
     $data['laboratorist_id'] = $this->session->userdata('laboratorist_id'); 
     move_uploaded_file($_FILES["userfile"]["tmp_name"], "uploads/diagnosis_report/" . $_FILES["userfile"]["name"]); 
     $data['file_name'] = $_FILES["userfile"]["name"]; 

     $this->db->insert('diagnosis_report', $data); 
     $this->session->set_flashdata('flash_message', get_phrase('diagnosis_report_created')); 
     redirect(base_url() . 'index.php?laboratorist/manage_prescription/edit/' . $this->input->post('prescription_id'), 'refresh'); 

Всякий раз, когда я пытаюсь загрузить любой файл. Он дает сообщение об ошибке

Column 'file_name' cannot be null

INSERT INTO diagnosis_report (report_type , document_type , prescription_id , description , timestamp , laboratorist_id , file_name) VALUES (0, 0, 0, 0, 1392206996, '1', NULL)

Что не так с моим кодом?

+0

'INSERT INTO diagnosis_report (REPORT_TYPE, document_type, prescription_id, описание , timestamp, labatorist_id, имя_файла) VALUES (0, 0, 0, 0, 1392206996, '1', '') ' –

+0

вы используете frameworkignign framework – Jenz

+0

yes @Jenz! Я использую рамки Codeigniter! – user3116267

ответ

0

Ошибка SQL:

Column 'file_name' cannot be null

относится к последней колонке оператора вставки. Вы пытаетесь установить его на NULL, когда столбец file_name содержит NOT NULL в его определении столбца.

Два решения:

Один, запустить альтер команду таблицы на таблице базы данных, чтобы NULL значения.

ALTER TABLE diagnosis_report MODIFY COLUMN file_name [datatype] DEFAULT NULL [etc] 

Обычно не рекомендуется, если это часть CMS или пакета, который вы не поддерживаете. Если это автономный код, это решение можно использовать.

Или два, изменить ваш PHP не установлен file_name к NULL, а просто пустая строка:

INSERT INTO diagnosis_report (report_type, document_type, prescription_id, description, timestamp, laboratorist_id, file_name) VALUES (0, 0, 0, 0, 1392206996, '1', '') 
+0

Я пробовал свой код, но его просто показывал, что файл успешно загружен, но на самом деле не хранится в db. – user3116267

+0

Можете ли вы подтвердить, что файл становится сохраненным 'using move_uploaded_file'? Если это не так, вы можете сделать небольшую отладку, чтобы проверить, существуют ли файлы в '$ _FILES'. Если нет, это может быть проблема с формой или сервером. – Sean

+0

все еще значение file_name показывает NULL в db! – user3116267

0
$data['file_name'] 

возвращает NULL значение, поскольку пользователь загрузил файлы, которые хранятся в $_FILES переменной, а не в $_POST.

Использование библиотеки Загружайте CodeIgniter в:

http://ellislab.com/codeigniter/user_guide/libraries/file_uploading.html

+0

Я сделал это следующим образом: move_uploaded_file ($ _ POST ["userfile"] ["tmp_name"], "uploads/diagnost_report /". $ _POST ["userfile"] ["name"]); $ data ['file_name'] = $ _FILES ["userfile"] ["name"]; \t \t \t но все еще не удается хранить файл – user3116267

0

Из вашего присоединенного сегмента кода удалить эти две строки: -

move_uploaded_file($_FILES["userfile"]["tmp_name"], "uploads/diagnosis_report/" . $_FILES["userfile"]["name"]); 
$data['file_name'] = $_FILES["userfile"]["name"]; 

Вместо выше двух линий, добавьте ниже строки кода -

$move='/uploads/diagnosis_report/'; 
$uploadfile=$_FILES["userfile"]["name"]; 
$path=$move.basename($uploadfile); 
move_uploaded_file($_FILES["userfile"]["tmp_name"], SITE_ROOT.$path); 
$data['file_name'] = basename($uploadfile); 

Теперь вам нужно сделать еще одну вещь перейти к \ application \ views \ labatorist. Открыть manage_prescription.php, там вы получите ниже сегмент кода

<!------ADD A DIAGNOSTIC REPORT TO THIS PRESCRIPTION--> 
        <div class="box"> 
         <div class="box-header"><span class="title"><?php echo get_phrase('add_diagnosis_report');?></span></div> 
         <div class="box-content"> 
         <?php echo form_open('laboratorist/manage_prescription/create_diagnosis_report' , array('class' => 'form-horizontal validatable'));?> 

Теперь изменить что соответствующие Form_Open к form_open_multipart

<!------ADD A DIAGNOSTIC REPORT TO THIS PRESCRIPTION--> 
        <div class="box"> 
         <div class="box-header"><span class="title"><?php echo get_phrase('add_diagnosis_report');?></span></div> 
         <div class="box-content"> 
         <?php echo form_open_multipart('laboratorist/manage_prescription/create_diagnosis_report' , array('class' => 'form-horizontal validatable'));?> 

       I hope now it will run successfully. Please let me know if it doesn't work. Thanks. 
Смежные вопросы