2016-08-13 1 views
0

Ich versuche, den Inhalt meiner PHP-Web-Seite zu ändern, mit Ajax, wie unten die index.php Seite eingegeben eingereicht, die auf der Schaltfläche klicken, um eine Funktion ausgeführt nennen, aber mein Problem ist, dass die Seite neu zu laden ist esupdate php Seite mit Ajax mit Post-Anfragen laden Sie die Seite neu?

also möchte ich wissen, was ich falsch mache ??

Bitte beachte, dass ich die Post-Anfragen verwenden meine Daten sicher zu halten, wie w3schools.com

empfohlen

inexd.php Datei Code unten

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="UTF-8"> 
<title>Site Title</title> 

</head> 

<body align="left"> 

<div> 
    <h4 align="left">Balance Enquiry</h4> 
</div> 

<form> 
    <div> 
     <label>Account Number </label> 
     <input id="AccNum" type="text" name="AccNumInput"> 
     <button type="button" onclick="SendForm()">Search</button> 
     </div> 
</form> 

<script> 
function SendForm() 
{ 
    alert("Hello! SendForm start"); 
     var xmlhttp = new XMLHttpRequest(); 
     xmlhttp.onreadystatechange = function() 
    { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) 
      { 

       document.getElementById("AccNum").innerHTML = xmlhttp.responseText; 
      } 
    }; 
     alert("Hello! going to send ajax"); 
     var x = xmlhttp.open("POST","AccData.php", true); 
     xmlhttp.send(document.getElementById("AccNum").value); // you want to pass the Value so u need the .value at the end!!! 

     alert(document.getElementById("AccNum").value); 
     alert("Hello! SendForm end"); 
} 
</script> 

</body> 

</html> 

Der data.php Datei Code unten

<?php 

alert("Hello! php start processing"); 

$AccountNumber = $_POST['AccNum']; 

$conn = oci_connect('admin', 'admin', 'localhost/JDT', 'AL32UTF8'); 
if (!$conn) { 
    $e = oci_error(); 
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); 
} 

alert("Hello! connected to oracle"); 

$sqlstr = 'SELECT CUSTOMER_ID,CUST_NAME,PHONE1 FROM customers where CUSTOMER_ID=:AccNum'; 

$stid = oci_parse($conn, $sqlstr); // creates the statement 

oci_bind_by_name($stid, ':AccNum', $AccountNumber); // binds the parameter 

oci_execute($stid); // executes the query 

echo $AccountNumber; 
/** 
* THIS WHILE LOOP CREATES ALL OF YOUR HTML (its no good solution to echo data out like this) 
*/ 
while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) { 
    echo "<tr>"; 
    foreach ($row as $item) { 
     echo "<td align=center>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>"; 
    } 
    echo "</tr>\n"; 
} 
echo "</table>\n"; 

oci_free_statement($stid); // releases the statement 
oci_close($conn); // closes the conneciton 

?> 

Antwort

1

Mit der <input type="submit" value="Search"> senden Sie das Formular das "alte" Weg zum Server nicht mit Ajax!

<form> 
    <div> 
     <label>Account Number </label> 
     <input id="AccNum" type="text" name="AccNuminput"> 
     <button type="button" onclick="sendForm()">Search</button> 
     </div> 
</form> 
<script> 
function sendForm(){ 
    var xmlhttp = new XMLHttpRequest(); 
    xmlhttp.onreadystatechange = function() { 
      if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
       //Execudted when finished and everything its Okay 
       document.getElementById("AccNum").innerHTML = xmlhttp.responseText; 
      } 
     }; 
     xmlhttp.open("POST", "acc_data.php", true); 
     xmlhttp.send("accNum="+document.getElementById("AccNum").value); // you want to pass the Value so u need the .value at the end!!! 
    } 


</script> 

Dann in Ihrem data.php Sie HTML brauchen nicht brauchen Sie nur die Daten, die Sie von der Ajax-Post-Anforderung (Session ist auch nicht erforderlich für das) empfangen zu verarbeiten. In der xmlhttp.responseText erhalten Sie Ihre Antwort vom Server, wenn die Anfrage abgeschlossen ist.

<?php 

$accountNumber = $_POST['accNum'];// set a good variable name 
$conn = oci_connect('admin', 'admin', 'localhost/JDT', 'AL32UTF8'); //setup connection 
if (!$conn) { 
    $e = oci_error(); 
    trigger_error(htmlentities($e['message'], ENT_QUOTES), E_USER_ERROR); // throws an error on connection error 
} 
$sqlstr = 'SELECT CUSTOMER_ID,CUST_NAME,PHONE1 FROM customers where CUSTOMER_ID=:ACCNUM'; // sql stirng 
$stid = oci_parse($conn, $sqlstr); // creates the statement 
oci_bind_by_name($stid, ':ACCNUM', $accountNumber); // binds the parameter 
oci_execute($stid); // executes the query 


/** 
* THIS WHILE LOOP CREATES ALL OF YOUR HTML (its no good solution to echo data out like this) 
*/ 
while ($row = oci_fetch_array($stid, OCI_ASSOC + OCI_RETURN_NULLS)) { 
    echo "<tr>"; 
    foreach ($row as $item) { 
     echo "<td align=center>" . ($item !== null ? htmlentities($item, ENT_QUOTES) : "&nbsp;") . "</td>"; 
    } 
    echo "</tr>\n"; 
} 
echo "</table>\n"; 

oci_free_statement($stid); // releases the statement 
oci_close($conn); // closes the conneciton 

?> 
+0

Vielen Dank für Ihre freundliche Hilfe .. das erklärte viele Dinge, die mir nicht klar waren ... bitte würde es Ihnen etwas ausmachen, mir beizubringen, was besser zu verwenden statt Schleife, um HTML zu erstellen? – samer

+0

Youre willkommen ich denke, die beste Lösung ist, ein JSON-Objekt zu erstellen und das JSON-Objekt zurück auf die HTML-Seite und dann den Rest mit Javascript ... aber Schritt für Schritt ... Versuchen Sie nicht, alle Technologien zu lernen gleichzeitig ist das sehr schwer. –

+0

okay, dann gehen Sie Schritt für Schritt, wie Sie sagten .. ein letztes denken, die Daten nicht vom Server zurückkommen die URL geändert, http: // localhost/test /? AccNumInput = 1000 aber das Ergebnis wird nicht geladen und an der xmlhttp.send ("accNum =" + document.getElementById ("AccNum"). value) sollte xmlhttp.send (document.getElementById ("AccNum"). value) sein, da der Wert mit string übergeben wird, der nicht innerhalb der SQL-Anweisung? – samer