Wert in DB suchen bei eingabe eines Wertes in ein Feld

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

Hallo,

wie ich das sehe ist das ein reines DB-Problem. Also beschränke doch deine Beispiele hierauf. Sowas nennt man Minimalbeispiel, also ein lauffähiges Beispiel was genau das Problem darstellt, nicht mehr und nicht weniger.

Du wirfst hier mit 5 Dateien in 3 Sprachen um dich. Um das nachzuvollziehen muss ich - neben allerlei Voraussetzungen zu erfüllen - mindestens 10 Minuten fummeln, bis ich dein Problem nachvollziehen kann.

Und durch die Komplexität weiß ich dann nicht, ob deine Dateien grundsätzlich nicht funktionieren oder ob es tatsächlich dein Problem ist.

Mein Tipp: Schreibe die SQL-Anweisung so, dass immer nur ein Ergebnis kommt, dann kriegst du auch kein Ergebnis.

Und wofür du diese 1000 Zeilen JS für ein bisschen Ajax brauchst, weiß ich auch nicht. Wo nimmst du das her? Sowas geht mit jQuery in 3 Zeilen.

https://api.jquery.com/jQuery.ajax/

Günther

P.S. Stern? Bitte gern.

Hi,

ich habe das Ganze nun mit jQuery gelöst, wie mir Guenther Schmidt empfohlen hat.
Das ist natürlich viel viel besser und übersichtlicher und vor allem performanter geworden.
Vor allem hat sich der Code auf nur ein paar Zeilen minimiert. Total klasse.

Bis zum nächsten Problem, wenn es heißt: ICH BRAUCHE HIIIIIIILLLLFFFEEEEEEE!!! :wink:

Grüße aus Köln

Wie ich gerade lese hat sich das Problem bereits erledigt.

Im Wesentlichen stimme ich Herrn Schmidt zu, dass die vielen Dateien das Ganze ziemlich unübersichtlich machen.

MfG

cowboy_herby.