我有一个从 php.ini 生成的表。我这样做的方式可能不是最有效的方式,因为我自己编写了所有内容并且我不是专家。
当用户将零件号粘贴到上一页的搜索框中时,一切就开始了,然后将其发送到变量 lines
下的 return.php .
return.php
$c = $_POST['c'];
if (!$_SESSION['lines']) {
$_SESSION['lines'] = $_POST['lines'];
}
$partNumber = array(); //define $partNumber as array
$x = -1;
$supplierQuery = "SELECT distinct supplier, quotePartNumber FROM allparts WHERE quotePartNumber = '$q'" ;
$supplierResult = mysqli_query($con, $supplierQuery);
foreach ($_SESSION['lines'] as $q) {
$x = $x + 1; // each time we loop through this, x++
while ($row = mysqli_fetch_array($supplierResult)) {
$partNumber[] = $row['quotePartNumber'];
$customerQuery = "SELECT DISTINCT quoteCustomer FROM $supplier where quotePartNumber = '$q'";
if (!$c) { // $c becomes set once a user types in an end customer - without that, we want ALL generic info to be returned.
$costQuery = "SELECT * FROM $supplier where quotePartNumber = '$partNumber[$x]' ORDER BY quoteCost ASC LIMIT 1" ;
} else {
$costQuery = "SELECT * FROM $supplier where quotePartNumber = '$partNumber[$x]' and quoteCustomer = '$c' ORDER BY quoteCost ASC LIMIT 1" ;
}
$getCustomer = mysqli_query($con, $customerQuery);
}
稍后在我的 table 上,我有这个:
<td><?= $partNumber[$x] ?></td>
<td><?= $cost ?></td>
<td>
<select class="btn btn-danger" onChange="selectCustomerCMR(this.value)">
<option value="" disabled selected><?php if($c) { print $c; } else { print "Select Purchasing Customer";} ?></option>
<?php
while ($row = mysqli_fetch_array($getCustomer)) {
$customerName = $row['quoteCustomer'];
?>
<option><?= $customerName ?></option>
<?php
}
?>
</select>
</td>
对下拉列表的任何更改都会启动此脚本:
<script>
function selectCustomerCMR(str) {
var id = str;
$.ajax({
type: 'POST',
url: 'return.php',
data: {'c':id,'lines':lines},
success:function(data){
$("#info").html(data);
}
});
}
</script>
我正在尝试做什么
假设我生成的表有 3 行,其中包含零件编号
有一个下拉菜单允许用户选择特定客户。当用户单击此按钮时,脚本会获取该值并使用 AJAX 将其发送回同一页面 (return.php),然后使用 $c = $_POST['c'];
获取该值。代码。
我的问题
当 return.php 加载“第二次”时,其值为 $c
,我不知道如何才能更改用户选择的行。现在,每当我从一行的下拉列表中选择一个客户时,return.php 都会重新加载,并将该客户分配到第一行,忽略所有其他行。
我专门创建了$partNumber
作为数组并使用 $x
所以我可以每次 foreach
时增加 x 的值循环迭代。这有效,因此上表中的三行中,第一行是 $partNumber[0]
第二个是$partNumber[1]
等等... 但是我不知道如何将该信息放入 javascript 函数中并在重新加载时将其发送回页面,以便我可以在条件满足时将 SQL 查询更改为 ONLY 操作就在那条线...
感谢您的阅读,并感谢您的帮助!
最佳答案
考虑更改您的 <select>
代码如下:
<select class="btn btn-danger" data-x="<?= $x ?>" onChange="selectCustomerCMR(this)">
然后,您的 Ajax 代码可以更改为:
function selectCustomerCMR(select) {
var id = select.value, x = select.getAttribute("data-x");
$.ajax({
type: 'POST',
url: 'return.php',
data: { c: id, lines: lines, x: x },
success: function(data){
// Update!
}
});
}
这样,你的 PHP 就可以获得 c
和x
.
关于javascript - PHP、AJAX 和服务器客户端的挫败感,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28305485/