2014-09-04 43 views
-3

所以目前我有兩個文件幾乎做同樣的事情,但連接到2個不同的表。我有點想合併到一起,以節省文件空間,讓一切更高效:可能合併這些,也可以這個代碼顯示小計?

caseprice.php

<?php 
$q = intval($_GET['q']); 

$con = mysqli_connect('localhost','root','','test'); 
if (!$con) { 
die('Could not connect: ' . mysqli_error($con)); 
} 

mysqli_select_db($con,"compcase"); 
$sql="SELECT * FROM compcase WHERE id = '".$q."'"; 
$result = mysqli_query($con,$sql); 

while($row = mysqli_fetch_array($result)) { 
echo "<tr>"; 
echo "<td>" . $row['case_price'] . "</td>"; 
echo "</tr>"; 
} 
echo "</table>"; 

mysqli_close($con); 
?> 

caselightprice.php

<?php 
$q = intval($_GET['q']); 

$con = mysqli_connect('localhost','root','','test'); 
if (!$con) { 
die('Could not connect: ' . mysqli_error($con)); 
} 

mysqli_select_db($con,"complight"); 
$sql="SELECT * FROM complight WHERE id = '".$q."'"; 
$result = mysqli_query($con,$sql); 

while($row = mysqli_fetch_array($result)) { 
echo "<tr>"; 
echo "<td>" . $row['caselight_price'] . "</td>"; 
echo "</tr>"; 
} 
echo "</table>"; 

mysqli_close($con); 
?> 

也哪能當單選按鈕被按下時,使用所有這些在我的頁面上顯示一個小計?我有這樣的價格顯示我只是不能似乎他們兩個加起來:

的index.php

<script> 

//CASE PRICE// 

    function casePrice(str) { 
if (str=="") { 
document.getElementById("txtHint").innerHTML=""; 
return; 
} 
if (window.XMLHttpRequest) { 
// code for IE7+, Firefox, Chrome, Opera, Safari 
xmlhttp=new XMLHttpRequest(); 
} else { // code for IE6, IE5 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() { 
if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
} 
} 
xmlhttp.open("GET","caseprice.php?q="+str,true); 
xmlhttp.send(); 
} 

//CASE PRICE// 

//CASE LIGHT PRICE// 

    function caselightPrice(str) { 
if (str=="") { 
    document.getElementById("txtHint").innerHTML=""; 
    return; 
} 
if (window.XMLHttpRequest) { 
// code for IE7+, Firefox, Chrome, Opera, Safari 
xmlhttp=new XMLHttpRequest(); 
} else { // code for IE6, IE5 
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP"); 
} 
xmlhttp.onreadystatechange=function() { 
if (xmlhttp.readyState==4 && xmlhttp.status==200) { 
    document.getElementById("txtHint").innerHTML=xmlhttp.responseText; 
} 
} 
xmlhttp.open("GET","caselightprice.php?q="+str,true); 
xmlhttp.send(); 
} 

//CASE LIGHT PRICE// 

</script> 

<Input type = 'Radio' Name ='compcase' onchange="casePrice(this.value)" value= '1' />NZXT Phantom Enthusiast USB3.0 Full Tower Case - White <br /> 
<Input type = 'Radio' Name ='compcase' onchange="casePrice(this.value)" value= '2' />Corsair Obsidian 750D Large Tower Case Black <br /> 
<Input type = 'Radio' Name ='compcase' onchange="casePrice(this.value)" value= '3' />Cooler Master CM Storm Trooper Black Full Tower Gaming Case <br /><br /> 

<Input type = 'Radio' Name ='caselight' onchange="caselightPrice(this.value)" value= '1' />Red<br /> 
<Input type = 'Radio' Name ='caselight' onchange="caselightPrice(this.value)" value= '2' />Green <br /><br /> 

<div id="txtHint"><b>Processor listed here</b></div> 
<div id="txtTest"><b>Processor listed here</b></div> 

,你可以看到,價格分別顯示。我能以某種方式計算它作爲小計而不是單獨的總數嗎?

感謝您的任何幫助。

+0

顯示你的努力 – 2014-09-04 12:14:12

+0

嗯,我不知道從哪裏開始,這就是爲什麼我要求幫助 – 2014-09-04 12:25:41

+0

似乎可能是單個MySQL查詢以某種方式「聯合」你的表在一起將有所幫助。但是,我們不知道你的表格是什麼樣的,所以我們不能就如何編寫該查詢給出任何有用的建議。 – 2014-09-04 12:31:04

回答

0

它看起來對我來說,這個問題是這樣的:當您發送的價格向服務器發出請求,你告訴它用戶選擇其中任何一個案件或光。所以服務器不能直接給出總價,因爲它只知道一件事或另一件事。然後,您以任何方式將價格寫入同一個字段。因此,當客戶端從服務器獲得價格時,它會覆蓋另一個價格,並且無法計算總量。

浮現在腦海中可能的解決方案:

  1. 而不是使用AJAX調用,做一個提交發送的情況和光到服務器。該服務器比3個數字的回覆:案例價格,輕量級價格和總數。

  2. 當您向服務器發送Ajax請求時,發送這兩個選擇。然後服務器回覆三個數字:價格和總數。無論用戶剛更新了哪一個都發送。只需讓onchange同時調用相同的JavaScript函數,即可選擇兩個選項並創建參數字符串。

  3. 在兩個不同的領域寫價格。無論如何,我會這樣做。在我看來,用戶點擊一個案例並讓「價格」字段顯示案例的價值會很困惑,然後選擇一個燈光並使相同的價格字段更改以顯示燈光的價格。如果我分散了一會兒,不記得最後一次點擊了哪一個,我不知道這個數字的含義。但無論如何,請將它們寫入兩個不同的領域。然後讓客戶更新哪一個剛剛改變,然後拿起這兩個字段並將它們加在一起。

  4. 在服務器上創建兩個會話變量:一個用於案例價格,另一個用於低價格。發送價格時,請填寫會話變量。然後將其與其他會話變量中的任何值結合使用以計算總價格。發回兩個或三個數字:要麼只是要求的東西的價格和總數,要麼兩個價格和總數。我會傾向於這個選項,因爲會話變量很難管理,但這是可能的。

順便說一句,它看起來像我正在創建一個表結束標記,但沒有表開始標記。而且你爲什麼還要創建一張桌子?服務器不會爲每個請求發送一個數字嗎?每件商品應該只有一個價格,對吧?或者你在製作一張桌子,因爲你認爲你想要一行顯示價格,第二行顯示總計?

+0

我不想顯示案件和輕的價格,我只是想在小計上顯示,這可能嗎? – 2014-09-04 15:31:46

+0

你的意思是隻顯示總計而不是零件?當然。使用我的建議1,2或4以上的建議之一,除了不發送所有三個數字,只是發回新的總數。您也可以使用數字3的變體:將總數的部分放入隱藏字段中,然後當您獲得更新時,更新適當的隱藏字段,然後選取兩個字段並添加它們。如果是我,我可能會使用#1,但如果您想讓總數自動更新而無需點擊提交,我會使用#2。 – Jay 2014-09-04 17:16:46

+0

這樣的事情? [鏈接](http://api.jquery.com/serialize/) – 2014-09-04 18:43:42

-1
  • 只創建一個文件
  • 您的AJAX可以給額外的參數設置,如果你想返回的價格或淺價格
  • 數據庫連接可以通過函數管理

下面一些例子你可以做什麼:


創建一個函數來連接到你的數據庫。 如果您有10個連接到dabase的文件,則不必每個文件都更改登錄名/密碼/數據庫。

function mysqlConnect($database) 
{ 
    $con = mysqli_connect('localhost','root','','test'); 
    if (!$con) 
     die('Could not connect: ' . mysqli_error($con)); 

    mysqli_select_db($con,$database); 

    return $con; 
} 

您的文件:

$q = intval($_GET['q']); 
$type = $_GET['type']; // used to know if you want price or lightprice. 

if ($type == 'light') 
{ 
    // You will put database connexion in this function 
    $con = mysqlConnect('complight'); 
    $varName = 'caselight_price'; 
    $sql="SELECT * FROM complight WHERE id = '".$q."'"; 
} 
else 
{ 
    // You will put database connexion in this function 
    $con = mysqlConnect('compcase'); 
    $varName = 'case_price'; 
    $sql="SELECT * FROM compcase WHERE id = '".$q."'"; 
} 

$result = mysqli_query($con,$sql); 

while($row = mysqli_fetch_array($result)) 
{ 
    echo "<tr>"; 
     echo "<td>" . $row[$varName] . "</td>"; 
    echo "</tr>"; 
} 

// ... 

可以爲JS/AJAX這樣做。

xmlhttp.open("GET","caselightprice.php?q="+ str +"&type=light",true); 
+0

我認爲類型應該是'動態或條件'在ajax文件。你手動添加'「&type = light」,true);'。我認爲它的錯誤 – 2014-09-04 12:44:11

+0

得到一個錯誤致命錯誤:數組回調必須在第3行的C:\ xampp \ htdocs \ caseprice.php中包含索引0和1,這是否計算了compcase和caselight的小計? – 2014-09-04 12:45:41

+0

@Prashant:是的,但代碼只是一個例子。這與php代碼的原理是一樣的。凱爾托馬斯:額外的「)」第2行:$ type = $ _GET ['type'] ;.編輯。 – djidi 2014-09-04 13:42:39