• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!
Wenn ich den Doctype umstelle von

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

auf

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 5.0 Transitional//EN">


dann bekomme ich folgenden Hinweis:

The following notes and warnings highlight missing or conflicting information which caused the validator to perform some guesswork prior to validation, or other things affecting the output below. If the guess or fallback is incorrect, it could make validation results entirely incoherent. It is highly recommended to check these potential issues, and, if necessary, fix them and re-validate the document.

  1. warning.png
    Unable to Determine Parse Mode!

    The validator can process documents either as XML (for document types such as XHTML, SVG, etc.) or SGML (for HTML 4.01 and prior versions). For this document, the information available was not sufficient to determine the parsing mode unambiguously, because:
    • the MIME Media Type (text/html) can be used for XML or SGML document types
    • the Document Type (-//W3C//DTD HTML 5.0 Transitional//EN) is not in the validator's catalog
    • No XML declaration (e.g <?xml version="1.0"?>) could be found at the beginning of the document.
    • No XML namespace (e.g <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">) could be found at the root of the document.
    As a default, the validator is falling back to SGML mode.
 
Werbung:
Dein ganzer HTML-Code ist kaputt. Daher mein Tipp:

Erstelle den HTML-Code komplett neu, erst malohne JavaScript und PHP. Wenn dieser dann fehlerfrei ist, baust du nach und nach weitere Elemente ein.
 
  • Stelle auf HTML5 um
Wenn ich den Doctype umstelle von

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

auf

Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 5.0 Transitional//EN">


dann bekomme ich folgenden Hinweis:
  • the Document Type (-//W3C//DTD HTML 5.0 Transitional//EN) is not in the validator's catalog
Die Warnung ist da ganz eindeutig: diesen Doctype bzw. diese Schreibweise gibt es nicht.

Gemeint ist:
HTML:
<!DOCTYPE html>
https://wiki.selfhtml.org/wiki/HTML/Dokumentstruktur_und_Aufbau#HTML5
 
Werbung:
Wenn ich auf HTML 5 umstelle, dann habe ich zwar nicht mehr so viele Meldungen, aber wahrscheinlich nur, weil die Prüfung gar nicht wirklich prüft, oder?

The following notes and warnings highlight missing or conflicting information which caused the validator to perform some guesswork prior to validation, or other things affecting the output below. If the guess or fallback is incorrect, it could make validation results entirely incoherent. It is highly recommended to check these potential issues, and, if necessary, fix them and re-validate the document.

  1. warning.png
    Unable to Determine Parse Mode!

    The validator can process documents either as XML (for document types such as XHTML, SVG, etc.) or SGML (for HTML 4.01 and prior versions). For this document, the information available was not sufficient to determine the parsing mode unambiguously, because:
    • the MIME Media Type (text/html) can be used for XML or SGML document types
    • the Document Type (-//W3C//DTD HTML 5.0 Transitional//EN) is not in the validator's catalog
    • No XML declaration (e.g <?xml version="1.0"?>) could be found at the beginning of the document.
    • No XML namespace (e.g <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">) could be found at the root of the document.
    As a default, the validator is falling back to SGML mode.
 
Die Meldung deutet darauf hin, dass Du deinen Quellcode eklatant falsch geschrieben hast. Bitte schau dir den Link über deinem Beitrag an - dort steht wie es richtig geht.
 
Werbung:
Sorry, aber momentan ist es eher so, wenn ich das mache, was mir bei der Prüfung über validator.w3.org vorgeschlagen wird genau in die falsche Richtung zielt.

Meine Güte. Wenn du - den eigenen Worten nach - mit Softwareentwicklung vertraut bist, sollte die Erstellung eines HTML5-Gerüsts trivial und Iteration kein Fremdwort sein.

Der erste Schritt wär ein einfaches Model, welches ein Array mit wenigen Suchwörtern enthält und dazu ein Script, das diese Wörter in einem HTML-Container rendert.
 
Der erste Schritt wär ein einfaches Model, welches ein Array mit wenigen Suchwörtern enthält und dazu ein Script, das diese Wörter in einem HTML-Container rendert.

Die Suchwörter sind ja in der "Combobox" drin, und nach Auswahl werden sie ja auch entsprechend weiter übergeben, daran liegt es ja nicht, sondern daran, dass das verwendete Skript für "jQuery Editable Select Plugin" (http://www.jqueryscript.net/form/jQuery-Plugin-For-Custom-Filterable-Select-Box-Editable-Select.html) so wie es eingebunden wird in dem gegebenen Kontext nicht wie erwartet arbeitet.
 
Werbung:
Ich bekomme in der Fehlerausgabe:
Zeitstempel: 04.07.2016 10:45:33
Fehler: TypeError: $(...).editableSelect is not a function
Quelldatei: http://www.1112.eu/intern/start//suche.php
Zeile: 42

Und weiterhin massenhaft CSS- und HTML-Fehler!!

Nochmal: Erstelle den HTML-Code komplett neu, erst mal ohne JavaScript und PHP. Wenn dieser dann fehlerfrei ist, baust du nach und nach weitere Elemente ein.

So langsam macht es keinen Spaß mehr dir zu helfen, wenn du Empfehlungen in den Wind schreibst.
 
ALso erstmal werden viele deiner css dateien nicht gefunden. Dann solltest du auch das richtige Element nehmen
Javascript:
$('select[name=Wo]').editableSelect();

Und du solltest das Plugin auch einbinden. Nachdem du die jquery lib eingebunden hast. Das Plugin habe ich nämlich nicht gefunden. Denn du bindest, so wie ich gesehen habe, zwei mal die jquery lib ein
 
Also gut.... Meine Lösung funktioniert soweit ich weiß ausschließlich im Google Chrome.

Code:
function combobox_filtered ($tabelle, $spalte, $id_selected, $spalte_filter, $filterkriterium, $feldname, $listenname, $feldgroesse=30, $url_basiclevel="", $function_to_run="") {

    // Der 1. Teil schafft die Liste für das Drop-Down-Menu und fügt einen Inhalt in das Textfeld ein
    $mysqli=MyDatabase();
    $abfrage = "SELECT * FROM `$tabelle` WHERE `$spalte_filter`='$filterkriterium' ORDER BY `$spalte` ASC";
    $abfrage2 = "SELECT * FROM `$tabelle` WHERE `ID`='$id_selected'";

    // Prüfung, ob bereits ein Inhalt ausgewählt ist
    if ($result = $mysqli->query($abfrage2)) {
        while ($row = $result->fetch_object()) {
            $inhalt = $row->$spalte;
        }
    }
    else {
    $inhalt = "";
    }

    echo '<input name="auswahl_'.$feldname.'" id="auswahl_'.$feldname.'" value="'.$inhalt.'" list="'.$listenname.'"
    onblur="f_dropdown_id_eintragen(\'auswahl_'.$feldname.'\', \''.$feldname.'\', \''.$tabelle.'\', \''.$spalte.'\', \''.$url_basiclevel.'\', \''.$function_to_run.'\')">
    <datalist id="'.$listenname.'">';
    if ($result = $mysqli->query($abfrage)) {
        while ($row = $result->fetch_object()) {
            $inhalt = $row->$spalte;
            echo '<option value="'.$inhalt.'">';
        }
    }
    echo '</datalist>';
    // Nun wird ein unsichtbares Feld geschaffen, in welches die ID des ausgewählten Datensatzes eingetragen wird
    echo '<input name="'.$feldname.'" id="'.$feldname.'" type="hidden" value="'.$id_selected.'">';       

}

Das ganze bedient sich des HTML-Tags "datalist", welches aber unglücklicherweise nicht von allen Browsern unterstützt wird. Freue mich natürlich über jede Verbesserung dieser Funktion.

Fangen wir von vorne an:

$tabelle - versteht sich von selbst was die Funktion hier erwartet, gell?
$spalte - Spalte in der die Einträge des Combofelds sind
$id_selected - Wenn bereits beim Bilden des Combofelds ein Listeninhalt im Feld sein soll, wird hier die ID des Eintrags angegeben (setzt in der Datenbanktabelle eine Spalte ID voraus).
$spalte_filter - ich filtere z.B. danach, ob ein Element in der Tabelle in der Spalte 'aktiv' 0 oder 1 stehen hat. Hier gebe ich also 'aktiv' an - den Namen der Spalte, wo das Filterkriterium ist
$feldname - In meinen Anwendungen soll nicht der Inhalt der Combobox über das Fortmular weitergegeben werden, sondern die ID des in der Combobox erscheinenden Eintrags. Hierfür wird direkt neben der Combobox ein unsichtbares Feld geschaffen welches die ID beinhaltet. Es bekommt den hier angegebenen Namen.
$listenname - der wird benötigt für den Tag <datalist>.
$feldgroesse - versteht sich zwar von selbst, funktioniert aber irgendwie ohnehin nicht. :-) Vllt. findet jnd. von euch den Fehler
$url_basiclevel - die Variable beinhaltet den Bezug der Seite, deren Code ich gerade schreibe, zum Anfangsniveau, zum "HTML" Ordner deines Webservers. Wenn ich also auf www.meine-seite.de einen Ordner habe und in diesem Ordner eine Datei habe deren Code ich jetzt schreibe, muss ich zum "Anfangsniveau" ein mal zurück, dann ist $url_basiclevel eben "../". Befinde ich mich auf dem "Grundniveau", ist es "". Etwas verwirrend?... Kann sein, sorry!
$function_to_run - wenn ich möchte, dass eine JS-Funktion läuft, sobald ich das Feld verlasse, wird hier deren Name eingetragen.
Diese PHP-Funktion benötigt zum Laufen noch folgende JS-Funktion:

Code:
function f_dropdown_id_eintragen(inputfeld, hiddenfeld, tabelle, spalte, url_basiclevel, function_to_run) {
    inhalt = document.getElementById(inputfeld).value;
    mein_link = url_basiclevel+"abrechnung/AJAX_REQUESTS.php?aktion=dropdown&inhalt="+inhalt+"&hiddenfeld="+hiddenfeld+"&tabelle="+tabelle+"&spalte="+spalte+"&function_to_run="+function_to_run;
    resOb = erzXHRObjekt();
    resOb.open('get', mein_link, false)
    resOb.onreadystatechange = f_dropdown_id_eintragen_AJAX;
    resOb.send(null);
}
   
function f_dropdown_id_eintragen_AJAX() {
    if (resOb.readyState == 4) {   
        myArray=new Array;
        myText=resOb.responseText;
        myArray=myText.split(";");
       
        id = myArray[0];
        hiddenfeld = myArray[1];
        function_to_run = myArray[2];   
        document.getElementById(hiddenfeld).value = id;
   
        // Jetzt muss geprueft werden, ob der Eintrag im Feld einem Element aus der Liste entspricht
        if (id < 1) {
            document.getElementById("auswahl_" + hiddenfeld).style.backgroundColor="tomato";
            alert("Der Eintrag entspricht keinem Element aus der Liste");
        }
        else {
            document.getElementById("auswahl_" + hiddenfeld).style.backgroundColor="honeydew";
            // Wenn der Eintrag gültig ist, werden evtl. verschiedene Funktionen gestartet:
            if (function_to_run == "f_beratung_dokumentation_open") {
                f_beratung_dokumentation_open();
            }           
        }
    }
}

In der Funktion f_dropdown_id_eintragen_AJAX() werden im unteren Teil (ab "// Wenn der Eintrag gültig ist, werden evtl. verschiedene Funktionen gestartet:") die Aufrufe der Funktionen gestartet, deren Name über die Variable $function_to_run an die ursprüngliche PHP-Funktion übergeben wurde.

Der Link "mein_link" in f_dropdown_id_eintragen() muss natürlich auch angepasst werden.

Der Teil PHP-Teil, an den sich AJAX wendet, ist hier:

Code:
if ($aktion == "dropdown") {
    $inhalt = GetMyVar("inhalt","");
    $tabelle = GetMyVar("tabelle","");
    $spalte = GetMyVar("spalte","");
    $hiddenfeld = GetMyVar("hiddenfeld","");
    $function_to_run = GetMyVar("function_to_run","");
   
    $id = gesuchtes_feld($inhalt, $tabelle, $spalte, "ID");
    echo "$id;$hiddenfeld;$function_to_run";
}

Meine PHP-Funktion GetMyVar() kann natürlich hier mit $_GET[""] ersetzt werden. Der Vollständigkeit halber aber auch diese Funktion:

Code:
function GetMyVar($x,$leer) {
    if (isset($_GET["$x"])) {
        $myVar=$_GET["$x"];
    }
    else {
        if (isset($leer)) {
            $myVar=$leer;
        }
        else {
            $myVar="";
        }
    }
    return $myVar;
}

Die benutze ich nur, um keine Fehlermeldungen zu bekommen, wenn $_GET nach einem Wert fragt, der gar nicht übergeben wurde.

Ich weiß, ist etwas viel und wahrscheinlich schreiben gleich paar Kollegen, dass es womöglich kein schöner Programmierstil etc ist :-))), ich bin eben noch ein Anfänger. Falls ich etwas vergessen haben sollte und das ganze nicht läuft, meldet euch.
 
Werbung:
Zurück
Oben