Avatar billede sbay Nybegynder
05. maj 2006 - 12:52 Der er 8 kommentarer og
1 løsning

AJAX opslag i database

Hejsa

Jeg vil gerne lave et opslag i en database, ved hjælp af AJAX, således at brugeren taster et bogstav og så kommer relevante poster fra databasen frem. Men jeg har kun kunnet finde et eksempel i ASP og jeg bruger PHP. En der kan være behjælpelig - evt. med en oversættelse af det her :
http://www.w3schools.com/ajax/ajax_database.asp
Avatar billede Slettet bruger
05. maj 2006 - 13:31 #1
Det eneste der skal omskrives er altså dette her? Bruger du MySQL?

sql="SELECT * FROM CUSTOMERS WHERE CUSTOMERID="
sql=sql & request.querystring("q")

set conn=Server.CreateObject("ADODB.Connection")
conn.Provider="Microsoft.Jet.OLEDB.4.0"
conn.Open(Server.Mappath("/db/northwind.mdb"))
set rs = Server.CreateObject("ADODB.recordset")
rs.Open sql, conn

response.write("<table>")
do until rs.EOF
for each x in rs.Fields
response.write("<tr><td><b>" & x.name & "</b></td>")
response.write("<td> & x.value & "</td></tr>")
next
rs.MoveNext
loop

response.write("</table>")
Avatar billede sbay Nybegynder
05. maj 2006 - 13:32 #2
Nej - det er faktisk en DB2 database, men SQL-kaldet er stort set identisk med MySQL
Avatar billede Slettet bruger
05. maj 2006 - 13:47 #3
ok...men du kan vel selv tilrette til anden DB...

$sql = 'SELECT * FROM CUSTOMERS WHERE CUSTOMERID="' . $_REQUEST['q'] . '"';
$result = mysql_query($sql);
$num_fields = mysql_num_fields($result);
$j=0;
$x=1;
echo '<table>';
while($row = mysql_fetch_array($result)) { //SKAL ÆNDRES TIL DIN DB-TYPE
  for($j=0;$j<$num_fields;$j++){
  $name = mysql_field_name($result, $j);
  echo '<tr><td><strong>' . $name . '</strong></td>';
  echo '<td>' . $row[$name] . '</td></tr>';
  }
  $x++;
}
echo '</table>';

//OBS: UTESTET!
Avatar billede sbay Nybegynder
05. maj 2006 - 13:50 #4
Testet og virker:

<?php

$sql="SELECT * FROM TABELNAVN.FIL";

$conn = odbc_connect("AS400","","");
$rs = odbc_exec($conn,$sql);



while (odbc_fetch_row($rs))
            {
            $IPROD = odbc_result($rs,4);
            $IDESC = odbc_result($rs,5);
            echo $IPROD.$IDESC;
            echo "<br>";
            }

?>
Avatar billede olebole Juniormester
05. maj 2006 - 23:20 #5
<ole>

Ehhhh ... hvorfor dog bruge AJAX, når man HTML-formaterer data på serveren ...?!??
Vi må vist slå fast, at heller ikke AJAX hører under, hvad den methanol-fyldte norske slambert bag w3schools har forstået. Endnu en ting til den laaaaange liste  :o|

Gå langt udenom w3schools.com, der er fyldt med fejl, misforståelser og udeladelser. Søg i stedet på Google. Der er vist ved at være ret mange AJAX-artikler på nettet.

Data formateres i XML eller JSON, før det sendes tilbage til klienten. At HTML-formatere dem er komplet hul i hovedet!  :)

/mvh
</bole>
Avatar billede palito Nybegynder
06. maj 2006 - 11:37 #6
olebole - kan du da give et eksempel på hvordan et ajax-script kunnne udnyttes perfekt?
Avatar billede olebole Juniormester
06. maj 2006 - 17:05 #7
I stedet for at formatere data som HTML, formaterer du det som XML. I klienten løber du XML'en igennem og opretter HTML-elementer med DOM og indsætter dem på de ønskede steder.
Et rigtig fornuftigt alternativ til XML er JSON:
    http://www.json.org/

- der fylder mindre at downloade og kan bruges direkte i JavaScript (= betydeligt lettere at arbejde med).

Begge dele kræver du er stærk i frontend-teknologierne - herunder JavaScript, DOM og evt. XML. Er du ikke det, er det ikke til at give et eksempel, der giver ret megen mening  :)
Avatar billede sbay Nybegynder
16. maj 2006 - 17:03 #8
Hejsa

Selom det måske ikke er den smarteste måde kunne jeg nu godt tænke mig at få det til at virke alligevel! Jeg har tre filer, men det virker ikke - nogen der kan se hvorfor?

ajax_db2.htm:
<html>
<head>
<script src="clienthint.js"></script>
</head><body><form>
Select a Customer:
<form>
First Name:
<input type="text" id="txt1"
onkeyup="clienthint.js(this.value)">
</form><p>Suggestions: <span id="txtHint"></span></p>
</body>
</html>


clienthint.js:

var xmlHttp

function showHint(str)
{
if (str.length > 0)
{
var url="getcustomer.php?sid=" + Math.random() + "&q=" + str
xmlHttp=GetXmlHttpObject(stateChanged)
xmlHttp.open("GET", url , true)
xmlHttp.send(null)
}
else
{
document.getElementById("txtHint").innerHTML=""
}
}

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

function GetXmlHttpObject(handler)
{
var objXmlHttp=null

if (navigator.userAgent.indexOf("Opera")>=0)
{
alert("This example doesn't work in Opera")
return
}
if (navigator.userAgent.indexOf("MSIE")>=0)
{
var strName="Msxml2.XMLHTTP"
if (navigator.appVersion.indexOf("MSIE 5.5")>=0)
{
strName="Microsoft.XMLHTTP"
}
try
{
objXmlHttp=new ActiveXObject(strName)
objXmlHttp.onreadystatechange=handler
return objXmlHttp
}
catch(e)
{
alert("Error. Scripting for ActiveX might be disabled")
return
}
}
if (navigator.userAgent.indexOf("Mozilla")>=0)
{
objXmlHttp=new XMLHttpRequest()
objXmlHttp.onload=handler
objXmlHttp.onerror=handler
return objXmlHttp
}
}

getcustomer.php:
<?php

$sql="SELECT * FROM Customer";
$conn = odbc_connect("SERVER","","");
$rs = odbc_exec($conn,$sql);

while (odbc_fetch_row($rs))
            {
            $IPROD = odbc_result($rs,4);
            $IDESC = odbc_result($rs,5);
            echo $IPROD.$IDESC;
            echo "<br>";
            }
?>
Avatar billede sbay Nybegynder
18. august 2006 - 18:12 #9
hmmm - lukker.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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