2014-02-10 59 views
0

我有一個腳本從csv文件導入電話號碼。 驗證後,我把PHP數組$data_rec[]上所有的結果與此腳本:進度條和導入數組mysql

while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) 
{ 
$data_rec[]=''.$data[0].''; 
} 

我想後,推杆上我的MySQL DBB與插入到所有的結果,並表示pourcentage用進度條完成。我在網上搜索了幾個小時,但我找不到快速簡單的解決方案。

我的腳本插入到mysql的DBB:

foreach($data_rec as $id => $number) 
{ 
$req=("INSERT INTO contact VALUES('".$idclient."','', '".$numero."','','','','','','','0')"); 
$doins = mysql_query($req) or die(mysql_error()); 

} 

我發現jqueryprogressbar,但我不明白如何與我的腳本安裝。 你有想法嗎? 非常感謝


謝謝你的幫助。 我讓你的鏈接,並找到(我認爲)我的問題的一種方式。 但它仍然無法正常工作。 我看到了進度條,但是當所有結果都被插入時(在結尾處)。一個想法幫助我?

在我的頁面test.php我有一個ajax腳本。

<script type='text/javascript'> 
$(document).ready(function() { 
$("#import_2").click(function (event) { 
$("#import_2").attr('class', 'vert'); 
$('div#display_import').empty(); // we empty the div to display the result (in case of old result) 

     $.ajax({                
      type: "POST", 
      url: "testtest.php", 
      data: "fonction=importok", 
      success: function(msg){ 
      $('div#display_import').fadeIn();   // Fade in on the result div 
      $("div#display_import").append(msg);  // display the result of the div 
      } 
      }); 
    }); 
}); 

</script> 

而且在一個div一個按鈕,開始導入:

<div style="margin:10px 10px 10px 10px;width: 150px; height: 20px;"> 
     <label id="import_2" style="width: 150px; height: 20px;padding-left: 10px; cursor: pointer;" class=""> 
      <span style="vertical-align: 0px; margin-right: 10px;"><img id="img_tous" src="images/icone-bouton-gris.png" width="10" height="10" style="margin-right: 5px;" /> <strong>IMPORT</strong></span> 
      </label> 
     </div> 

<div id="display_import" class="texte_13"> 
</div> 

在testtest.php我有我的PHP腳本導入MySQL的DBB 的$ _SESSION [ 'listeok'] countain的陣列用我所有的結果(約12 000 「號」)

if(isset($_POST['fonction']) and $_POST['fonction']=="importok") 
{ 
// display progress bar 
echo '<div id="progress" style="width:500px;border:1px solid #ccc;"></div>'; 
echo '<div id="information" style="width"></div>'; 
// Total processes 
$data=$_SESSION['listeok']; 
$total=10; 
// Loop through process 
for($i=1; $i<=$total; $i++) 
{ 
    // Calculate the percentation 
    $percent = intval($i/$total * 100)."%"; 

    // Javascript for updating the progress bar and information 
    echo '<script language="javascript"> 
    document.getElementById("progress").innerHTML="<div style=\"width:'.$percent.';background-color:#ddd;\">&nbsp;</div>"; 
    document.getElementById("information").innerHTML="'.$i.' row(s) processed."; 
    </script>'; 

    $req=("INSERT INTO contact VALUES('".$i."','', '".$data[$i]."','','','','','','','0')");  
    $doins = mysql_query($req) or die(mysql_error()); 

    // This is for the buffer achieve the minimum size in order to flush data 
    echo str_repeat(' ',1024*64); 


    // Send output to browser immediately 
    flush(); 


    // Sleep one second so we can see the delay 
    sleep(1); 
} 

// Tell user that the process is completed 
echo '<script language="javascript">document.getElementById("information").innerHTML="Process completed" </script>'; 


} 
+0

http://stackoverflow.com/q/18566362/1296333 或 HTTP: //stackoverflow.com/q/18735848/1296333 – agassner

+0

謝謝。對於stackoverflow.com/q/18566362/1296333,當結果非常大(10000結果)時,腳本非常慢。如果您將睡眠時間從1秒改爲0.1,則會導致瀏覽器錯誤。對於另一種解決方案,我無法找到關於安裝jqueryprogressbar的更多信息......您是否有更多信息的鏈接?我不是jquery的專業人員:) – Sylvain

回答

0

你好這裏是一般的想法...

在你的循環中,你每進行一個步驟將你的進度寫入臨時文件。

$i = 0; 
foreach($data_rec as $id => $number) 
{ 
    $req=("INSERT INTO contact 
     VALUES('".$idclient."','', '".$numero."','','','','','','','0')"); 
     $doins = mysql_query($req) or die(mysql_error()); 
    if($i++ % 100 == 0){ 
    file_put_contents("anytempfile","$i of ".count($data_red)); 
    } 

} 

在html端,你只需通過ajax每0.5秒調用一次該文件的內容並顯示它。現在你可以在沒有太多開銷的情況下看你的進度

爲什麼一個文件?因爲一個簡單的靜態文件會導致極低的開銷(你不需要初始化會話奧德任何腳本有關的東西)