2012-02-03 54 views
1

- 我的表中有一些我想以excel格式導出的行。這一步相當於用戶輸入搜索條件,所有匹配的行將被導出到Excel文件中。在Excel中導出數據,然後使用PHP從Excel導入。數據庫是MySQL

- 用戶對excel文件進​​行更改。添加或更新行。

- 用戶上傳文件,所有更新的行在數據庫中得到更新,並且所有添加的行都被添加到數據庫中。

我想在PHP中做的所有事情以及它使用的數據庫是MySQL。服務器正在運行Linux(沒有COM!)

我有導出和導入部分,我上面單獨做了解釋。

我正在使用PHPExcelReader來讀取文件並保存它。但是,這要求用戶先下載模板,從導出的Excel中複製數據並將其粘貼到模板中。

對於導出,我只是創建一個簡單的HTML表,並愚弄瀏覽器,它是一個Excel! Excel會在保存該文件的同時打開HTML表格,但當然,它將更改格式並使其有效Excel文件。

請問我該如何讓它工作一些想法? :/

謝謝......我非常感謝你的幫助。

回答

2

我想建議你PHPExcel庫。

http://phpexcel.codeplex.com/

你可以導入,導出,PDF等我覺得這是一個偉大的圖書館。

+0

最大的好處......它是一個用於編寫和讀取xls文件的單一庫,並且由於OP需要同時執行這兩個操作,因此這比單獨的不兼容庫用於讀取和寫入 – 2012-02-04 11:06:14

1

**

  • EXPORTING目的

**

<?php 
    mysql_connect("localhost","root",""); 
    mysql_select_db("school"); 
?> 

<html> 
    <head> 
     <script type="text/javascript" src="../js/exp_stdsub.js"></script> 
    </head> 
     <hr /> 
          <u><h3>Export your Data here</h3></u> 
          <form action="" method="post"> 
             <select name="expstd" id="expstd" onclick="return expsubjs(this.value);"> 
              <option>Select Standared</option> 
            <?php 
             $exe_sel_std = mysql_query("SELECT * from s_standared"); 
             while($r_sel_std = mysql_fetch_array($exe_sel_std)){ 
              $sel_stdid = $r_sel_std['std_id']; 
              $sel_std = $r_sel_std['std']; ?> 
              <option value="<?php echo $sel_stdid; ?>"><?php echo $sel_std; ?></option> 
              <?php } ?> 
              </select></td> 


           <input type="submit" class="btn btn-green" name="exp_stdque" value="Export Standardwise Question"> 

          </form> 
         </table> 

<?php 

//EDIT YOUR MySQL Connection Info: 
$DB_Server = "localhost";  //your MySQL Server 
$DB_Username = "root";     //your MySQL User Name 
$DB_Password = "";    //your MySQL Password 
$DB_DBName = "school";    //your MySQL Database Name 
$DB_TBLName = "s_question";    //your MySQL Table Name 

if(isset($_POST['exp_stdque'])) { 
    $exstdid = $_POST['expstd']; 

//$DB_TBLName, $DB_DBName, may also be commented out & passed to the browser 
//as parameters in a query string, so that this code may be easily reused for 
//any MySQL table or any MySQL database on your server 

//DEFINE SQL QUERY: 
//edit this to suit your needs 
$sql = "Select * from $DB_TBLName WHERE std_id = $exstdid"; 

//Optional: print out title to top of Excel or Word file with Timestamp 
//for when file was generated: 
//set $Use_Titel = 1 to generate title, 0 not to use title 
$Use_Title = 1; 
//define date for title: EDIT this to create the time-format you need 
$now_date = DATE('m-d-Y H:i'); 
//define title for .doc or .xls file: EDIT this if you want 
$title = "Dump For Table $DB_TBLName from Database $DB_DBName on $now_date"; 
/* 

Leave the connection info below as it is: 
just edit the above. 

(Editing of code past this point recommended only for advanced users.) 
*/ 
//create MySQL connection 
$Connect = @MYSQL_CONNECT($DB_Server, $DB_Username, $DB_Password) 
    or DIE("Couldn't connect to MySQL:<br>" . MYSQL_ERROR() . "<br>" . MYSQL_ERRNO()); 
//select database 
$Db = @MYSQL_SELECT_DB($DB_DBName, $Connect) 
    or DIE("Couldn't select database:<br>" . MYSQL_ERROR(). "<br>" . MYSQL_ERRNO()); 
//execute query 
$result = @MYSQL_QUERY($sql,$Connect) 
    or DIE("Couldn't execute query:<br>" . MYSQL_ERROR(). "<br>" . MYSQL_ERRNO()); 

//if this parameter is included ($w=1), file returned will be in word format ('.doc') 
//if parameter is not included, file returned will be in excel format ('.xls') 
IF (ISSET($w) && ($w==1)) 
{ 
    $file_type = "msword"; 
    $file_ending = "doc"; 
}ELSE { 
    $file_type = "vnd.ms-excel"; 
    $file_ending = "xls"; 
} 
//header info for browser: determines file type ('.doc' or '.xls') 
HEADER("Content-Type: application/$file_type"); 
HEADER("Content-Disposition: attachment; filename=database_dump.$file_ending"); 
HEADER("Pragma: no-cache"); 
HEADER("Expires: 0"); 

/* Start of Formatting for Word or Excel */ 

IF (ISSET($w) && ($w==1)) //check for $w again 
{ 
    /* FORMATTING FOR WORD DOCUMENTS ('.doc') */ 
    //create title with timestamp: 
    IF ($Use_Title == 1) 
    { 
     ECHO("$title\n\n"); 
    } 
    //define separator (defines columns in excel & tabs in word) 
    $sep = "\n"; //new line character 

    WHILE($row = MYSQL_FETCH_ROW($result)) 
    { 
     //set_time_limit(60); // HaRa 
     $schema_insert = ""; 
     FOR($j=0; $j<mysql_num_fields($result);$j++) 
     { 
     //define field names 
     $field_name = MYSQL_FIELD_NAME($result,$j); 
     //will show name of fields 
     $schema_insert .= "$field_name:\t"; 
      IF(!ISSET($row[$j])) { 
       $schema_insert .= "NULL".$sep; 
       } 
      ELSEIF ($row[$j] != "") { 
       $schema_insert .= "$row[$j]".$sep; 
       } 
      ELSE { 
       $schema_insert .= "".$sep; 
       } 
     } 
     $schema_insert = STR_REPLACE($sep."$", "", $schema_insert); 
     $schema_insert .= "\t"; 
     PRINT(TRIM($schema_insert)); 
     //end of each mysql row 
     //creates line to separate data from each MySQL table row 
     PRINT "\n----------------------------------------------------\n"; 
    } 
}ELSE{ 
    /* FORMATTING FOR EXCEL DOCUMENTS ('.xls') */ 
    //create title with timestamp: 
    IF ($Use_Title == 1) 
    { 
     ECHO("$title\n"); 
    } 
    //define separator (defines columns in excel & tabs in word) 
    $sep = "\t"; //tabbed character 

    //start of printing column names as names of MySQL fields 
    FOR ($i = 0; $i < MYSQL_NUM_FIELDS($result); $i++) 
    { 
     ECHO MYSQL_FIELD_NAME($result,$i) . "\t"; 
    } 
    PRINT("\n"); 
    //end of printing column names 

    //start while loop to get data 
    WHILE($row = MYSQL_FETCH_ROW($result)) 
    { 
     //set_time_limit(60); // HaRa 
     $schema_insert = ""; 
     FOR($j=0; $j<mysql_num_fields($result);$j++) 
     { 
      IF(!ISSET($row[$j])) 
       $schema_insert .= "NULL".$sep; 
      ELSEIF ($row[$j] != "") 
       $schema_insert .= "$row[$j]".$sep; 
      ELSE 
       $schema_insert .= "".$sep; 
     } 
     $schema_insert = STR_REPLACE($sep."$", "", $schema_insert); 
     //following fix suggested by Josue (thanks, Josue!) 
     //this corrects output in excel when table fields contain \n or \r 
     //these two characters are now replaced with a space 
     $schema_insert = PREG_REPLACE("/\r\n|\n\r|\n|\r/", " ", $schema_insert); 
     $schema_insert .= "\t"; 
     PRINT(TRIM($schema_insert)); 
     PRINT "\n"; 
    } 
} 
} 

?> 

IMPORTING FROM EXCEL INTO MySQL USING PHP

<table> 
        <form enctype="multipart/form-data" action="" method="post"> 
         <input type="hidden" name="MAX_FILE_SIZE" value="2000000" /> 
          <tr> 
          <td><h5><b>Select Standared</b></h5></td> 
          <td><select name="chap_sel_std" id="chap_sel_std"> 
                 <option>Select Standared</option> 
               <?php 
                $exe_sel_std = mysql_query("SELECT * from s_standared"); 
                while($r_sel_std = mysql_fetch_array($exe_sel_std)){ 
                 $sel_stdid = $r_sel_std['std_id']; 
                 $sel_std = $r_sel_std['std'];?> 

                 <option value="<?php echo $sel_stdid; ?>"><?php echo $sel_std;?></option> 
                 <?php } ?> 
           </select></td> 
          </tr> 
          <tr> 
           <td><h5><b>Select Font</b></h5></td> 
           <td><select name="sel_f_gn_que"> 
            <option>Select Font</option> 
             <?php 
              $xf = mysql_query("SELECT * from s_font"); 
              while($rquef = mysql_fetch_array($xf)){ 
               $f_id = $rquef['f_id']; 
               $f_name = $rquef['f_name']; ?> 
            <option value="<?php echo $f_id; ?>"><?php echo $f_name; }?> </option> 
           </select></td> 
          </tr> 
          <tr> 
           <td><h5><b>Upload Question<h5><b></td> 
           <td> 
            <input type="file" name="file" id="file" class="btn"> 
           </td> 
          </tr> 
          <tr> 
           <td></td> 
           <td colspan="2"><input type="submit" class="btn btn-green big" name="add_que" value="Add Questions"></td> 
           <td><input type="submit" name="saveandexit" class="" value="Finish" onclick="close();"></td> 
          </tr> 
        </form> 
        </table> 
        </div>     

    <?php 

      $data = array(); 

    //$db =& DB::connect("mysql://[email protected]/names", array()); 
    //if (PEAR::isError($db)) { die($db->getMessage()); } 
     //quetype difficulty standard subject chap que marks 

    function add_person($quetype,$dif, $subject,$chap_name,$que,$marks) 
    { 
    global $data, $db; 

    //$sth = $db->prepare("INSERT INTO names VALUES(0, ?, ?, ?, ?)"); 
    // $db->execute($sth, array($first, $middle, $last, $email)); 

    $data []= array(
     'quetype' => $quetype, 
     'difficulty' => $dif, 
     'subject' => $subject, 
     'chap' => $chap_name, 
     'que' => $que, 
     //'ans' => $ans, 
     'marks' => $marks 

    ); 
    } 

    if(!isset($_FILES['file']['tmp_name'])){ 
     echo ""; 
    }elseif($_FILES['file']['tmp_name']) 
    { 
    $dom = DOMDocument::load($_FILES['file']['tmp_name']); 
    $rows = $dom->getElementsByTagName('Row'); 
    $first_row = true; 
    foreach ($rows as $row) 
    { 
     if (!$first_row) 
     { 
     $quetype = ""; 
     $dif = ""; 
     $subject = ""; 
     $chap_name = ""; 
     $que = ""; 
     //$ans = ""; 
     $marks = ""; 

     $index = 1; 
     $cells = $row->getElementsByTagName('Cell'); 
     foreach($cells as $cell) 
     { 
      $ind = $cell->getAttribute('Index'); 
      if ($ind != null) $index = $ind; 

      if ($index == 1) $quetype = $cell->nodeValue; 
      if ($index == 2) $dif = $cell->nodeValue; 
      if ($index == 4) $subject = $cell->nodeValue; 
      if ($index == 6) $chap_name = $cell->nodeValue; 
      if ($index == 8) $que = $cell->nodeValue; 
      //if ($index == 9) $ans = $cell->nodeValue; 
      if ($index == 9) $marks = $cell->nodeValue; 

      $index += 1; 
     } 
     add_person($quetype,$dif, $subject,$chap_name,$que,$marks); 

     if(isset($_POST['add_que'])){  

       $chap_sel_std = $_POST['chap_sel_std']; 
       echo $simquefnt = $_POST['sel_f_gn_que']; 

        //que_id quetype_id chap_id sub_id std_id que dif_id marks que_cdate 
      //$chap_sel_std = $_POST['chap_sel_std']; //que_id quetype_id chap_id sub_id std_id que dif_id marks que_cdate 
      mysql_query("INSERT INTO 
          s_question 
          VALUES (null,'$quetype','$chap_name','$subject','$chap_sel_std','$que','NO IMAGE','$dif','$marks','$simquefnt','$current')");               
    //   header("location:../admin/quetionaris.php#tabs-que"); 
     echo "Successfully Added"; 
      } 
     } 
     $first_row = false; 
    } 
    } 
    ?>