php.de

php.de (http://www.php.de/)
-   JavaScript, Ajax und mehr (http://www.php.de/javascript-ajax-und-mehr/)
-   -   form action in include datei bei ajax (http://www.php.de/javascript-ajax-und-mehr/50816-form-action-include-datei-bei-ajax.html)

Jojo_44 18.01.2009 14:26

form action in include datei bei ajax
 
Hi ich brauch mal wieder eure geniale Hilfe,

und zwar hab ich eine main.php mit folgendem inhalt:

PHP-Code:

<table width="1000" border="0" cellspacing="0" cellpadding="0">
  <
tr>
    <
td><table width="1000" border="0" cellspacing="0" cellpadding="0">
      <
tr>
        <
td><a href="#" onClick="javascript:setRequest('content','overview.php')">Overview</a></td>
        <
td><a href="#" onClick="javascript:setRequest('content','challenge.php')">Challenge</a></td>
        <
td><a href="#" onClick="javascript:setRequest('content','player.php')">Player</a></td>
        <
td><a href="#" onClick="javascript:setRequest('content','overview.php')">Browser</a></td>
      </
tr>
    </
table></td>
  </
tr>
  <
tr>
    <
td><div id="content"></div></td>
  </
tr>
</
table

(nicht alles)

durch klicken wird im div container 'content' immer eine andere datei dargestellt.(mit ajax gemacht)

Meine player.php sieht folgendermaßen aus:

PHP-Code:

echo "<form action='player.php' method='Post'><input type='checkbox' name='Login2' value='jojo_dragon' /><br><input type='submit' value='Kick'></form>";

$Login $_POST['Login2'];
$client->query('Kick'$Login); 

Jetzt zum Problem, wenn ich bei action player.php mache, werde ich durch klicken des buttons Kick an die player.php weitergeleitet(es wird also nur die player.php angezeigt, die player.php wird also nicht mehr im div container content angezeigt sondern als einzelne datei.) Wenn ich action weglass funktioniert das mit der method='post' überhaupt nichtmehr.

Jetzt meine Frage wie mach ich das, das ich nach dem klicken des Buttons immer noch die main.php und im div container content den inhalt player.php angezeigt bekomme?

Ich hoffe ich konnte das einigermaßen verständlich erklären;)

mfg Jojo

tomtaz 18.01.2009 14:47

Hallo,

alle anderen Buttons/Links funktionieren und der Inhalt wird via Ajax geladen und in das Content Div eingebunden?

Jojo_44 18.01.2009 16:21

Ja funktioniert alles, nur wenn ich halt auf submit klicke, werd ich weitergeleitet zur player.php aber ich will ja das die player.php im div container content angezeigt wird und zwar auch nachdem ich auf submit(Kick) geklickt habe.(davor gehts ja)

mfg Jojo

Jojo_44 21.01.2009 16:34

Ich poste nochmal genauer vielleicht kann dann einer helfen.

der ajax code in der .js

PHP-Code:

    var request false;

    
// Request senden
    
function setRequest(id,tester) {
        
// Request erzeugen
        
if (window.XMLHttpRequest) {
            
request = new XMLHttpRequest(); // Mozilla, Safari, Opera

        
} else if (window.ActiveXObject) {
            try {
                
request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
            
} catch (e) {
                try {
                    
request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
                
} catch (e) {}
            }
        }

        
// überprüfen, ob Request erzeugt wurde
        
if (!request) {
            
alert("Kann keine XMLHTTP-Instanz erzeugen");
            return 
false;
        } else {
            var 
url tester;
            
// Request öffnen
            
request.open('post'urltrue);
            
// Request senden
            
request.send(null);
            
// Request auswerten
            
request.onreadystatechange = function(){ 
            
interpretRequest(id);
            }
        }
    }

    
// Request auswerten
    
function interpretRequest(id) {
        switch (
request.readyState) {
            
// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
            
case 4:
                if (
request.status != 200) {
                    
alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
                } else {
                    var 
content request.responseText;
                    
// den Inhalt des Requests in das <div> schreiben
                    
document.getElementById(id).innerHTML content;
                }
                break;
            default:
                break;
        }
    } 

dann die main.php

PHP-Code:

<html>
<
head>
<
title>Test || Main</title>
<
link rel="stylesheet" type="text/css" href="styles/main.css">
<
script src="includes/main.js" language="JScript" type="text/javascript"></script>
</head>
<body>
<table width="1000" border="0" cellspacing="0" cellpadding="0">
  <tr>
    <td><table width="1000" border="0" cellspacing="0" cellpadding="0">
      <tr>
        <td><a href="#" onClick="javascript:setRequest('content','overview.php')">Overview</a></td>
        <td><a href="#" onClick="javascript:setRequest('content','challenge.php')">Challenge</a></td>
        <td><a href="#" onClick="javascript:setRequest('content','player.php')">Player</a></td>
        <td><a href="#" onClick="javascript:setRequest('content','overview.php')">Browser</a></td>
      </tr>
    </table></td>
  </tr>
  <tr>
    <td><div id="content"></div></td>
  </tr>
</table>


</body>
</html> 

jetzt wird z.B. die player.php geladen (mit ajax) und wie kann ich dann in der player.php ein formular abschicken? weil das klappt so nicht wie oben die player.php ist.

Danke für Antworten

mfg Jojo

David 21.01.2009 20:20

Zitat:

Zitat von Jojo_44
und wie kann ich dann in der player.php ein formular abschicken?

Das ist entweder nur falsch formuliert oder Du hast den falschen Gedankengang. Die Ausgabe player.php wird an den Ajax-Handler im Browser geschickt, dieser ruft irgendwann Deinen onreadystatechange-Handler auf und dieser fügt irgendwann den Ausgabetext als HTML in das Dokument ein - im Browser. Und auch nur "aus dem Browser" heraus wird dann ein eventuell nachgeladenes Formular abgeschickt - PHP hat damit nichts mehr zu tun; es sendet nur irgendeine Zeichenkette, die der Browser dann mittels .innerHTML als HTML interpretiert und in das bestehende Dokument einfügt.
Wenn Du das im Firefox testest, installier Dir mal Firebug.

Jojo_44 22.01.2009 15:14

Ok danke, jop ist ein bisschen komisch ausgedrückt.

Und wenn ich jetzt ein Formular das in der player.php ist, absenden möchte wie stell ich das dann an?

Hab schon gegoogelt aber bin net so recht fündig geworden.

mfg Jojo

Screeze 22.01.2009 15:36

naja entweder du rufst mit dem submit button des formulars direkt die .php seite auf (bei <form action=deinedatei.php> den pfad einfügen, und einen submit button einbauen in den form bereich)
oder du willst die seite nicht komplett neu aufrufen, und schreibst eine Javascript funktion, die über ajax dann per post deine formulardaten an die php schickt, und je nach rückgabewert dann die seite weiterbearbeitet.

Jojo_44 22.01.2009 20:10

Ah danke, hab jetzt die ajax funktion erweitert so das das was ich mit dem formular abschick per request.send(das was gesendet werden soll) an die php gesendet wird.

Jetzt hab ich nur noch ein Syntax Problem und zwar wie soll ich in der php die javascript funktion aufrufen?

PHP-Code:

....
echo 
"<input type='Button' value='Kick' onClick='javascript:setRequest('content','player.php','das wird gesendet')'> ";
.... 

so funktioniert es logischerweise nicht, aber wie dann?

mfg Jojo

Jojo_44 23.01.2009 19:55

Eigentlich hab ich ja gedacht, das die Frage ziemlich einfach ist, aber anscheihnend doch nicht, deswegn poste ich nochmal alles.

jetzt der ajax code in der .js

PHP-Code:

var request false;

    
// Request senden
    
function setRequest(id,tester,nachricht) {
        
// Request erzeugen
        
if (window.XMLHttpRequest) {
            
request = new XMLHttpRequest(); // Mozilla, Safari, Opera

        
} else if (window.ActiveXObject) {
            try {
                
request = new ActiveXObject('Msxml2.XMLHTTP'); // IE 5
            
} catch (e) {
                try {
                    
request = new ActiveXObject('Microsoft.XMLHTTP'); // IE 6
                
} catch (e) {}
            }
        }

        
// überprüfen, ob Request erzeugt wurde
        
if (!request) {
            
alert("Kann keine XMLHTTP-Instanz erzeugen");
            return 
false;
        } else {
            var 
url tester;
            
// Request öffnen
            
request.open('post'urltrue);
            
// Request senden
            
request.send('name='+nachricht);
            
// Request auswerten
            
request.onreadystatechange = function(){ 
            
interpretRequest(id);
            }
        }
    }

    
// Request auswerten
    
function interpretRequest(id) {
        switch (
request.readyState) {
            
// wenn der readyState 4 und der request.status 200 ist, dann ist alles korrekt gelaufen
            
case 4:
                if (
request.status != 200) {
                    
alert("Der Request wurde abgeschlossen, ist aber nicht OK\nFehler:"+request.status);
                } else {
                    var 
content request.responseText;
                    
// den Inhalt des Requests in das <div> schreiben
                    
document.getElementById(id).innerHTML content;
                }
                break;
            default:
                break;
        }
    } 

und die player.php

PHP-Code:

echo "<input type='Button' value='Kick' onClick='javascript:setRequest('content','player.php','du da')'>";


$name34 $_POST['name'];
echo 
$name34

so klappt das nicht, wie muss es den richtig heißen?

Bin dankbar für jeden Hinweis ;)

mfg Jojo

Screeze 24.01.2009 11:28

ich versteh dein problem nicht ganz...

seh ich das richtig, du hast die player.php aufgerufen, dort wird ein buttom zum anklicken angezeigt, der wiederum die player.php aufruft und daten überträgt.

was willst du da noch aufrufen?
du musst doch nur die daten die du per Get oder Post überträgst auswerten in der player.php...


Alle Zeitangaben in WEZ +2. Es ist jetzt 08:14 Uhr.

Powered by vBulletin® Version 3.7.2 (Deutsch)
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0