Avatar billede walles79 Nybegynder
17. oktober 2008 - 15:08 Der er 6 kommentarer og
1 løsning

Realtime udregning af pris ajax php javascript

Hej... jeg har et problem med at få en realtime udregning af "pris" ganget med "antal", som så bliver skrevet ud i feltet "total" her er koden. lige nu blever der ikke lavet en udregning, og ved indtasting i alle "antal" felter bliver resultatet kun udskevet i det første "total" felt.. håber i kan hjælp mig har siddet med dette problem i over 3 dag.

hoved fil :

<html>
<head>
<script src="selectprodukt.js"></script>
</head>
<body>
<?php

require("inc/db.php");

$conn = connection(); 

    $sql = "SELECT * ";
    $sql .= "FROM produkter ";
    $sql .= "ORDER BY varenr";   

    $result = mysql_query($sql, $conn);

    if (!$result) {
      die ("query ikke udført: " . $sql. "<br /><strong>Fejl:</strong> " . mysql_error($conn));
    }
    $row = mysql_fetch_assoc($result);
   
    $Vnavn=$row['varenr'];
    $pnavn=$row['produktnavn'];
    $pris=$row['pris'];
    $id=$row['id'] ;

    print "<form id=\"kunde\" action=\"dokument.php\" method=\"post\" >";
    print "<table border=1>\n";
    print '<tr><th width="100px">Vare nr. :</th><th width="250px">Produkt navn :</th><th width="75px" colspan="2">Pris :</th><th width="75px">Antal :</th><th>Total : </th>';
   
    print "</tr>\n"; 

while ($row = mysql_fetch_assoc($result)) {
    print("<tr>");
    print("<td>". $row['varenr'] ."</td>");
    print("<td>". $row['produktnavn'] ."</td>");
    print("<td>". $row['pris'] ." </td><td> kr.</td>");
    print('<td><input type="text" name="'.$row['id'].'" id"'.$row['id'].'" onKeyUp="showUser(this.value)" size="40"> stk.</td>');
    print('<td><p><div id="txtHint"></div></p></td>');
    print("</tr>\n");    
    }        
        print '</table>';
    print "<table border=1>\n";
    print '<tr><td colspan="4"><p><input type="submit" class="sub" name="bestilling" value="Bestil" />&nbsp;&nbsp;<input type="reset" class="sub"/></p></td></tr>';
        print '</table></form>';
   
?>
</body>
</html>

javascript "selectprodukt.js":

var xmlHttp

function showUser(str)
{
if (str.length==0)
  {
  document.getElementById("txtHint").innerHTML=""
  return
  }
xmlHttp=GetXmlHttpObject()
if (xmlHttp==null)
  {
  alert ("Browser does not support HTTP Request")
  return
  }
var url="getprodukt.php"
url=url+"?q="+str
url=url+"&sid="+Math.random()
xmlHttp.onreadystatechange=stateChanged
xmlHttp.open("GET",url,true)
xmlHttp.send(null)
}

function stateChanged()
{
if (xmlHttp.readyState==4 || xmlHttp.readyState=="complete")
{
document.getElementById("txtHint").innerHTML=xmlHttp.responseText
}
}

function GetXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
  {
  xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
  }
catch (e)
  {
  xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
}
return xmlHttp;
}

PHP getprodukt.php :

<?php
require("inc/db.php");

$conn = connection(); 

$q=$_GET['id'];
$t=1;

$sql = "SELECT * ";
$sql .= "FROM produkter ";
$sql .= "WHERE id = '". $q ."' ";

$result = mysql_query($sql, $conn);
$row = mysql_fetch_array($result);
   
$p=$row['pris'];
$resultet=$p*$t;


if ($resultet>0){
    print "her".$resultet;
}   
else{
    print "her 0 ".$q;
}       
mysql_close($conn);
?>
Avatar billede walles79 Nybegynder
17. oktober 2008 - 15:15 #1
ups i getprodukt.php skal $t være værdien af antallet og ikke 1 som der står i koden.
Avatar billede tjens Nybegynder
17. oktober 2008 - 22:24 #2
Jeg synes jeg kan se 2 fejl:

1. ID txtHint hedder samme på alle varelinier på skærmen: Derfor rammer svaret ikke den rigtige linie.

2. Du sender indtastningsfeltet (som ser ud til at være antal) med som parameter til ShowUser. Men hvordan kommer varens id med til getprodukt.php så sql'en finder den rigtige vare? Og hvordan skal stateChanged kunne finde den rigtige linie, hvis getprodukt.php ikke sender id med tilbage?

Jeg vil anbefale at lade disse kalkulationer foregå i javascript, når du alligevel har antal og pris per linie i klienten. Jeg vender tilbage lidt senere med et eksempel.
Avatar billede tjens Nybegynder
17. oktober 2008 - 22:46 #3
Hermed et eksempel på varelinier og prisudregning via java script:

<html>
<head>
<title>Calculate Total javascript example</title>
<style>
  body            { font-family : sans-serif;}
  #formdiv        { font-family : monospace; }
  #totalid    { font-weight : bold; }
</style>
<script>
var itemtext  = new Array('First_Item ', 'SecondItem', 'Third_Item', 'FourthItem');
var quantity  = new Array(1,2,1,2);
var price  = new Array(100,200,300,400);

function showForm() {

    document.getElementById("formdiv").innerHTML = '<form name="F1">';
    for  ( i=0; i < quantity.length; i++ ) {
        document.getElementById("formdiv").innerHTML +=
            '<input type="text"  name="quantity' + i +'"    value="' + quantity[i] + '"    onkeyup="quantity[' + i + ']=this.value; CalcTotal();" size="3"/> ' +
            itemtext[i] + ' ' + price[i] +'$ = <span id="span' + i + '"> ' + quantity[i] * price [i] + '</span>$ <br />';
    }
    document.getElementById("formdiv").innerHTML += '</form><br />';
}

function CalcTotal() {

    var total = 0;
    for  ( i=0; i < quantity.length; i++ ) {
        document.getElementById("span" + i).innerHTML = quantity[i] * price [i];
        total += quantity[i] * price [i];
    }
    document.getElementById("totalid").innerHTML = total;
}
</script>
</head>
<body onload="showForm(); CalcTotal()">
<h3>Item lines with javascript total calculator</h3>
<div id="formdiv" ></div>
total: <span id="totalid" ></span>$
</body>
</html>

Hvis du lader dit php danne de 3 Arrays (ud fra dine varelinier i sql'en) kan du bruge eksemplet direkte. Dog skal det lige formatteres i en <table> som du allerede har i dit eget eksempel.
Avatar billede roenving Novice
18. oktober 2008 - 11:01 #4
Se f.eks. en fuld js-løsning i http://www.eksperten.dk/spm/625583 !-)
Avatar billede walles79 Nybegynder
19. oktober 2008 - 16:07 #5
Hej tak for henvendelserne, jeg har ikke lige haft/har tid til at gennem gå jeres løsnings muligheder før i morgen, men ville bare gøre opmærksom på at jeg ikke har glemt min post :)
takker mange gange for jeres svar :)
Avatar billede walles79 Nybegynder
27. oktober 2008 - 10:14 #6
Hej Tjens tak for din besvarelse den gav det ønskede resultat... så du må gerne skrive et svar så du kan få dine fortjente point ;)
Avatar billede tjens Nybegynder
28. oktober 2008 - 11:12 #7
Godt du kunne bruge det
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester