"INSERT INTO" funktioniert nicht im Internet Explorer
Eingetragen von Kyuss (12)
am 15.03.2010 - 11:31 Uhr in
am 15.03.2010 - 11:31 Uhr in
Hallo,
ich habe in meiner Drubal-Datenbank eine Tabelle angelegt, in der ich mit meinem Modul Daten erfassen möchte. Dafür benutze ich folgenden Code:
<?php
db_query("INSERT INTO {meine_tabelle} (uid, nid, qty) VALUES (%d, %d, %d)", $uid, $nid, $qty);
?>
In Firefox funktioniert dies wunderbar, doch im Internet Explorer wird leider nichts in die Datenbank eingefügt. Woran könnte das liegen?
Gruß
Alex
- Anmelden oder Registrieren um Kommentare zu schreiben
Bowser abhängig?????
am 15.03.2010 - 11:40 Uhr
Bei dieser Fehlerbeschreibung bin ich sprachlos.
Beste Grüße
Werner
Details
am 15.03.2010 - 11:43 Uhr
Hallo.
Magst Du noch ein paar Details verraten?
Zum Beispiel: wo genau verwendest Du diesen Code?
Ich übergebe mit einem
am 15.03.2010 - 12:21 Uhr
Ich übergebe mit einem Javascript(Ajax) Parameter an eine PHP Datei:
var http = null;
if (window.XMLHttpRequest) {
http = new XMLHttpRequest();
} else if (window.ActiveXObject) {
http = new ActiveXObject("Microsoft.XMLHTTP");
}
if (http != null) {
http.open("GET", "............/sk.php?operation=hinzufuegen&nid=" + nid + "&uid=" + uid, true);
http.onreadystatechange = ausgeben;
http.send(null);
}
Dies funktioniert soweit. Die erforderlichen Parameter werden an sk.php übergeben. Die weitere Ablauf in sk.php sieht wie folgt aus:
<?php
chdir('../../../../');
include_once('./includes/bootstrap.inc');
drupal_bootstrap(DRUPAL_BOOTSTRAP_DATABASE);
$sicherheits_flag = 1;//soll verhindern das der client code über die parameterübergabe einschleusen kann
$operation = $_GET['operation'];//ermitteln des übergebenen parameters
if ($operation != "hinzufuegen"){//hat die variable operation nicht den wert "hinzufuegen" oder "loeschen", wird sicherheits_flag auf 0 gesetzt
if ($operation != "loeschen"){
$sicherheits_flag = 0;
}
}
$nid = $_GET['nid'];
$uid = $_GET['uid'];
if(!is_numeric($nid) || !is_numeric($uid)){//ist nid oder uid nicht numerisch, wird sicherheits_flag auf 0 gesetzt
$sicherheits_flag = 0;
}
if ($sicherheits_flag == 1) {//haben die übergebenen parameter die sicherheitsprüfung bestanden?
if($operation == hinzufuegen) {
$sql = "
SELECT uid, qty
FROM mueslimixer
WHERE nid = $nid
AND uid = $uid
";//ermitteln ob der user die zutat bereits ausgewählt hat
$result = db_query($sql, $type, $status);//erzeugen der abfrage
$data = db_fetch_object($result);
if($data->uid == ""){/*ist $data leer, so hat der user die zutat noch nicht ausgewählt. die zutat kann also neu hinzugefügt werden*/
$qty = 1;
db_query("INSERT INTO {mueslimixer} (uid, nid, qty) VALUES (%d, %d, %d)", $uid, $nid, $qty);//abfrage ausführen
?>
Danach kommen noch einige Ausgaben, die auch korrekt vom Javascript verarbeitet werden. Die Tabelle mueslimixer bleibt aber leer....
Alter Vadder. Jetzt bin ich
am 15.03.2010 - 13:37 Uhr
Alter Vadder. Jetzt bin ich sprachlos. Tür und Tor offen für alles Übel, was da kommen kann. [Nachtrag]Ah, hab dein is_numeric überlesen. Na immerhin. Trotzdem solltest du deine Abfragen grundsäzlich mittels escape absichern.[/Nachtrag]
Im Übrigen hat das Problem deines Eingangsposts wohl nichts mit dem Browser zu tun.
Noch was: Warum benutzt du jQuery nicht? Die Handhabung könnte einfacher nicht sein und Drupal hat es bereits an Bord.
Das läuft im Moment noch
am 15.03.2010 - 14:02 Uhr
Das läuft im Moment noch alles testweise. Ich habe einfach drauf los geschrieben. Selbstverständlich ist der Code so noch nicht wirklich einsatzfähig. Aber danke für den Tipp, ich denke ich werde mir mal JQuery anschauen...
Aber warum sollte mein Problem nicht Browserabhängig sein? Woran könnte es sonst liegen? Es ist wie gesagt nur im Internet Explorer so, dass die Daten nicht in die Datenbank geschrieben werden.
Die einzige Möglichkeit wäre,
am 15.03.2010 - 14:06 Uhr
Weil das Parsen eines PHP-Scriptes nichts mit dem Browser zu tun hat. Das erledigt der Webserver. Die einzige Möglichkeit wäre, dass der IE deine Variablen nicht in die URL einhängt. Soll heißen statt http://...bla.php?foo=1&bar=2 schickt der IE ein http://...bla.php?foo=&bar= los.
Aber ich seh grad nicht, warum das passieren sollte. Oder baust du die URL per Javascript zusammen? Dann könnte der IE darüber stolpern.
Also die Parameter kommen
am 15.03.2010 - 14:11 Uhr
Also die Parameter kommen korrekt an. Ich bin einfach ratlos, denn eigentlich ist es in der Tat so, dass das PHP-Skript nichts mit dem Client zu tun haben kann. Aber trotzdem wird nur im IE nichts in die Datenbank geschrieben....
Also mit dem, was du hier
am 15.03.2010 - 14:17 Uhr
Also mit dem, was du hier schreibst, ist eine Fehleranalyse kaum möglich. Fahr doch mal ein paar Tests. Oder baue in deinen Code nach jeder Aktion eine Ausgabe/ein Logging ein und beobachte, wie sich dein Script verhält. Was sagt das Apache-Log? Oder gibt der Datanbankserver Fehlermeldungen aus? ...
Habe ich schon alles. Es ist
am 15.03.2010 - 14:36 Uhr
Habe ich schon alles. Es ist so als wenn er das db_query-Befehl einfach ignorieren würde... Es passiert einfach rein gar nichts. Ich denke, ich muss mein ganzes Modul mal überdenken...
Wenn dein oben geposteter
am 15.03.2010 - 14:49 Uhr
Wenn dein oben geposteter Code dein Modul sein soll, ist das kein wirkliches Drupal-Modul.
Ein solches würde wirklich nur Modul sein und z.b. die Bootstrap-Phase Drupal überlassen. ;)
das ist natürlich nur ein
am 15.03.2010 - 15:01 Uhr
das ist natürlich nur ein kleiner teil. sk.php ist eine kleine "externe" PHP-Datei, die den Bootstrap für db_query benötigt.
Aber JQuery scheint ne feine Sache zu sein, mir war vorher gar nicht bewusst das es das überhaupt gibt... naja, es gibt noch viel zu lernen ;-)