Hallo lieben Forengemeinde,
mal wieder stehe ich vor einem kleinen Problem. Ich bin mir sicher das Ihr mir weiterhelfen könnt.
Ausgangssituation:
Ich habe ein Formular mit einem Feld „Reparaturschaden“, in dem ich einen Wert eintrage.
In meiner Datenbank habe ich eine Tabelle in der zu den Reparaturschäden entsprechende Honorare zur Verfügung stehen.
Die Reparaturschadenwerte in der Tabelle sind ganze Zahlen, die je in 500er Schritten hinterlegt sind.
z.B.
Reparaturschaden Honorar
500 ------------- 212.50
1000 ------------- 289.00
1500 ------------- 325.00
2000 ------------- 395.50
Ok…soweit so gut!
Nun gibt es natürlich Reparaturschäden, die zwischen zwei Werte liegen.
Z.B. 1153.50 Euro. Dazu möchte ich dann das nächst höhere Honorar in eine Variable schreiben. In diesem Fall wäre das dann „325.00“ Euro.
Das Ganze soll folgendermaßen geschehen.
Ich trage einen Reparaturschadenwert in das dafür vorgesehene Feld ein und das System sucht mir das entsprechende Honorar im Hintergrund raus und schreibt es in eine dafür vorgesehene Variable rein. Daraufhin möchte ich gerne die Werte aus den Variablen in die Datenbank in dafür vorgesehene Felder speichern.
Das geht mit Ajax. Ich habe hier bereits schon Vorarbeit geleistet, jedoch funktioniert es noch nicht so wie ich möchte.
HTML-Code
" onkeyup="ajax\_showOptions(this,'getGrundhonorarByLetters',event)"\>
" size="5"\>
PHP-Code
Hier der Code zum SQL und der Selektion der Honorare:
ajax-list-grundhonorare.php
if(isset($\_GET['getGrundhonorarByLetters']) && isset($\_GET['letters'])){
$letters = $\_GET['letters'];
$letters = preg\_replace("/[^a-z0-9 ]/si","",$letters);
if ($x\_repBrutto
Die folgenden Dateien "ajax.js" und "ajax-dynamic-list.js" sind notwendig für den Erhalt der Funktionalität.
Hier der Code von ajax.js:
function sack(file) {
this.xmlhttp = null;
this.resetData = function() {
this.method = "POST";
this.queryStringSeparator = "?";
this.argumentSeparator = "&";
this.URLString = "";
this.encodeURIString = true;
this.execute = false;
this.element = null;
this.elementObj = null;
this.requestFile = file;
this.vars = new Object();
this.responseStatus = new Array(2);
};
this.resetFunctions = function() {
this.onLoading = function() { };
this.onLoaded = function() { };
this.onInteractive = function() { };
this.onCompletion = function() { };
this.onError = function() { };
this.onFail = function() { };
};
this.reset = function() {
this.resetFunctions();
this.resetData();
};
this.createAJAX = function() {
try {
this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
this.xmlhttp = null;
}
}
if (! this.xmlhttp) {
if (typeof XMLHttpRequest != "undefined") {
this.xmlhttp = new XMLHttpRequest();
} else {
this.failed = true;
}
}
};
this.setVar = function(name, value){
this.vars[name] = Array(value, false);
};
this.encVar = function(name, value, returnvars) {
if (true == returnvars) {
return Array(encodeURIComponent(name), encodeURIComponent(value));
} else {
this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
}
}
this.processURLString = function(string, encode) {
encoded = encodeURIComponent(this.argumentSeparator);
regexp = new RegExp(this.argumentSeparator + "|" + encoded);
varArray = string.split(regexp);
for (i = 0; i
ajax-dynamic-list.js
var ajaxBox\_offsetX = 0;
var ajaxBox\_offsetY = 0;
var ajax\_list\_externalFile = 'ajax-list-grundhonorare.php'; // Path to external file
var minimumLettersBeforeLookup = 1; // Number of letters entered before a lookup is performed.
var ajax\_list\_objects = new Array();
var ajax\_list\_cachedLists = new Array();
var ajax\_list\_activeInput = false;
var ajax\_list\_activeItem;
var ajax\_list\_optionDivFirstItem = false;
var ajax\_list\_currentLetters = new Array();
var ajax\_optionDiv = false;
var ajax\_optionDiv\_iframe = false;
var ajax\_list\_MSIE = false;
if(navigator.userAgent.indexOf('MSIE')\>=0 && navigator.userAgent.indexOf('Opera')ajax\_optionDiv.offsetHeight){
ajax\_optionDiv.scrollTop = ajax\_list\_activeItem.offsetTop - ajax\_optionDiv.offsetHeight + ajax\_list\_activeItem.offsetHeight + 2 ;
}
if(ajax\_list\_activeItem.offsetTop
Folgenden Fehler hat das Ganze noch:
Sobald ich einen Betrag in dem Feld "repBrutto" eingebe erscheint eine Liste mit dem nächst höheren Betrag aus der Datenbank. Wähle ich diesen Betrag dann aus, wird in dem zweiten Feld "reparaturkosten\_kosten" das korrekte Grundhonorar ausgegeben und angezeigt.
Mein Wunsch:
Es soll keine Liste mit den nächst höheren Beträgen angezeigt werden sondern das raussuchen des Grundhonorars soll direkt erfolgen. Auch möchte ich meine eingegebene Schadenhöhe behalten und nicht den nächst höheren Wert auswählen.
Die Auswahl des nächst höheren Grundhonorars soll im Hintergrund erfolgen, ohne mein Agieren.
Hat jemand eine Idee wie ich das machen kann?
Besten Dank und freundliche Grüße in Forum