2014-10-09 99 views
0

我們正在開發一個內部使用的應用程序,僅通過表單和PHP腳本將2個圖像和一些文本框上傳到MySQL數據庫。表格上傳多個圖像和數據到MySQL數據庫通過PHP

我們可以得到一個簡單的表單,在只有文本框沒有提交圖像字段的情況下工作,我們可以得到一個只有圖像字段的表單,並將圖像作爲BLOB上傳到mySQL數據庫,但是當將2我們只能讓它上傳圖片,而不是文本框。

請在下面找到我們的php上傳腳本的代碼,當我們的表單被提交時,這個上傳到數據庫的2個圖像字段爲BLOB,但沒有其他文本字段,任何幫助指出我們出錯的地方是不勝感激:

<?php 
$con=mysqli_connect("localhost","Username","Password","outofhours"); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$maxsize = 10000000; //set to approx 10 MB 

$sitename = mysqli_real_escape_string($con, $_POST['sitename']); 
$siteaddress = mysqli_real_escape_string($con, $_POST['siteaddress']); 
$sitepostcode = mysqli_real_escape_string($con, $_POST['sitepostcode']); 
$eqmake = mysqli_real_escape_string($con, $_POST['eqmake']); 
$eqmodel = mysqli_real_escape_string($con, $_POST['eqmodel']); 
$eqdesc = mysqli_real_escape_string($con, $_POST['eqdesc']); 
$eqserial = mysqli_real_escape_string($con, $_POST['eqserial']); 
$eqassetno = mysqli_real_escape_string($con, $_POST['eqassetno']); 
$eqconttype = mysqli_real_escape_string($con, $_POST['eqconttype']); 
$brewery = mysqli_real_escape_string($con, $_POST['brewery']); 
$date = mysqli_real_escape_string($con, $_POST['date']); 
$onsitetime = mysqli_real_escape_string($con, $_POST['onsitetime']); 
$offsitetime = mysqli_real_escape_string($con, $_POST['offsitetime']); 
$custprintname = mysqli_real_escape_string($con, $_POST['custprintname']); 
$custposition = mysqli_real_escape_string($con, $_POST['custposition']); 
$engname = mysqli_real_escape_string($con, $_POST['engname']); 

// check if a file was submitted 
if(!isset($_FILES['engsig1'])) 
{ 
    echo '<p>Please select a file</p>'; 
} 
else 
{ 
    try { 
    $msg= upload(); //this will upload your image 
    echo $msg; //Message showing success or failure. 
    } 
    catch(Exception $e) { 
    echo $e->getMessage(); 
    echo 'Sorry, could not upload file'; 
    } 
} 



// the upload function 

function upload() { 
    include "file_constants.php"; 
    $maxsize = 10000000; //set to approx 10 MB 

    //check associated error code 
     if($_FILES['engsig1']['error']==UPLOAD_ERR_OK) { 

     //check whether file is uploaded with HTTP POST 
     if(is_uploaded_file($_FILES['engsig1']['tmp_name'])) {  

      //checks size of uploaded image on server side 
      if($_FILES['engsig1']['size'] < $maxsize) { 

       //checks whether uploaded file is of image type 
       $finfo = finfo_open(FILEINFO_MIME_TYPE); 
       if(strpos(finfo_file($finfo, $_FILES['engsig1']['tmp_name']),"image")===0) {  
        // prepare the image for insertion 
        $imgData1 =addslashes (file_get_contents($_FILES['engsig1']['tmp_name'])); 
        $imgData2 =addslashes (file_get_contents($_FILES['custsig1']['tmp_name'])); 

        // put the image in the db... 
        // database connection 
        mysql_connect($host, $user, $pass) OR DIE (mysql_error()); 

        // select the db 
        mysql_select_db ($db) OR DIE ("Unable to select db".mysql_error()); 

        // our sql query 
        $sql = "INSERT INTO oohours (sitename, siteaddress, sitepostcode, eqmake, eqmodel, eqdesc, eqserial, eqassetno, eqconttype, brewery, date, onsitetime, offsitetime, custprintname, custsig1, custposition, engname, engsig1) 
        VALUES 
        ('$sitename', '$siteaddress', '$sitepostcode', '$eqmake', '$eqmodel', '$eqdesc', '$eqserial', '$eqassetno', '$eqconttype', '$brewery', '$date', '$onsitetime', '$offsitetime', '$custprintname', '{$imgData1}', '$custposition', '$engname', '{$imgData2}')"; 

        // insert the image 
        mysql_query($sql) or die("Error in Query: " . mysql_error()); 
        $msg='<p>Image successfully saved in database with id ='. mysql_insert_id().' </p>'; 
       } 
       else 
        $msg="<p>Uploaded file is not an image.</p>"; 
      } 
      else { 
       // if the file is not less than the maximum allowed, print an error 
       $msg='<div>File exceeds the Maximum File limit</div> 
       <div>Maximum File limit is '.$maxsize.' bytes</div> 
       <div>File '.$_FILES['engsig1']['name'].' is '.$_FILES['engsig1']['size']. 
       ' bytes</div><hr />'; 
       } 
     } 
     else 
      $msg="File not uploaded successfully."; 

    } 
    else { 
     $msg= file_upload_error_message($_FILES['engsig1']['error']); 
    } 
    return $msg; 
} 

// Function to return error message based on error code 

function file_upload_error_message($error_code) { 
    switch ($error_code) { 
     case UPLOAD_ERR_INI_SIZE: 
      return 'The uploaded file exceeds the upload_max_filesize directive in php.ini'; 
     case UPLOAD_ERR_FORM_SIZE: 
      return 'The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form'; 
     case UPLOAD_ERR_PARTIAL: 
      return 'The uploaded file was only partially uploaded'; 
     case UPLOAD_ERR_NO_FILE: 
      return 'No file was uploaded'; 
     case UPLOAD_ERR_NO_TMP_DIR: 
      return 'Missing a temporary folder'; 
     case UPLOAD_ERR_CANT_WRITE: 
      return 'Failed to write file to disk'; 
     case UPLOAD_ERR_EXTENSION: 
      return 'File upload stopped by extension'; 
     default: 
      return 'Unknown upload error'; 
    } 
} 
?> 
+1

你正在使用'MYSQL'和'MYSQLI'函數通過對方 – Dorvalla 2014-10-09 08:02:33

回答

0

你的錯誤可能在於你正在使用mysql和mysqli的功能,通過彼此的事實。這沒有用。要麼你去與mysqli或你有mysql ..我會去mysqli。

我的意思是,檢查你自己。你用mysqli來清理它們,但是在連接數據庫的上傳函數中,你使用了一個mysql函數。

    // put the image in the db... 
        // database connection 
        mysql_connect($host, $user, $pass) OR DIE (mysql_error()); 

        // select the db 
        mysql_select_db ($db) OR DIE ("Unable to select db".mysql_error()); 

        // our sql query 
        $sql = "INSERT INTO oohours (sitename, siteaddress, sitepostcode, eqmake, eqmodel, eqdesc, eqserial, eqassetno, eqconttype, brewery, date, onsitetime, offsitetime, custprintname, custsig1, custposition, engname, engsig1) 
        VALUES 
        ('$sitename', '$siteaddress', '$sitepostcode', '$eqmake', '$eqmodel', '$eqdesc', '$eqserial', '$eqassetno', '$eqconttype', '$brewery', '$date', '$onsitetime', '$offsitetime', '$custprintname', '{$imgData1}', '$custposition', '$engname', '{$imgData2}')"; 

        // insert the image 
        mysql_query($sql) or die("Error in Query: " . mysql_error()); 
        $msg='<p>Image successfully saved in database with id ='. mysql_insert_id().' </p>'; 

是MySQL的功能,當你使用,其餘的mysqli

<?php 
$con=mysqli_connect("localhost","Username","Password","outofhours"); 
// Check connection 
if (mysqli_connect_errno()) { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
} 

$maxsize = 10000000; //set to approx 10 MB 

$sitename = mysqli_real_escape_string($con, $_POST['sitename']); 
$siteaddress = mysqli_real_escape_string($con, $_POST['siteaddress']); 
$sitepostcode = mysqli_real_escape_string($con, $_POST['sitepostcode']); 
$eqmake = mysqli_real_escape_string($con, $_POST['eqmake']); 
$eqmodel = mysqli_real_escape_string($con, $_POST['eqmodel']); 
$eqdesc = mysqli_real_escape_string($con, $_POST['eqdesc']); 
$eqserial = mysqli_real_escape_string($con, $_POST['eqserial']); 
$eqassetno = mysqli_real_escape_string($con, $_POST['eqassetno']); 
$eqconttype = mysqli_real_escape_string($con, $_POST['eqconttype']); 
$brewery = mysqli_real_escape_string($con, $_POST['brewery']); 
$date = mysqli_real_escape_string($con, $_POST['date']); 
$onsitetime = mysqli_real_escape_string($con, $_POST['onsitetime']); 
$offsitetime = mysqli_real_escape_string($con, $_POST['offsitetime']); 
$custprintname = mysqli_real_escape_string($con, $_POST['custprintname']); 
$custposition = mysqli_real_escape_string($con, $_POST['custposition']); 
$engname = mysqli_real_escape_string($con, $_POST['engname']); 

所以在這一點上,你已經建立了在功能mysql的連接,但你的文本在mysqli的消毒,所以它不知道該怎麼辦。簡單地說,作爲一個bove,你選擇了一個或另一個;)

+0

你好,我們已經改變它到MySQL,但它仍然不會工作: http:///notepad.cc/hoislaso56 我們錯過了什麼嗎? 謝謝 – 2014-10-09 08:42:36

+0

回聲$ sql,看看它返回什麼,並通過PHP我的管理員,看看是否有用?有些地方沒有設置我猜。穿過它之後,我現在看不到這個問題。 – Dorvalla 2014-10-09 09:21:51

+0

我們回顯出來了,除了圖片之外,所有的值都顯示爲空白。 – 2014-10-09 09:28:34