2016-11-23 8 views
1

на самом деле работает на Ubuntu (работает PHP языка), У меня есть PDF-файл, который я конвертировать в текст, то я preg_match для того, чтобы извлечь данные мне нужно.PHP: вставить в базу данных с помощью AJAX

После этого I поместите мои строки данных в раскрывающийся список.

ПРОБЛЕМА: Я хочу, используя Ajax (насколько я понял), до получить выбранный вариант и сохранить его в моей базе данных.

Я прочитал много темы об этой проблеме, напрасно ...

Вот часть моего кода, он может быть более для бетона!

Мой PHP File:

$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, и я знаю, что некоторые на вас могут появиться огромные ошибки, извините, и о моих французских именах ...)

Ajax: (находится в моем файле 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 (: name, 2, 3), но это didn Я тоже работаю ... Я направляюсь вправо d irection? Как вы считаете это?

PS: Следующим шагом после этого было бы удалить выбранную опцию из следующих выпадающих списков (чтобы сохранить пользователю несколько драгоценных минут при заполнении формы подписки).

EDIT 24 ноября: мне нужен вариант «Fais тонный Choix» появится на моем раскрывающемся списке в качестве значения по умолчанию, но не в настройках списка: 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() без успеха!

Спасибо заранее,

С уважением,

Stelio Kontos.

+0

Я хотел бы добавить, что я проверил свой код на Firefox Consol, я могу увидеть свой запрос XHR, когда я выбираю параметр, но он не сохраняется в базе данных ... –

+0

Вы можете использовать '' '$ _POST '' ''. Ajax - это просто HTTP-запрос, выполняемый javascript, а не окно браузера. Вместо того, чтобы делать '' 'данные: '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'];.

Последнего бит РНР код должны выглядеть это так:

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

Edit: 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); 
     }); 
    }); 
}); 

Что касается обновленного требования, вы можете просто добавьте $(this).children(':selected').remove(); под свой вызов ajax. Нет необходимости в другом слушателе change. Однако, когда пользователь выбрал вариант, он мгновенно удалит его, поэтому в поле выбора будет отображаться только первый вариант. Попробуйте, и вы поймете, что я имею в виду.

1

Вы не можете напрямую отправлять информацию с Javascript на PHP. Вы должны использовать некоторый REST API или некоторый веб-сервис HTTP, который управляет HTTP-запросом, а затем вставляется в вашу базу данных.

Вы можете запрограммировать REST API like this, а затем просто использовать $ _POST [ «выбран»], чтобы получить параметр POST запросить вы сделали с JQuery.

Кроме того, я рекомендую вам использовать minAjax

+0

Вы можете вызвать новый XMLHttpRequest в javascript для PHP-скрипта. API REST не требуется. –

+0

@BenGuest Правда, но REST API - хороший инструмент и простой в освоении. Я делаю так. – freinn

+0

Это очень полезный инструмент, возможно, немного переборщик для этой конкретной проблемы? –

Смежные вопросы