tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
NEIN
ANTWORTEN
15
ZUGRIFFE
817
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Rigoo Rigoo ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    13
    Hallo zusammen,

    vermutlich ist mein Anliegen (als JS/Ajax-Anfänger) sehr speziell, aber vielleicht findet sich ja jemand, der eine (einfache?) Lösung dafür hat.

    Ausgangspunkt:

    Eine Tabelle mit 2 Spalten. In der linken Zelle ein Eingabefeld, in das der Nutzer eine Eingabe tätigt, in der rechten Zelle soll später die Ausgabe erfolgen.

    Beispiel:
    Code :
    1
    2
    3
    4
    5
    6
    
    <table>
        <tr>
            <td><input type="text" value="Benutzereingabe" /></td>
            <td>Hier erfolgt die Ausgabe</td>
        </tr>
    </table>

    Was soll genau passieren?

    Gibt der Nutzer im Textfeld einen Inhalt ein, soll in der rechten Zelle eine Ausgabe erfolgen. Genauergesagt soll also "live" ein SQL-Query ausgeführt werden und in der rechten Zelle (je nach Benutzereingabe) ein Bild ausgegeben werden - quasi eine Suchfunktion und das Bild wird direkt rechts ausgegeben.

    Wärend der Eingabe wäre es ganz toll, wenn eine "Laden"-Grafik angezeigt wird, aber eben nur, sofern eine Eingabe erfolgt (da es mehrere Zeilen mit Eingabefeldern gibt, später werden die Eingaben anderweitig weiterverarbeitet). Sofern nichts gefunden wird (nach X Sekunden Lade-Grafik) sollte ein Hinweis "nichts gefunden" angezeigt werden.

    Das SQL-Query ist nicht das Problem, mein Problem ist lediglich die Umsetzung mit JS/Ajax, das bei Eingabe im <input>-Feld automatisch ein SQL-Query ausgeführt wird und eine entsprechende Ausgabe in der nebenstehenden Zelle generiert.

    Vielleicht hat ja jemand eine Lösung.

    Danke und Grüße,
    Rigoo
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Ich kann dir nur teilweise helfen weil ich (leider) von Ajax keine Ahnung habe. Aber um die Aktion auszulösen musst du dem Textfeld das onkeyup- bzw. onkeypress-Ereignis zuweisen.

    Näheres dazu findest du hier.
    Rigoo bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #3
    Avatar von String
    String String ist offline Mitglied Gold
    Registriert seit
    Feb 2004
    Beiträge
    238
    <input type="text" value="Benutzereingabe" onkeyup="AJAX();" />

    Wie genau Ajax funktioniert findest du z.B. hier:
    http://ajax.frozenfox.at/ajax_002.html

    paD
     

  4. #4
    Rigoo Rigoo ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    13
    Hallo zusammen,

    danke für die Antworten.

    Mittlerweile habe ich mich etwas durch die Ajax-Welt gekämpft und schon einen "Teilerfolg" verbuchen können Leider aber nur einen Teilerfolg...

    Er liest nun die entsprechenden Daten aus der (Test)Datenbank aus und gibt mir den Namen sowie den Dateiname auch korrekt aus, siehe mein Beispiel (ID 1-4 kann eingegeben werden).

    Folgendes steht noch auf meinem Zettel:

    - Nach Eingabe im Textfeld sollte es eine Zeitverzögerung geben, bis die .php-Datei ausgeführt und der Inhalt ausgegeben wird (so lange soll weiter die Ladegrafik angezeigt werden). (bereits gelöst und unten im Code angepasst)
    - Entfernt man seine Eingabe wieder, bleibt der Inhalt derzeit leer, hier sollte wieder die Ladegrafik angezeigt werden

    Ich glaube, das wars erstmal - vielleicht kann mir hier ja noch jemand zur Hand gehen oder sogar sagen, was unten totaler Käse ist und/oder wie man das ganze besser machen kann.


    Hier einmal mein bisheriger Stand:

    ajax.html:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    
    <!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" xmlns:og="http://ogp.me/ns#" xmlns:fb="http://www.facebook.com/2008/fbml">
    <head>
        <title>Ajax Test</title>
        <meta http-equiv="content-language" content="de" />
        <meta http-equiv="content-type" content="text/html; charset=UTF-8" />
        <script type="text/javascript" src="ajax.js"></script>
    </head>
     
    <body>
     
    <h2>Ajax Test</h2>
     
    <form name="ajaxform">
     
     
    <form name="ajaxform">
        <table cellpadding="2" border="1">
            <tr>
                <th colspan="4">Vier Suchfelder…</th>
            </tr>
            <tr>
                <td width="25%" align="center" style="height:100px;">
                    <div id="ausgabe">
                        <br /><img src="http://www.tutorials.de/images/ajax-loader.gif" /><br /><br />
                        <span style="font-size:10px;">Warte auf Eingabe</span>
                    </div>
                </td>
                <td width="25%" align="center">
                    <div id="ausgabe">
                        <br /><img src="http://www.tutorials.de/images/ajax-loader.gif" /><br /><br />
                        <span style="font-size:10px;">Warte auf Eingabe</span>
                    </div>
                </td>
                <td width="25%" align="center">
                    <div id="ausgabe">
                        <br /><img src="http://www.tutorials.de/images/ajax-loader.gif" /><br /><br />
                        <span style="font-size:10px;">Warte auf Eingabe</span>
                    </div>
                </td>
                <td width="25%" align="center">
                    <div id="ausgabe">
                        <br /><img src="http://www.tutorials.de/images/ajax-loader.gif" /><br /><br />
                        <span style="font-size:10px;">Warte auf Eingabe</span>
                    </div>
                </td>
            </tr>
            <tr>
                <td width="25%" align="center">
                    <input type="text" onkeyup="bsuche()" name="eingabe" id="eingabe" size="2" />
                </td>
                <td width="25%" align="center">
                    <input type="text" onkeyup="bsuche()" name="eingabe" id="eingabe" size="2" />
                </td>
                <td width="25%" align="center">
                    <input type="text" onkeyup="bsuche()" name="eingabe" id="eingabe" size="2" />
                </td>
                <td width="25%" align="center">
                    <input type="text" onkeyup="bsuche()" name="eingabe" id="eingabe" size="2" />
                </td>
            </tr>
        </table>
    </form>
     
     
    </form>
     
    </body>
    </html>

    ajax.php:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    
    <?php
     
    include('db_conf.inc.php');
     
    if (isset($_GET['eingabe']) && $_GET['eingabe'] != "") {
     
        $abfrage = "SELECT id,name FROM bilder WHERE id = '".mysql_real_escape_string($_GET['eingabe'])."' AND ausgabe = 1";
        $ergebnis = mysql_query($abfrage) or die;
        $row = mysql_fetch_array($ergebnis);
     
        $abfrage2 = "SELECT dateiname FROM dateinamen WHERE bild_id = $row[id]";
        $ergebnis2 = mysql_query($abfrage2) or die;
        $row2 = mysql_fetch_array($ergebnis2);
     
        if ($row) {
            echo 'Name: '.$row['name'].'<br />';
            echo 'Bild: <img src="images/'.$row2['dateiname'].'" />';
        }
        else {
            echo 'Nichts gefunden...';
        }
     
    }
     
    else {
        echo'<br />
    <img src="images/ajax-loader.gif" /><br /><br />
    <span style="font-size:10px;">Warte auf Eingabe</span>';
    }
     
    ?>

    ajax.js:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    
    var timeout = null;
     
    function bsuche() {
        if (timeout) {  
            clearTimeout(timeout);
        }
        timeout = setTimeout(function() {
            bgo('eingabe','ausgabe');
        }, 500);
    }
     
     
    function getHTTPObject(){
        if (window.ActiveXObject) return new ActiveXObject("Microsoft.XMLHTTP");
        else if (window.XMLHttpRequest) return new XMLHttpRequest();
        else {
            alert("Your browser does not support AJAX.");
            return null;
        }
    }
     
     
    function setOutput(){
        if(httpObject.readyState == 4){
            document.getElementById(tagId).innerHTML = httpObject.responseText;
        }
    }
     
     
    function bgo(arg, inTagId){
        httpObject = getHTTPObject();
        tagId = inTagId;
        if (httpObject != null) {
            httpObject.open("GET", "ajax.php?" + arg + "=" + document.getElementById('eingabe').value, true);
            httpObject.send(null);
            httpObject.onreadystatechange = setOutput;
        }
    }
     
    var httpObject = null;
    Geändert von Rigoo (12.01.12 um 23:30 Uhr) Grund: Code aktualisiert
     

  5. #5
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Ändere mal in der "ajax.php" den IF-Block so ab, dann wird die Ladegrafik angezeigt wenn kein Suchbegriff eingegeben wurde bzw. dieser wieder gelöscht wird:

    PHP-Code:
    if (isset($_GET['eingabe']) && $_GET['eingabe'] != "") {
        
    // hier der Code der ausgeführt wird wenn ein gültiger Suchbegriff übergeben wird
    } else{
        
    // und dieser Code wenn kein Suchbegriff übergeben wird
        
    echo 'Bild: <img src="bilder/ajax-loader.gif" />';

    Was du aber auch noch machen solltest ist den übegebenen GET-Wert z.B. mit mysql_real_escape_string prüfen.

    Außerdem dürfte die "id" ja eindeutig sein, dann kannst du ans Ende der Abfrage auch noch ein "LIMIT 1" machen.

    Was ich nicht verstehe, ist der Sinn der Verzögerung. Jeder ist doch froh wenn er möglichst schnell das Ergebnis bekommt. Warum verzögerst du die Anzeige?
    Rigoo bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  6. #6
    Rigoo Rigoo ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    13
    Oh man: Danke, tombe! Manchmal sieht man den Wald vor lauter Bäumen nicht bzw. denkt einfach zu kompliziert!

    Die GET-Werte werden natürlich noch vor SQL-Injections geschützt, aber danke für den Hinweis!

    Zur Wartezeit:

    Mein Hintergedanke war/ist, das ich vermeiden wollte, das man bei Eingabe von "13" schon das Ergebnis von "1" angezeigt bekommt, wärend man die Eingabe noch nicht abgeschlossen hat (nur Beispielhaft). Ob sich das später "live" durchsetzt oder ich das ganze doch ohne Verzögerung nutze muss ich dann mal schauen.
     

  7. #7
    Rigoo Rigoo ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    13
    Nun habe ich doch noch etwas, was ich bisher nicht bedacht habe in meinen Tests:

    Ich habe später mehrere Eingabefelder und entsprechend auch mehrere (gleich viele) Ausgabe-DIVs. Diese würde ich dann natürlich alle entsprechend benennen: eingabe1, eingabe2, ... sowie ausgabe1, ausgabe2, ...

    Nur: Wie bringe ich dem .js-Code bei, das es mehrere geben kann, ohne für jede ID eine neue Funktion anzulegen !?
     

  8. #8
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Verstehe es mal wieder nicht so genau aber vielleicht hilft die als Parameter für den Funktionsaufruf die Angabe "this.id".

    Damit übergibst du dann immer die ID des Objekts welche die Funktion aufruft. Innerhalb der Funktion kannst du ja dann wieder mit getElementById darauf zugreifen.
     
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  9. #9
    Rigoo Rigoo ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    13
    Derzeit ist es ja so, das ich die Elemente "eingabe" und "ausgabe" nutze und entsprechend in meinem .js-Code verwende. Nun - im "live Betrieb" sollen aber mehrere "eingabe" und "ausgabe" elemente vorhanden sein, entsprechend setze ich die Namen also "eingabe1", "eingabe2", ... und "ausgabe1", "ausgabe2", ... mit fortlaufenden Nummern.

    Danke für den Ansatz, aber kannst du dir ggf. einmal meinen .js-Code oben ansehen und mir verraten, wie ich diesen entsprechend anpasse? Javascript ist leider absolut nicht meine Welt
     

  10. #10
    Rigoo Rigoo ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    13
    Zur Vollständigkeithalber habe ich mein Beispiel von oben aktualisiert und oben auch den Code (aktueller Stand) eingefügt.

    Ggf. kann mir ja jemand auf die Sprünge helfen, so das ich mehrere Felder (es werden am Ende mehr als 4 sein) nutze kann...

    Edit: Und noch etwas, da steh ich scheinbar gerade auf dem Schlauch: Ich habe mittlerweile das ganze etwas weiter entwickelt und zwei Datenbankabfragen eingebunden. Wenn nichts gefunden wurde, sollte die Abfrage eigentlich ein "Nichts gefunden..." (siehe else) ausgeben, was aber nicht passiert (was an der zweiten Datenbankabfrage liegt, entferne ich diese, wird die Meldung wieder angezeigt). Ich glaube ich sehe gerade den Wald wieder vor lauter Bäumen nicht...

    Edit2: OK, letzteres Problem habe ich gelöst, die zweite Abfrage gehört natürlich in die if-Schleife.
    Geändert von Rigoo (12.01.12 um 23:43 Uhr)
     

  11. #11
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Willst du jetzt quasi gleichzeitig mehrere Abfragen starten?

    Also in Feld 1 einen Wert eingeben, in Feld 2 einen anderen Wert eingeben, ... und in Feld xy nochmal einen Wert eingeben und dann sollen alle Ergebnisse angezeigt werden.

    Oder sollen in den Feldern verschiedene Parameter für die Abfrage eingegeben werden?
    Rigoo bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  12. #12
    Rigoo Rigoo ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    13
    Der Endnutzer soll später in jedes Feld einen Wert eintragen können (also unterschiedliche) und im jeweiligen Feld darüber soll das entsprechende Ergebnis angezeigt werden - also identisch zum ersten Feld (was ja schon funktioniert). Die Abfrage selbst (in der Datenbank) bleibt für alle Felder identisch.
    Geändert von Rigoo (13.01.12 um 09:17 Uhr)
     

  13. #13
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Um nicht zu viel Text hier reinzuschreiben, hänge ich dir mal die Dateien als ZIP hier dran.

    Du kannst jetzt in jedes der Textfelder einen Wert eingeben und du bekommst das entsprechende Ergebnis geliefert.

    Da ich in Sachen Ajax aber selber noch blutiger Anfänger bin habe ich mir den Code auch zusammengesucht und nur angepasst. Von der Funktion sollte es dir aber klar sein.
    Angehängte Dateien Angehängte Dateien
    Rigoo bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  14. #14
    Avatar von chmee
    chmee chmee ist gerade online mod | media
    tutorials.de Moderator
    Registriert seit
    Apr 2004
    Ort
    Berlin bei Potsdam
    Beiträge
    7.630
    Blog-Einträge
    4
    Eine Sache : Ich würd die Überprüfung, ob überhaupt die SQL-DB abgefragt werden soll, in JS implementieren. Einfach nur, um unnötige Datenbewegungen zu vermeiden.

    Ladezeichen? in JS.
    keine Eingabe? in JS.
    erste Überprüfung zwecks Injection? in JS.

    mfg chmee
    Rigoo bedankt sich. 
    Mein Blog - VideoFAQ - FotoFAQ - bei Flickr - DSLR Kleinanzeigen
    Benutzt den DANKE-Knopf oder bewertet den Beitrag

    "GEHT NICHT" HILFT NICHT, TESTET EURE CODES ONLINE UND GEBT KLARE INFOS!
    -> Regexp <- -> php <- -> Javascript <-

  15. #15
    Rigoo Rigoo ist offline Mitglied
    Registriert seit
    Aug 2006
    Beiträge
    13
    DANKE, tombe! Das scheint prima zu funktionieren, werde später mal etwas weiter damit rumtesten...

    @chmee:

    Hat das wirklich größere Vorteile? Ich habe bisher immer versucht so wenig wie Möglich (nur so viel wie nötig) in JS umzusetzen. Es kann natürlich sein, das du recht hast - aufgrund meiner bescheidenen JS "Künste" wäre das aber für mich glaube ich ohnehin nicht umsetzbar und später einfach zu pflegen.
     

Ähnliche Themen

  1. Antworten: 20
    Letzter Beitrag: 07.06.11, 14:07
  2. Antworten: 1
    Letzter Beitrag: 26.05.10, 15:44
  3. Aktualisierung von Textfeld nach Eingabe in einem Anderen
    Von funkyvino im Forum Javascript & Ajax
    Antworten: 4
    Letzter Beitrag: 28.10.05, 09:40
  4. Im Query etwas ausgeben auf Eingabe
    Von 2Pac im Forum Internetkommunikation
    Antworten: 2
    Letzter Beitrag: 15.05.05, 20:40
  5. Antworten: 6
    Letzter Beitrag: 14.04.05, 23:31