作者 主題: 關於form 的問題  (閱讀 2791 次)

0 會員 與 1 訪客 正在閱讀本文。

ryan

  • 可愛的小學生
  • *
  • 文章數: 19
    • 檢視個人資料
關於form 的問題
« 於: 2013-10-09 02:09 »
大家好 想請問一下我的form 內如果有兩個submit, 第一個sumbit 是要預覽excel 第二個是把資料存到資料庫內
不過 第二個sumbit 抓不到第一個的資料 
我把我的code 貼上來,我想要在按下insert後抓$data的資料然後寫入到資料庫,請問該怎麼改?

 <form action="" method="post" enctype="multipart/form-data">
            <input type="file" name="file" id="file"/><br/>
            <input type="submit" name="preview" value="預覽"/>
            <input type="submit" name="insert" value="寫入資料庫" onclick="temp()" />   
       
 </form>
<?php
   require('connect.php'); //資料庫
   require('Classes/PHPExcel.php'); //PHPExcel
   require('Classes/PHPExcel/IOFactory.php'); //PHPExcel      

   if(isset($_POST['preview'])){
      echo preview();
   }
   elseif(isset($_POST['insert'])){
      echo insert();
   }
 $data;
   
   //預覽
   function preview(){
      $filename;
      if($_FILES["file"]["error"]==0){
         move_uploaded_file($_FILES["file"]["tmp_name"], "./upload/".$_FILES["file"]["name"]);
            $filename = $_FILES["file"]["name"];   
      }   
      $reader = PHPExcel_IOFactory::createReader('Excel2007'); // 讀取2007 excel 檔案
      $PHPExcel = $reader->load("upload/".$filename); // 檔案名稱
      $sheet = $PHPExcel->getSheet(0); // 讀取第一個工作表(編號從 0 開始)
      
      $highestRow  = $sheet->getHighestRow(); // 取得總列數
      $highestColumn = $sheet->getHighestColumn(); // 取得行列數
      $highestColumnIndex = PHPExcel_Cell::columnIndexFromString($highestColumn); // 字母轉數字
      
      echo "<table border='1'>" ;
      echo "<tr>
            <th>username</th>
            <th>password</th>
         </tr>";

      // 一次讀取一列
      for ($row = 1; $row <= $highestRow ; ++$row) {
         echo "<tr>";
         for ($column = 0; $column < $highestColumnIndex; ++$column) {
            $val = $sheet->getCellByColumnAndRow($column, $row)->getValue();
            echo "<td>".$val."</td>" ;
            global $data;
            $data[$row][$column] = $sheet->getCellByColumnAndRow($column, $row)->getValue();
         }   
         
         echo "</tr>";
      }
      echo "</table>";
   }   
   //寫入
   function insert(){   
      global $data;
      $sql = "INSERT INTO `excel`.`user` (`username`,password`)VALUES('$data[0]','$data[1]')";
   }
?>   
 





Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: 關於form 的問題
« 回覆 #1 於: 2013-10-09 09:39 »
大家好 想請問一下我的form 內如果有兩個submit, 第一個sumbit 是要預覽excel 第二個是把資料存到資料庫內
不過 第二個sumbit 抓不到第一個的資料 
我把我的code 貼上來,我想要在按下insert後抓$data的資料然後寫入到資料庫,請問該怎麼改?

 <form action="" method="post" enctype="multipart/form-data">
            <input type="file" name="file" id="file"/><br/>
            <input type="submit" name="preview" value="預覽"/>
            <input type="submit" name="insert" value="寫入資料庫" onclick="temp()" />   
       
 </form>

兩個 submit 是不同的請求,要在 insert 抓到 preview 資料
只能在 insert 時呼叫一次 preview(),但是資料不要直接輸出
用 ob_start 抓輸出的資料,ob_start 用法參考官網說明

http://tw2.php.net/manual/en/function.ob-get-contents.php

ryan

  • 可愛的小學生
  • *
  • 文章數: 19
    • 檢視個人資料
Re: 關於form 的問題
« 回覆 #2 於: 2013-10-14 19:02 »
謝謝Y大

再請問一下一個問題

如果我有兩個function A 跟B

我在A內的一個變數想要在B funtion內用

如果不用global的話還有其他方法嗎

謝謝

Yamaka

  • 俺是博士!
  • *****
  • 文章數: 4913
    • 檢視個人資料
    • http://www.ecmagic.com
Re: 關於form 的問題
« 回覆 #3 於: 2013-10-15 11:44 »
謝謝Y大
再請問一下一個問題
如果我有兩個function A 跟B
我在A內的一個變數想要在B funtion內用
如果不用global的話還有其他方法嗎
謝謝

用傳回值、包裝成物件、放 session 或是放 memcached 裡......需求不同有不同解法