2010-11-30 2 views
1

Dies ist für ein Schulprojekt. Das habe ich so weit. Ich bin völlig neu und total verloren. Würde mich über Hilfe freuen.Ich versuche, 2 Summen in einer PHP-Funktion mit einem Mouseover-Ereignis mit Ajax berechnet anzuzeigen. Wie mache ich das?

Ajaxfunctions.js

function getXMLHttp() 
{ 
    var xmlHttp 

    try 
    { 
    //Firefox, Opera 8.0+, Safari 
    xmlHttp = new XMLHttpRequest(); 
    } 
    catch(e) 
    { 
    //Internet Explorer 
    try 
    { 
     xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); 
    } 
    catch(e) 
    { 
     try 
      { 
       xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
     catch(e) 
      { 
       alert("Your browser does not support AJAX!") 
       return false; 
      } 
     } 
    } 
    return xmlHttp; 
} 


function MakeRequest(product) 
{ 
    var xmlHttp = getXMLHttp(); 

    xmlHttp.onreadystatechange = function() 
    { 
    if(xmlHttp.readyState == 4){ 
     if(xmlHttp.status == 200){ 
     HandleResponse(xmlHttp.responseText); 
    } 
    } 
    } 

    xmlHttp.open("GET", "prodTotal.php?product=+_product", true); 
    xmlHttp.send(null); 
} 

function HandleResponse(response) 
{ 
    document.getElementById('totalqty').innerHTML = response; 
    document.getElementByID('totaldol').innerHTML = response; 
} 

Dies ist die PHP-Klasse mit der PRODTOTAL Funktion und die Mouseover-Ereignisse in der Tabelle.

<?php 

Class CarsClass { 
     private $user = 'php06'; 
     private $pwd = 'php06'; 
     private $dbConn; 

function __construct($db='classicmodels') { 
     //Create connection to MySQL database requested, if blank just connect up. 

     $this->dbConn = new mysqli('localhost', $this->user, $this->pwd, $db); 
     if (mysqli_connect_errno()) { 
      echo 'Error: Could not connect to database. Please try again later.'; 
      exit; 
     } 
     $query = "select count(*) as 'custcount' from customers"; 

     $result = $this->dbConn->query($query); 
     $row = $result->fetch_assoc(); 
     $custCount = $row['custcount']; 

     print "Connected to DB $db as user $this->user<br><br> Number of Rows $custCount<br><br>"; 
    } 

function __destruct(){ 
     mysqli_close(); 
     Print "DB closed by user <br><br>"; 
    } 

function header(){ 
    echo "Midterm Exam Script 2 Header<br><br>"; 
    } 

function display(){ 
    $totqty = 0; 
    $totamt = 0; 
    //get row from WB_Resident Table 
    $query = "select productCode,productName,productDescription,quantityInStock,buyPrice,MSRP from products"; 
    $result = $this->dbConn->query($query); 
?> 

<table id="midterm2"> 

    <tr> 
     <th colspan="13">Product Database Table</th> 
    </tr> 
    <tr> 
     <th width="2%">product Code</th> 
     <th width="10%">product Name</th> 
     <th width="10%">product Description</th> 
     <th width="10%">quantity in stock</th> 
     <th width="10%">buy Price</th> 
     <th width="2%">MSRP</th> 
     <th width="10%">Total Quantity</th> 
    </tr> 
    <tr> 
    <th></th> 
    <th></th> 
    <th></th> 
    <th></th> 
    <th></th> 
    <th></th> 
    <th width="10%">Total Dollars</th> 

    </tr> 

    <?php 
    while($row = $result->fetch_assoc()): 
    $producta = $row["productCode"]; 
    //list($totqty, $totamt) = $this->ProdTotal($producta); 

    ?> 
    <tr> 
     <td> 
     <?php echo $row["productCode"]; ?> 
     &nbsp; 
     </td> 
     <td> 
     <?php echo $row["productName"];?> 
     &nbsp; 
     </td> 
     <td> 
     <?php echo $row["productDescription"]; ?> 
     &nbsp; 
     </td> 
     <td> 
     <?php echo $row["quantityInStock"]; ?> 
     &nbsp; 
     </td> 
     <td> 
     <?php echo $row["buyPrice"]; ?> 
     &nbsp; 
     </td> 
     <td> 
     <?php echo $row["MSRP"]; ?> 
     &nbsp; 
     </td> 
     <td> 
     <div id ="totalqty" onmouseover="MakeRequest($producta)"></div> 
     &nbsp; 
     <div id ="totaldol" onmouseover="MakeRequest($producta)"></div> 
     &nbsp; 
     </td>  
     </tr> 

     <?php 
     endwhile; 
     ?> 
     </table> 
    <?php 
    } 

function footer(){ 
    echo "Midterm Exam Script 3 Footer<br><br>"; 
    } 

function ProdTotal($product){ 

    $query = "select RTRIM(productCode) as productt, quantityOrdered, priceEach from orderdetails order by productt"; 

     $result = $this->dbConn->query($query); 

     while($row = $result->fetch_assoc()){ 
     if ($row["productt"] == $product){ 
     $total = $row["quantityOrdered"] * $row["priceEach"]; 
     $totqty = $totqty + $row["quantityOrdered"]; 
     $totamt = $totamt + $total; 
     } 
     } 
     return array($totqty, $totamt); 
     } 


     }  
    ?> 

Dies ruft die Klasse.

<html> 
<head> 
<title>Midterm2 Script 4</title> 
<link rel="stylesheet" type="text/css" href="midterm2.css" /> 
<script src="ajax_functions.js" type="text/javascript"></script> 
</head> 

<body> 

<?php 
require 'CarsClass4.php'; 

$obj1= new CarsClass('classicmodels'); 

$obj1->header(); 
$obj1->display(); 
$obj1->footer(); 

?> 

</body> 
</html> 
+1

was funktioniert nicht? was auch immer Sie denken, dass Sie migth in das jquery-Framework schauen möchten, macht es Ajax, Ereignis und so viel einfacher http://jquery.com/ – Breezer

+0

Wenn Sie unsere Hilfe wollen, investieren Sie etwas Zeit in die richtige Formatierung. –

+1

Niemand verwendet mehr direktes Javascript, wenn er fortgeschrittene Aufgaben wie diese ausführt. Es ist viel einfacher, ein Framework zu verwenden, wenn Sie solche Dinge tun. – xaav

Antwort

1

Richtig, Sie haben ein paar kleinere Fehler und eine fehlende Datei.

Ich werde Ihnen hier auf Ihre ursprüngliche Frage antworten, versuchen Sie nicht, Duplikate zu veröffentlichen - wenn Ihre Frage nicht beantwortet wird, gibt es wahrscheinlich einen Grund. In diesem Fall, weil es sehr lang war, tendieren die Antworten dazu, dass Sie das Problem finden, anstatt den Code durchforsten zu müssen. Das andere Hauptproblem ist, dass dies offensichtlich eine Halbzeit ist, und die meisten Leute mögen es nicht, Hausaufgabenfragen zu beantworten, da es das Objekt von Ihnen leicht verletzt, es sei denn, Sie formulieren die Frage in einem Vorschlagsstil. Wie auch immer, es ist deine erste Frage hier und ich möchte dich nicht abschrecken, also Ende der Tirade.


Recht, zunächst in Ihrem Javascript Ajaxfunctions.js, Ihre MakeRequest(product) Funktion Datei hat einen Fehler in ihm. Diese Zeile:

xmlHttp.open("GET", "prodTotal.php?product=+_product", true); 

Sollte sein:

xmlHttp.open("GET", "prodTotal.php?product=" + product, true); 

Sie müssen Pass die Variable zurück in das PHP-Skript, bevor Sie "_product" als Produkt-ID wurden vorbei, anstatt die Variable gegeben.

Dann in Ihrer Hauptdatei CarsClass.php, haben Sie den gleichen Fehler in einer anderen Sprache, übergibt eine Zeichenfolge und nicht die tatsächliche Variable in der display() Methode. Finde die Linien mit den Bindungen onmouseover.

<td> 
    <div id ="totalqty" onmouseover="MakeRequest($producta)"></div> 
    &nbsp; 
    <div id ="totaldol" onmouseover="MakeRequest($producta)"></div> 
    &nbsp; 
</td> 

Die $producta hier wird als Text „$ producta“ gesendet werden, müssen Sie die Variable und Sie sind nicht in den PHP-Modus, so kann man nicht nur einfach erwähnen, müssen Sie es von PHP echo als wurde in vorherigen Tabellenzellen durchgeführt.

<td> 
    <div id ="totalqty" onmouseover="MakeRequest(<?php echo $producta; ?>)"></div> 
    &nbsp; 
    <div id ="totaldol" onmouseover="MakeRequest(<?php echo $producta; ?>)"></div> 
</td> 

Das letzte, was Sie brauchen, ist die eigentliche AJAX-Request-Datei prodTotal.php (falls dies der Name der letzten Datei, die Sie in Ihrer Frage stellen, dann ein etwas anderer Ansatz gewählt werden soll).

prodTotal.php

<html> 
<head> 
    <title>Midterm2 AJAX Response File</title> 
</head> 
<body> 

<?php 
require 'CarsClass4.php'; 

$product = (isset($_GET['product']) ? trim($_GET['product']) : ''); 

if (!empty($product)) { 
    $classicModels = new CarsClass('classicmodels'); 

    list ($totqty, $totamt) = $classicModels->ProdTotal($product); 
?> 
    <div id ="totalqty"><?php echo $totqty; ?></div> 
    <div id ="totaldol"><?php echo $totamt; ?></div> 
<?php 
} 
?> 

</body> 
</html> 

Die AJAX-Anforderung zu gehen hat und die Werte zu erhalten, sehen Sie, wie die PHP-Datei auf den gewünschten Wert sieht, ruft die Funktion, es zu berechnen und Ausgänge DIVs die passende IDs sucht deinen Code in der Javascript HandleResponse() Routine, die die Werte enthält.Diese JS-Routine entnimmt den Inhalt .innerHTML und ersetzt ihn in den Elementen.

Beachten Sie, dass AJAX-Routinen Zeit benötigen, so dass der Schwebeflug nicht sofort erfolgt. Möglicherweise gibt es an anderer Stelle mehr Fehler in Ihrem Code, aber das ist der schwierige Teil.

+0

Außerdem sollte "var xmlHttp" ein Semikolon enthalten. – xaav

Verwandte Themen