2014-09-04 21 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

相关问题