[英]PHP, AJAX, and server-client frustrations
我有一個從php生成的表。 因為我是自己寫的,而且我不是專家,所以我這樣做的方法可能不是最有效的方法。
當用戶將零件號粘貼到上一頁的搜索框中時,一切就開始了,然后將其發送到此處的變量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);
}
后來在我的桌子上,我有這個:
<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'];
捕獲$c = $_POST['c'];
碼。
當return.php使用$c
的值加載“第二次”時,我不知道如何制作它,以便用戶選擇的行被更改 。 現在,無論何時我從行的下拉列表中選擇一個客戶,return.php都會重新加載,它將該客戶分配給FIRST行,而忽略所有其他行。
我專門創建了$partNumber
作為數組,並使用$x
所以每次foreach
循環迭代時,我都可以增加x的值。 這樣$partNumber[0]
,因此在上表的三行中,第一行是$partNumber[0]
,第二行是$partNumber[1]
, $partNumber[1]
... 但是我不知道如何將這些信息放入javascript函數,並在重新加載時將其發送回頁面,以便我可以在條件適合該行的情況下將SQL查詢更改為“僅行動” ...
感謝您的閱讀,也感謝您的任何幫助!
考慮將您的<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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.