Verständnisfrage: Wiki: PHP nachladen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Verständnisfrage: Wiki: PHP nachladen

    //EDIT Thema gesplittet von http://www.easy-coding.de/ajax-auswahlmenue-von-get-the-code-mit-weiteren-listboxen-t584.html

    Bezug auf [coderwiki]HowTos/Ajax-Inhalte-mit-PHP-nachladen[/coderwiki]
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    Quellcode

    1. function handleResponse() {
    2. if(req.readyState == 4){
    3. var response = req.responseText;
    4. var update = new Array();
    5. if(response.indexOf('||' != -1)) {
    6. update = response.split('||');
    7. document.getElementById(update[0]).innerHTML = update[1];


    Wie ist dein Code ab if(response.indexOf...) zu verstehen?

    Gruß

    Jochen
  • Hi,

    die Funktionen hab ich im Wiki erklärt:

    Jetzt kommt JavaScript zum Einsatz. Betrachtet Zeile 40...
    formular.php

    Quellcode

    1. update = response.split('||');
    2. for(i=0; i<update.length; i+=2) {
    3. document.getElementById(update[i]).innerHTML = update[i+1];
    4. }


    Der gelesene Inhalt wird erst in ein Array gesplittet und dann wird dem HTML Element "content2" der Inhalt des nächsten Array Elements zugeordnet

    Das Array würde im genannten Beispiel folgendermaßen aussehen

    Quellcode

    1. 1. array[0] = content2
    2. 2. array[1] = ist 2 eine 2 eigene 2 die 2 einige 2 mit 2 Ihr 2 Datenbank 2 und 2 herzlichst 2....


    Zum weiteren Verständnis schau dir am besten die SELFHTML Seiten dazu an:
    * JavaScript: split()
    * JavaScript: indexOf()

    Wenn noch was irritiert, einfach nochmal näher erläutern, was unklar ist
  • Ich verstehe zwar mittlerweile was die beiden Methoden machen - aber halt leider nicht im Fall "easy-coding.de/ajax-auswahlmen…teren-listboxen-t584.html". Du verwendest folgende Zeile:

    Quellcode

    1. echo 'select'.$_GET['dest'].'|| ';


    Darunter sind dann die eigentlichen Select-Felder bzw Dropdown-Menüs. Es funktioniert alles wunderbar - nur warum? Warum muß ich das gerade so schreiben und kann nicht direkt die Select-Felder ansprechen? Was passiert an der oben gezeigten Stelle genau?

    Nach meiner Einschätzung - korrigiere mich, wenn ich falsch liege - ist diese Stelle dafür da, den Inhalt jedes Dropdown-Menüs (den Code in der func.php) an die Stelle der jeweiligen <div style="float:left" id="select1"> - Felder in der formular.html zu übergeben.
  • rufe deine php seite doch mal mit allen parametern (dest=2&s=hallo) direkt im browser auf um das geparste ergebnis zu sehen

    es handelt sich um eine einfache Textrückgabe wie folgt

    Quellcode

    1. DivID1||Inhalt für DivID1||DivID2||Inhalt für DivID2


    Mit split() zerlege ich diesen Text dann in ein Array und dann wird jedes 2te Element beginnend bei eins in jedes div mit der ID jedes 2ten Elements beginnend bei 1 gefüllt.
  • Danke dir!!! Jetzt versteh ich das ganze schon eher ;)

    Um nochmal auf die Dropdown-Menüs zurückzukommen - ein letztes Mal:
    Ich hab in der func.php if-Abfragen, die so aufgebaut sind:

    Quellcode

    1. if($_GET['dest'] == 2)
    2. {
    3. echo '<select name="keyword_model" style="width: 200px" id="dropdown'.$_GET['dest'].'" onChange="sendRequest(3)">';
    4. echo '<option value="">Bitte wählen</option>';
    5. .
    6. .
    7. .
    8. else if($_GET['dest'] == 3)
    9. {
    10. ...
    11. }
    12. else if($_GET['dest'] == 4)
    13. ...
    Alles anzeigen


    Soweit so gut. Nun würde ich gerne den Wert oder Inhalt von $_GET des ersten Dropdown-Menüs in das übernächste Menü bzw. die übernächste if-Abfrage übernehmen, damit ich sie verwenden kann. Meine bisherigen Versuche sind alle gescheitert.

    Kannst du mir da weiterhelfen?

    Gruß

    Jochen
  • Wenn ich keine Datenbankabfragen machen würde und wüßte, was in $_GET stehen muß, könnte ich einfach darauf zugreifen. Allerdings stellt sich das bei mir als schwierig heraus. Vielleicht steh ich aber nur aufm Schlauch.

    Wie meinst du das mit anpassen?
    In meinem Fall ist ja nur die Variable $_GET['dest'] eindeutig identifizierbar. Kann ich den momentanen Inhalt der Variablen $_GET[s] nicht irgendwie zwischensichern?

    Gruß

    Jochen
  • Gibts hierbei vielleicht ne Lösung via Ajax? Ich stelle mir sowas vor wie:

    Quellcode

    1. function sendRequest(i) {
    2. try {
    3. req = window.XMLHttpRequest?new XMLHttpRequest():
    4. new ActiveXObject("Microsoft.XMLHTTP");
    5. } catch (e) {
    6. //Kein AJAX Support
    7. }
    8. index = i - 1;
    9. inhalt = document.getElementById('dropdown' + index );
    10. container = document.getElementById('select2');
    11. req.onreadystatechange = handleResponse;
    12. req.open('GET', 'func.php?dest='+ i + '&s=' + inhalt.value + '&model=' + container.value);
    13. req.send(null);
    14. }
    Alles anzeigen


    Das Beispiel funzt allerdings nicht!!!
    Durch diese (falsche) Lösung wollte ich erreichen, daß der Wert aus dem zweiten Select-Feld abgegriffen wird und an jedem anderen Dropdown-Menü verwendet werden kann ->

    if(isset($_GET[model]))


    Kann man dies erreichen?
  • "Sandman" schrieb:

    In meinem Fall ist ja nur die Variable $_GET['dest'] eindeutig identifizierbar. Kann ich den momentanen Inhalt der Variablen $_GET nicht irgendwie zwischensichern?


    Nein, du hast doch 2 Variablen.
    $_GET['dest'] und $_GET['s'] - darüber kannst du alles abdecken.

    Hier eine Lösung ohne MySQL: ajax-auswahlmenue-von-get-the-code-mit-weiteren-listboxen-t584.html
  • Ich dachte aber, daß in $_GET nur nen Inhalt steht und die Variable 's' nicht unterscheidbar wäre!? Ich kann aber hier nicht den Namen des Select-Feldes nehmen. Wie kann ich das denn identifizieren?

    Bei $_GET['dest'] == 4 -> ok
    $_GET['s'] == ? -> kein Plan! Wenn ich im Select ein
    echo '<option value="'.$current_id.'">'.$current.'</option>';
    hab - steht da doch irgendein Wert drin, der per $_GET[s]
    übertragen wird.

    In der Funktion steht doch '&s=' + inhalt.value - wenn ich das richtig verstehe, wird nur der momentane Inhalt übertragen!?

    Bin leider ratlos :(

    Hier mal mein Code in Ausschnitten:

    Quellcode

    1. require('includes/application_top.php');
    2. echo 'select'.$_GET['dest'].'|| ';
    3. if($_GET['dest'] == 2)
    4. {
    5. echo '<select name="keyword_model" style="width: 200px" id="dropdown'.$_GET['dest'].'" onChange="sendRequest(3)">';
    6. echo '<option value="">Bitte wählen</option>';
    7. .
    8. .
    9. .
    10. //sql-abfrage mit $_GET[s]
    11. echo '<option value="'.$row->products_ean.'">'.$row->products_ean.'</option>';
    12. }
    13. else if($_GET['dest'] == 3)
    14. {
    15. echo '<select name="hauptkategorie" style="width: 200px" id="dropdown'.$_GET['dest'].'" onChange="sendRequest(4)">';
    16. echo '<option value="">Bitte wählen</option>';
    17. .
    18. .
    19. .
    20. . //sql-abfrage mit $_GET[s]
    21. echo '<option value="'.$current_id.'">'.$current.'</option>';
    22. //--------------------------------------------------------------------------
    23. }
    24. else if($_GET['dest'] == 4)
    25. {
    26. echo '<select name="unterkategorie1" style="width: 200px" id="dropdown'.$_GET['dest'].'" onChange="sendRequest(5)">';
    27. echo '<option value="">Bitte wählen</option>';
    28. .
    29. .
    30. .//sql-abfrage mit $_GET[s]
    31. .
    32. foreach ($teile as $wert)
    33. {
    34. echo '<option value="'.$wert.'">'.$wert.'</option>';
    35. }
    36. //--------------------------------------------------------------------------
    37. }
    Alles anzeigen