2014-02-12 119 views
0

我已經寫了一些代碼來上傳使用PHP在MySQL數據庫中的文件。 以下是我上傳文件的代碼。文件上傳錯誤使用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,laboratorist_id,file_name)VALUES(0,0,0,1392206996,'1','') –

+0

是否使用codeigniter框架 – Jenz

+0

是@Jenz!我正在使用Codeigniter框架! – user3116267

回答

0

SQL錯誤:

Column 'file_name' cannot be null

指的是你的INSERT語句最後一列。當file_name列的列定義中有NOT NULL時,您試圖將其設置爲NULL

兩個解決方案:

一,在你的數據庫表運行ALTER TABLE命令允許NULL值。

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

一般不推薦,如果它是CMS的一部分,或者你不維護的包。如果它是獨立代碼,則此解決方案可用。

或兩個,修改你的PHP不設置file_nameNULL,但只是一個空字符串:

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

我試過你的代碼,但它只是顯示該文件已成功上傳,但並未實際存儲在數據庫中。 – user3116267

+0

你能確認文件正在保存'使用move_uploaded_file'嗎?如果不是這種情況,您可能需要進行一些調試來檢查文件是否存在於$ _FILES中。如果不是,它可能是一個表單或服務器問題。 – Sean

+0

file_name的仍然值在數據庫中顯示NULL! – user3116267

0
$data['file_name'] 

,因爲用戶上傳的文件都存儲在$_FILES變量,而不是在內部返回NULL值$_POST

使用笨的上傳庫:

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

+0

我做了如下 - move_uploaded_file($ _ POST [「userfile」] [「tmp_name」],「uploads/diagnosis_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 \ laboratorist。打開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_openform_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.