实际上正在使用 Ubuntu (使用 PHP 语言), 我有一个PDF文件,我转换成文本,然后我preg_match,以提取我需要的数据。
在此之后,我将我的数据行放入下拉列表。
问题:我希望,使用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的新手,我知道一些极端的错误可能会出现在你面前,对不起,关于我的法语命名......)
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),但它也不起作用...... 我正朝着正确的方向前进吗? 你会怎么考虑这样做?
PS:我之后的下一步是从以下下拉列表中删除所选选项(为了在填写订阅表单时为用户节省一些宝贵的时间)。
编辑11月24日:我需要我的“Fais ton choix”选项作为默认值出现在我的下拉列表中,但不在列表选项中:
我的上一期:我想删除下拉列表的选定选项,因此它不会出现在下一个下拉列表中。 这是我尝试的代码(不起作用):
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 :(得分:1)
您无法直接从Javascript向PHP发送信息。您必须使用一些REST API或一些管理HTTP请求的HTTP Web服务,然后插入到您的数据库中。
您可以编写REST API like this,然后只需使用 $ _ POST [&#39; selected&#39;] 来检索您使用JQuery执行的POST请求的参数。
另外,我建议您使用minAjax
答案 1 :(得分: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
监听器。但是,当用户选择一个选项时,它会立即将其删除,因此选择框将只显示第一个选项。尝试一下,你会看到我的意思。