2016-11-23 59 views
1

實際工作Ubuntu的(工作PHP語言), 我有轉換成文本的PDF文件,然後我的preg_match爲了提取我需要的數據。PHP:插入到數據庫與阿賈克斯

之後,我把我的數據線放在一個下拉列表

問題:我想用Ajax(據我瞭解),到得到選中的選項並保存到我的數據庫

我讀過許多話題關於這個問題,白白...

這裏有一塊我的代碼,它可能會更形而下!

我的PHP文件:

$file = fopen($fichier_txt, 'r+'); 

if ($file) 
{ 
    $lines = array(); 
    $pattern_GC = '/N°.*\d{4}(\s?\s?[\w\s]*)(\d{5})\s?(\w+)\W+/isU'; 
    $fichier_txt_content = file_get_contents($fichier_txt); 
    $regex_GC = preg_match_all($pattern_GC, $fichier_txt_content, $match_GC); 
// Match regroupant nom/prenom + adresse 
$match_un = explode(PHP_EOL, $match_GC[1][0]); 
$match_nom_prenom = $match_un[2]; 
$match_adresse = $match_un[3]; 
// Match CP 
$match_deux = $match_GC[2][0]; 
// Match ville 
$match_trois = $match_GC[3][0]; 

$opt = array($match_nom_prenom, $match_adresse, $match_deux, $match_trois); 
$i = 0;?> 
<html> 
     <form> 
      <select name="selectBox" class="drop" id="Combobox1" onchange="saveToDatabase(this.value)"> 
      <?php foreach($opt as $val) {?> 
       <option value="$opt[$i]"><?=$val?></option> 
      <?php } ?> 
      </select> 
     </form> 
</html> 

我formulaire_2_test.php文件:

<?php 
    // Database connection to save form lines (PDO) 
      try 
      { 
       $PDO = new PDO('mysql:host=localhost;dbname=autofill_data', 'root', 'password'); 
      } 
      catch (Exception $e) 
      { 
       die('Erreur : ' . $e->getMessage()); 
      } 

     // Get selected option and save into database 
      $selectedOpt = $_POST['selected']; 
      //exit($selectedOpt); --> I put this line in comments since I don't use it everytime. 


      $req = $PDO->prepare("INSERT INTO data_lines(idDistributeur, numLigne, libelle) VALUES(1, 2, :selectedOpt)"); 
      $req->bindParam(':selectedOpt', $selectedOpt); 
      $req->execute($selectedOpt); 
      $data = $req->fetchAll(); 
     } 

    ?> 

喏,這就是我的Ajax腳本(我在JS是新的,我知道有些enormeous錯誤可能會彈出在你面前,對此感到遺憾,關於我的法語命名......)

阿賈克斯:(位於我的PHP文件)

<style> 
    .ui-autocomplete 
    { 
     cursor:pointer; 
     height:120px; 
     overflow-y:scroll; 
    } 
</style> 

<script> 

    function saveToDatabase(selectedValue) 
    { 
     var select = selectedValue; 
     select = $(this).serialize(); 
     $('#Combobox1').on("change", function() 
     { 
      // POST to php script 
      $.ajax 
      ({ 
       type: 'POST', 
       url: 'formulaire_2_test.php', 
       data:{selected:this.value} 
      }).then(function(data){alert(data)}); 
     }); 
    } 

    $(document).ready(function() 
    { 
     saveToDatabase(); 
    }); 

</script> 

我測試了粗略的數值我的PDO連接,它的工作,但我不知道我怎麼能忽略我的PHP變量到它(我不知道使用$ _POST來檢索這個數據,因爲我不刷新任何頁面...) 我也試過INSERT到表VALUES(:名稱,2,3),但它didn也不管用...... 我是否在鑽機中前進?方向? 你會如何考慮這樣做?

PS:我之後的下一步是從下面的下拉列表中刪除選定的選項(爲了在填寫訂閱表格時爲用戶節省一些寶貴的時間)。

EDIT年11月24:我需要我的「FAIS噸喜愛將」選項出現在我的下拉爲默認值,而不是在列表中選擇:autofill

我的最後一個問題:我想刪除所選擇的選項的下拉列表中,因此它不會出現在其他下拉列表中。 這裏是我試過的代碼(不工作):

function removeSelected(value) 
     { 
       $('.drop').change('select', function() 
       { 
        // Definition des variables 
        var value = this.value; 
        var id = this.id; 
        // We del selects with a != id containing options with the same value of the selected one. 
        $("select:not(#" + id + ") option[value='" + value + "']").hide() 
       }); 
     } 

我也試圖與一個.remove()代替.hide()沒有成功!

由於提前,

問候,

斯泰利奧康託斯。

+0

我想補充一點,我在Firefox Consol上測試了我的代碼,我可以看到我的XHR請求,因爲我選擇了一個選項,但它不保存到數據庫中...... –

+0

您可以使用'''$ _POST '''。 Ajax只是一個由JavaScript執行的HTTP請求,而不是瀏覽器窗口。而不是'''data:'selected ='+ select''',只要做'''data:{selected:select}'''。然後你可以在'''$ _POST ['selected']''' –

+0

處選擇你的選項。謝謝你,在我的這條路上! :) –

回答

1

將遵循此評論的PHP代碼:// Database connection to save form lines (PDO)到不同的文件。從您的jQuery ajax函數中,將url設置爲這個新的PHP文件。還將data: 'selected=' + select更改爲data: {selected: select}

現在在你的PHP文件(新的)中設置$selectedOpt = $_POST['selected'];

的PHP代碼的最後一位應該是這樣的:

$req = $PDO->prepare("INSERT INTO data_lines(idDistributeur, numLigne, libelle) VALUES(1, 2, :selectedOpt)"); 
$req->bindParam(':selectedOpt', $selectedOpt); 
$req->execute(); 

編輯:JavaScript的修復

你的JS應該是:

$(document).ready(function() { 
    $('#Combobox1').on('change', function() { 
     $.ajax({ 
      method: 'POST', 
      url: 'save-selection.php', 
      data: { 
       // this is a reference to the select box, which means 
       // this.value is the value of the select box 
       selected: this.value 
      } 
     }).then(function (data) { 
      alert(data); 
     }); 
    }); 
}); 

關於你更新的要求,你可以只需在您的ajax調用下添加$(this).children(':selected').remove();即可。不需要另一個change聽衆。但是,當用戶選擇一個選項時,它會立即將其刪除,因此選擇框只會顯示第一個選項。試試吧,你會明白我的意思。

1

您不能直接從Javascript發送信息到PHP。您必須使用一些REST API或一些管理HTTP請求的HTTP Web服務,然後將其插入到數據庫中。

您可以編寫一個REST API like this,然後簡單地使用$ _ POST [「選擇」]檢索POST的參數,請你用jQuery做。

另外,我建議你使用minAjax

+0

您可以在JavaScript中調用一個新的XMLHttpRequest到一個PHP腳本。沒有必要的REST API。 –

+0

@BenGuest誠然,但REST API是一個很好的工具,很容易掌握。我這樣做。 – freinn

+0

他們是一個非常有用的工具,雖然這個問題可能有點矯枉過正? –