php, mysql, ajax ... tabelle zyklisch aktualisieren
-
fürs einfügen vergiss [c]innerHtml[c]... das ist DHTML, kein AJAX (Korinthenkackerei, ich weiß)
du meinst das getXMLHttp() usw?
wie kann ich die funktion function read_mysql_table() beim xmlHttp.open("GET", "dbconnect.php", true); aufrufen?
muss ich die funktion function HandleResponse(response) auch auswerten?
ich hab nochmal nachgeschsehen, mir reichen 1 - 5 sec refresh auch.
Ach und Datenbankzugangsdaten niemals in die php-Datei schreiben... auch das kann ein böses erwachen geben (hat aber auf dein Problem keinen Einfluss)
sondern wohin dann?
lg
-
meine Zeit mit AJAX liegt ein Weilchen zurück, also kann ich dir leider nicht konkret weiterhelfen... ich seh aber heute abend mal, ob ich in meinen alten Skripten was aufschlussreiches finde (vor allem, wie ich das mit XML gelöst hab)
zu den Zugangsdaten: hier und den nachfolgenden Links wird es recht aufschlussreich dargestellt
-
zwutz schrieb:
zu den Zugangsdaten: hier und den nachfolgenden Links wird es recht aufschlussreich dargestellt
Ne, ist ziemlicher Käse. Es schadet zwar nicht, bringt aber 0 Sicherheit.
Denn Username und Passwort der DB bringt dem angreifer garnichts, solange er nicht Code auf dem Server ausführen kann. Und wenn er Code auf dem Server ausführen kann, kann er auch die config Datei inkludieren in der die Zugangsdaten stehen.
-
Shade Of Mine schrieb:
Denn Username und Passwort der DB bringt dem angreifer garnichts, solange er nicht Code auf dem Server ausführen kann.
muss er doch nicht... er versucht einfach ein www.example.com/phpmyadmin und kann sich dann munter an der db austoben... bis dahin muss php zwar wieder funktionieren, aber das dürfte nicht allzulang dauern...
-
zwutz schrieb:
muss er doch nicht... er versucht einfach ein www.example.com/phpmyadmin und kann sich dann munter an der db austoben... bis dahin muss php zwar wieder funktionieren, aber das dürfte nicht allzulang dauern...
mal abgesehen davon dass du deswegen ja den phpmyadmin absicherst mit .htaccess
denn phpmyadmin darf nie nie nie öffentlich zugänglich sein. unabhängig von deiner restlichen infrastruktur. denn ein offener phpmyadmin ist eine sicherheitslücke weil ich plötzlich bruteforce attacken auf die db fahren kann. ne ne ne.
-
Dann sollte natürlich ein Query wie SELECT * FROM table niemals in einer Produktivumgebung enthalten sein
wieso sollte man soetwas nicht tun?
-
lupu00897 schrieb:
Dann sollte natürlich ein Query wie SELECT * FROM table niemals in einer Produktivumgebung enthalten sein
wieso sollte man soetwas nicht tun?
Weil du sicher nicht alle werte aus der tabelle brauchst - vorallem da die tabelle ja erweitert werden kann ohne dass du es weisst.
das frisst halt sinnlos viel bandbreite - deshalb macht man ein
select a,b,c,d,e,f from table
weil man eben nur a,b,c,d,e,f braucht und g und h brauchen wir nicht uebertragen...mal abgesehen davon, dass ein select a,b,c from xy natuerlich mehr aussagt als ein select * - dh du weisst mehr ueber den code und was er mit den daten will...
-
@zwutz konntest du schon nachschauen?
lg
-
ok... folgendes ist bei mir der Fall... aber nicht haun, wenn ich was falsches sag... ist wie gesagt eine zeitlang her
also.... die php-Datei, die den request bearbeitet, baut bei mir manuell eine xml-Datei zusammen... wichtig dabei ist vor allem
header("Content-Type: application/xml");
... ohne dem, wird es nicht als XML anerkannt, da kann es noch so valide seindie xml-Datei wird ganz normal per echo ausgegeben.
Die JS-Datei sieht bei mir in der Regel immer so aus (je nach Anwendungsfall kommen noch ein paar Funktionen dazuvar resObjekt = null; function erzXMLHttpRequestObject() { var resObjekt = null; try { resObjekt = new ActiveXObject("Microsoft.XMLHTTP"); } catch(Error) { try { resObjekt = new ActiveXObject("MSXML2.XMLHTTP"); } catch(Error) { try { resObjekt = new XMLHttpRequest(); } catch(Error) { alert("Erzeugung des XMLHttpRequest-Objekts ist nicht möglich"); } } } return resObjekt; } function sndReq(/*evtl parameter*/) { resObjekt.open('get', 'xy.php', true); resObjekt.onreadystatechange = handleResponse; // <-- welche Funktion aufgerufen werden soll, wenn sich was tut resObjekt.send(null); } function handleResponse() // hier wird gearbeitet { if(resObjekt.readyState == 4) // 4 war: bin fertig { var zieltabelle = document.getElementById("ziel"); // wo es hinsoll xmlDok = resObjekt.responseXML; //antwort.innerHTML = resObjekt.responseText; while(zieltabelle.hasChildNodes()) { // hier wird nach und nach evtl bereits vorhandene Daten aufgeräumt... kann ausgebaut werden, hat bei mir aber gereicht var kntn = zieltabelle.firstChild; zieltabelle.removeChild(kntn); } // hier dann das xml-Dokument in die vorhandene Struktur einbauen, dazu nachher mehr } } resObjekt = erzXMLHttpRequestObject();
um das ganze mal auf dein Beispiel umzubiegen (keine Garantie auf korrekte Funktionsweise)
deine HTML-Datei sieht so aus:<html> <blablabla /> <!-- der ganze Schmarrn halt, den man so braucht --> <body> <table id="ziel"></table> </html>
die php-Datei baut dir folgende XML-Datei zusammen
<?xml version="1.0" ?> <tabelle> <tr> <td>Zeile 1 Spalte 1</td> <td>Zeile 1 Spalte 2</td> </tr> <tr> <td>Zeile 2 Spalte 1</td> <td>Zeile 2 Spalte 2</td> </tr> </tabelle>
(über die Struktur lässt sich streiten, hauptsache, du bekommst deine Daten rein und es ist gültiges XML)
dann noch die handleResponse-Funktion
function handleResponse() { if(resObjekt.readyState == 4) { var ziel = document.getElementById("ziel"); xmlDok = resObjekt.responseXML; while(ziel.hasChildNodes()) { var kntn = ziel.firstChild; ziel.removeChild(kntn); } for(i = 0; i < xmlDok.childNodes[0].length; i++) { // childNodes[0] wäre hier <tabelle> var newTr = document.createElement("tr"); for(j = 0; j < xmlDok.childNodes[0].childNodes[i].length; i++) { var newTd = document.createElement("td"); var newText = document.createTextNode( xmlDok.childNodes[0].childNodes[i].childNodes[j].data); newTr.appendChild(newTd); newTd.appendChild(newText); } ziel.appendChild(newTr); } } }
so in etwa zumindest... ungetestet, aber dafür bist du da
der Grund, warum ich damals alles manuell gemacht habe, obwohl ein passendes Framework wohl einfacher gewesen wäre: ich wollte AJAX lernen, nicht nur benutzen... wenn ich dann irgendwann an einem Punkt gewesen wäre, wo mir das manuelle gefrickel zu monoton oder zu aufwendig wird, da die zu übermittelnden Daten sehr komplex sind, hätt ich mir ein Framework zugelegt... aber für ne simple Tabelle brauchte ich das nicht
hoffentlich hilfts dir weiter...
-
hi,
jetzt gehts;)
wer sagt mir das ich auf einen XMLHttpRequest einen xml tree zurücksenden muss?;) ich sende einen html string zurück.
ich hatte noch ein problem mit Internet Explorer, der hat das XMLHttpRequest gecacht;/ sowas doofes auch!
nun gehts so:
xmlHttp.open("GET", "test.php?x="+(new Date().valueOf()), true);
bye