tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
439
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Ghostwarrior Ghostwarrior ist offline Mitglied
    Registriert seit
    Jun 2007
    Beiträge
    16
    Hallo Leute,
    ich habe die Frage, ob es möglich ist, über ein "submit" Button eines "form" Elements ein php file in einer div box auf der selben Seite auszuführen ohne das die Seite neu geladen wird.
    Sprich wenn ich auf den Button klick möchte ich eine Datenbankabfrage ausführen und den Value des Submit Buttons mit der Datenbank abgleichen. Das Ergebnis soll dann in der Div-Box dargestellt werden.

    Ist so etwas überhaupt möglich?

    Vielen Dank für eure Hilfe
     

  2. #2
    Back2toxic Back2toxic ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Pfalz
    Beiträge
    219
    Ja, Stichwort Ajax.
    Recht einfach durch die Prototype-Library zu realisieren.

    Für dich in dem Fall interessant http://www.prototypejs.org/api/ajax/request

    Bei Fragen - fragen


    Beispiel:
    Aufruf deiner PHP-Datei

    PHP-Code:
    <html>
    <
    head>
      <
    script src="js/lib/prototype.js" type="text/javascript"></script>

    <script type="text/javascript">
    //Time lässt einen Timer mitlaufen, hieran siehst du, dass es keinen Reload gibt
        function time(){
            elem = document.getElementById('zeitdiv')
            elem.innerHTML = parseInt(elem.innerHTML)+1;
            setTimeout("time()",1000);
        }


        function myAjaxRequest(url,reqType,output,async){
            //entspricht document.getElementById(output), prototype.js funktion
            var out = $(output); 

            //neuen Ajax-Request anstoßen
            new Ajax.Request(url, {
                method: reqType,
                asynchronous: async,
                onSuccess: function(transport) {
                    out.innerHTML = transport.responseText;
                },
                onFailure: function(transport) {
                    alert(transport.responseText);
                }

            });
        }

    </script>
    </head>
    <body onload="time();">
    <div id="zeitdiv">0</div>
    <div id="outputDiv">&nbsp;</div>
    <form>
        <button onclick="myAjaxRequest('index.php','POST','outputDiv',true); return false;">
        Absenden
        </button>
    </form>
    </body>
    </html> 
    Geändert von Back2toxic (18.11.08 um 14:01 Uhr)
     

  3. #3
    Ghostwarrior Ghostwarrior ist offline Mitglied
    Registriert seit
    Jun 2007
    Beiträge
    16
    Danke, das hört sich doch schon mal gut an.
    Allerdings ist mir die Realisierung noch etwas unklar.

    Ich habe folgendes "form" Element
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    
    echo '<form method="post" name="form" action="templates/startsite/select_signaturee.php">';
     echo '<select class="startseite_ausgabe" name="signatures" size="13">';
      echo '<optgroup label="Signaturgruppen (Systematik)">';
        for($i=0; $i<count($this->$signatures); $i++) {
         $uebergabevalue = $signatures[$i]->signature .'_'. $signatures[$i]->systematic;
         echo '<option value="'. $uebergabevalue .'">'. $signatures[$i]->signature .' ('. $signatures[$i]->systematic .')</option>';
        }
      echo '</optgroup>';
     echo '</select>';
     echo '<br />';
     echo '<p><input type="submit" value="Signaturgruppe w&auml;hlen" /></p>';
    echo '</form>';

    Die über "action" aufgerufene Datei sieht so aus:
    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    
    <?php
    /*Datenbankverbindung*/ 
          $link = mysql_connect ( "", "", "");
          if (!$link) {
            die('keine Verbindung möglich: ' . mysql_error());
            }
            $db_selected = mysql_select_db('', $link);
            if (!$db_selected) {
            die ('Kann die Datenbank nicht benutzen : ' . mysql_error());
            }
            
        //print_r($_POST);
        
    /*Variablen trennen*/
        $part = explode("_",$_POST['signatur']);
        $signatur = $part[0];
        $systematik = $part[1]; 
        
        $sqlstr = "SELECT signatur, systematik, bez, BereichID FROM `bis_signaturen` WHERE signatur='".$signatur."' and systematik='".$systematik."'";
        $sqlstr2 = "SELECT id, bez, farbe FROM `bis_metaebene`  ORDER BY `id` ASC";
        $sqlstr3 = "SELECT regalID, stockwerkID, signatur, systematik FROM `bis_vt_sign_regale`  WHERE signatur='".$signatur."' and systematik='".$systematik."'";
        
    /*Auslesen der Signatur aus der Datenbank*/
        $result = mysql_query($sqlstr);
        if (!$result) {
            die('Ungültige Abfrage: ' . mysql_error());
        }
     
        $signaturen = array();
        while($row = mysql_fetch_object($result))
            {
                array_push($signaturen, new signaturen($row->signatur, $row->systematik, $row->bez, $row->BereichID));
            }       
    /*Klasse Signaturen*/
        class signaturen {
            function signaturen($sig, $sys, $bez, $ber) {
                $this->signatur = $sig;
                $this->systematik = $sys;
                $this->bez = $bez;
                $this->BereichID = $ber;
            }
        }
    /*Auslesen der Metaebenen aus der Datenbank*/
        $result = mysql_query($sqlstr2);
            if (!$result){
                die('Ungültige Abfrage: ' . mysql_error());
            }
     
            $metaebenen = array();
            while($row = mysql_fetch_object($result))
            {
                array_push($metaebenen, new metaebenen($row->id, $row->bez, $row->farbe));
            }
    /*Klasse metaebenen*/
            class metaebenen {
                function metaebenen($id, $bez, $farbe) {
                    $this->id = $id;
                    $this->bez = $bez;
                    $this->farbe = $farbe;
                }
            }          
    /*Auslesen der Stockwerke aus der Datenbank*/
        $result = mysql_query($sqlstr3);
        if (!$result) {
            die('Ungültige Abfrage: ' . mysql_error());
        }
     
        $stockwerke = array();
        while($row = mysql_fetch_object($result))
            {
                array_push($stockwerke, new stockwerke($row->regalID, $row->stockwerkID, $row->signatur, $row->systematik));
            }
    /*Klasse stockwerke*/
            class stockwerke {
                function stockwerke($rid, $sid, $sig, $sys) {
                    $this->regalID = $rid;
                    $this->stockwerkID = $sid;
                    $this->signatur = $sig;
                    $this->systematik = $sys;
                }
            }       
                            
            echo '<p>Signatur <b>'.$signaturen[0]->signatur.' - '.$signaturen[0]->bez.'</b> geh&ouml;rt zur Metaebene:</p>';
    /*Abfrage, welcher Metaebene die Signatur entspricht*/
            if ($signaturen[0]->systematik == $systematik && $signaturen[0]->BereichID == $metaebenen[0]->id ){
                echo '<span style="background-color:'.$metaebenen[0]->farbe.';">'.$metaebenen[0]->bez.'</span>';
            }
            if ($signaturen[0]->systematik == $systematik && $signaturen[0]->BereichID == $metaebenen[1]->id){
                echo '<span style="background-color:'.$metaebenen[1]->farbe.';">'.$metaebenen[1]->bez.'</span>';
            }
            if ($signaturen[0]->systematik == $systematik && $signaturen[0]->BereichID == $metaebenen[2]->id){
                echo '<span style="background-color:'.$metaebenen[2]->farbe.';">'.$metaebenen[2]->bez.'</span>';
            }
            if ($signaturen[0]->systematik == $systematik && $signaturen[0]->BereichID == $metaebenen[3]->id){
                echo '<span style="background-color:'.$metaebenen[3]->farbe.';">'.$metaebenen[3]->bez.'</span>';
            }
            if ($signaturen[0]->systematik == $systematik && $signaturen[0]->BereichID == $metaebenen[4]->id){
                echo '<span style="background-color:'.$metaebenen[4]->farbe.';">'.$metaebenen[4]->bez.'</span>';
            }
            
    /*Variablen für die Anzahl der Regale auf den einzelnen Stockwerken*/
            $sumlevelone = 0;
            $sumleveltwo = 0;
            $sumlevelthree = 0;
            $sumlevelfour = 0;
    /*Auf welchen Stockwerken befindet sich die Signatur?*/
            for($i=0; $i<count($stockwerke); $i++) {
                if($stockwerke[$i]->signatur == $signatur && $stockwerke[$i]->systematik == $systematik){
                    if($stockwerke[$i]->stockwerkID == 1){
                        $sumlevelone++;
                    }
                    if($stockwerke[$i]->stockwerkID == 2){
                        $sumleveltwo++;
                    }
                    if($stockwerke[$i]->stockwerkID == 3){
                        $sumlevelthree++;
                    }
                    if($stockwerke[$i]->stockwerkID == 4){
                        $sumlevelfour++;
                    }
                }
            }
    /*Ausgabe der Regalanzahl auf den einzelnen Stockwerken*/
            echo '<p>Im <a href="#">1. Obergeschoss</a> befinden sich '.$sumlevelfour.' Regale mit der gew&auml;hlten Signaturgruppe.</p>';
            echo '<p>Im <a href="#">Erdgeschoss</a> befinden sich '.$sumlevelthree.' Regale mit der gew&auml;hlten Signaturgruppe.</p>';
            echo '<p>Im <a href="#">1. Untergeschoss</a> befinden sich '.$sumleveltwo.' Regale mit der gew&auml;hlten Signaturgruppe.</p>';
            echo '<p>Im <a href="#">2. Untergeschoss</a> befinden sich '.$sumlevelone.' Regale mit der gew&auml;hlten Signaturgruppe.</p>';
            
    /*Beenden der Datenbankverbindung*/
            mysql_close($link);
            
    /*Zurück auf Ausgangsseite*/        
            header("location:template_ebene_0.php");
    ?>

    wie muss ich nun vorgehen, dass ich dies in der Seite mit dem "form" Element laden ausführen kann?
    Geändert von Ghostwarrior (18.11.08 um 13:50 Uhr)
     

  4. #4
    Back2toxic Back2toxic ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Pfalz
    Beiträge
    219
    Willst du das Form-Element gegen die Ausgabe tauschen, oder soll das Form-Element bestehen bleiben, und die Ausgabe darüber oder darunter erfolgen?

    In jedem Fall musst du noch ein Leeres Div erzeugen, welches dir später als Ausgabediv dient, und du musst jedem Form-Element noch eine ID zuweisen. diese kann gleich dem name-Attribut der Elemente sein, darf aber nicht doppelt vergeben sein!

    Soll das Form-Element durch die Ausgabe ersetzt werden, so musst du das Form-Element durch das Div einschließen.
    Code :
    1
    2
    3
    4
    5
    
    <div id="output">
    <form>
    ...
    </form>
    </div>

    Soll das Form-Element bestehen bleiben, so muss das Div über oder unter das Form-Element.
    Code :
    1
    2
    3
    4
    
    <form>
    ...
    </form>
    <div id="output">&nbsp;</div>

    Dem Submitbutton musst du nun ein onclick-Event zuweisen, welches den AjaxRequest auslöst. Hierbei musst du verschiedene Parameter mit übergeben.
    Der Aufruf ist wie folgt:
    deinAjaxRequest(url,requestType,outputDiv,asynchron)

    Als url trägst du deine Form-Action ein.
    Als requestType trägst du deine Form-Method ein.
    Als OutputDiv trägst du das Div ein, in welches später die Ausgabe erfolgen soll.
    Bei Asynchron trägst du true oder false ein, true für asynchron, false für nicht-asynchron(synchron?).
    Code :
    1
    
    onclick="deinAjaxRequest('templates/startsite/select_signaturee.php','POST','output','true'); return false;"

    Somit wäre dieser Teil erledigt.

    Damit Javascript aber nicht meckert, muss jetzt die Funktion "deinAjaxRequest" angelegt werden. Dazu musst du erst die prototype.js im <head>-Bereich deiner Seite includen, diese findest du unter dem Link in meinem ersten Post.
    Danach inkludierst du entweder deine eigene Javascript-Datei, oder du schreibst den Javascript-Code direkt in Script-Tags in deine Datei:
    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
    
    <script src="pfad/zur/prototype.js" type="text/javascript"></script>
    //entweder include
    <script src="pfad/zur/scripts.js" type="text/javascript></script>
    //oder direkt in die Datei
    <script type="text/javascript">
    function deinAjaxRequest(url,reqType,output,async){
        output = $(output);
        output.innerHTML="Bitte warten...";
     
        //Zuerst muss die url aufbereitet werden
        sig = $('signatures');
        url += 'signatures?'sig.value;
     
    //Jetzt der AjaxRequest
                    new Ajax.Request(url, { 
                                  method: reqType,
                                  asynchronous: async,
                                  onSuccess: function(transport) {
                                          out.innerHTML = transport.responseText;
                                  },
                                 onFailure: function(transport) {
                                          alert(transport.responseText);
                                          output.innerHTML = "Fehler!";
                                  }
                    });
    }
    </script>

    Ich hoffe es war verständlich... falls nicht, einfach fragen
     

  5. #5
    Ghostwarrior Ghostwarrior ist offline Mitglied
    Registriert seit
    Jun 2007
    Beiträge
    16
    Vielen Dank für deine verständliche und ausführliche Antwort. Sorry, dass ich mich so lange nicht gemeldet habe, war noch mit einem anderen Problem beschäftigt.

    Ich bin jetzt mal nach deiner Anleitung vorgegangen und habe es getestet. Leider kommt eine PHP-Fehlermeldung für folgender Zeile:
    Code :
    1
    
    <input type="submit" value="Signaturgruppe w&auml;hlen" onclick="AjaxRequest('templates/startsite/select_signature.php','POST','output','true'); return false;" />

    Die Fehlermeldung lautet:

    Parse error: syntax error, unexpected T_STRING, expecting ',' or ';' in
    Geändert von Ghostwarrior (18.11.08 um 16:46 Uhr)
     

  6. #6
    Back2toxic Back2toxic ist offline Mitglied Gold
    Registriert seit
    Aug 2007
    Ort
    Pfalz
    Beiträge
    219
    Die einfachste Möglichkeit den Fehler zu beheben ist einen schließenden php-Tag vor das <input type="submit">, und einen öffnenden nach das Element zu stellen.
    Der Fehler wird durch die Hochkommata im Aufruf der Javascriptfunktion erzeugt.
     

Ähnliche Themen

  1. Neues Formular über Button öffnen
    Von StonedMind im Forum .NET Windows Forms
    Antworten: 2
    Letzter Beitrag: 29.06.10, 16:12
  2. Button liegt innerhalb einer Maske
    Von Haarentferner im Forum Flash Plattform
    Antworten: 0
    Letzter Beitrag: 25.07.08, 17:56
  3. Antworten: 2
    Letzter Beitrag: 08.11.07, 14:15
  4. Wert von Radio Button auf einen Submit Button weiterleiten
    Von ImperatorAres im Forum Flash Plattform
    Antworten: 8
    Letzter Beitrag: 20.09.05, 07:19
  5. Antworten: 21
    Letzter Beitrag: 10.02.05, 16:44