eintyp
Goto Top

POST-Werte weitergeben

Hallo Administrator/innen,

Ich habe folgendes Problem:
Ich möchte POST-Werte ohne Formular weitergeben. Gibt es da irgendwelche Möglichkeiten?

Mein Beispiel:

Auf der Home ist ein Formular. Wenn man etwas eingibt und bestätigt wird es mittels POST an meine 'auswertung.php' geschickt. Dort wird es per PHP ausgelesen. Je nachdem was der User eingegeben hat, wird es auf eine von verschiedenen Websites geschickt mit entsprechenden POST-Werten.

Ich hoffe ihr könnt mir helfen.
Vielen Dank im vorraus
mfg -einTyp-

Content-ID: 155867

Url: https://administrator.de/contentid/155867

Ausgedruckt am: 05.11.2024 um 16:11 Uhr

EvilMoe
EvilMoe 26.11.2010 um 20:25:49 Uhr
Goto Top
Hallo,

speicher dir den Wert entweder in einer Datenbank, oder benutze dafür Sessions.

Gruß
EinTyp
EinTyp 26.11.2010 um 20:35:08 Uhr
Goto Top
Also ich kann daraus ziehen, dass meine Wunsch-Methode nicht klappt^^.
Kann ich auch normale Arrays an Websites weitergeben?

@EvilMoe:
Hast du keine einfacheren Methoden? face-smile
EvilMoe
EvilMoe 26.11.2010 um 20:39:43 Uhr
Goto Top
Wie meinst du das Arrays an Websites weitergeben?

Session ist recht einfach. Wird behandelt wie ein Array.

session_start();
// nun haben wir $_SESSION
$_SESSION['Foo'] = 'Bar';  
echo $_SESSION['Username'];  

Die Variable Foo wäre nun auf jeder Unterseite verfügbar. Ist das ist doch genau das was du suchst.


Hier mehr Infos: http://tut.php-q.net/de/sessions.html
EinTyp
EinTyp 26.11.2010 um 20:55:03 Uhr
Goto Top
Da gibts bei mir ein Problem. (ich benutze XAMPP)

      session_start();            //Zeile 118
      $_SESSION['Foo'] = 'Bar';   //Zeile 119  
      echo $_SESSION['Foo'];      //Zeile 120  

meine Antwort:

Warning: session_start() [function.session-start]: Cannot send session cookie - headers already sent by (output started at C:\xampp\htdocs\seite1.php:111) in C:\xampp\htdocs\seite1.php on line 118

Warning: session_start() [function.session-start]: Cannot send session cache limiter - headers already sent (output started at C:\xampp\htdocs\seite1.php:111) in C:\xampp\htdocs\seite1.php on line 118
string(3) "Bar"
EinTyp
EinTyp 26.11.2010 um 20:59:28 Uhr
Goto Top
was ist eigentlich mit serialize() ???
Ich schaus mir mal an...
EvilMoe
EvilMoe 26.11.2010 um 20:59:49 Uhr
Goto Top
Eine Session kann nur gestartet werden wenn noch KEIN Header gesendet wurde. Das heißt session_start() muss bei jeder Datei in der ersten Zeile stehen in der du Sessions nutzen möchtest.
nxclass
nxclass 26.11.2010 um 21:10:54 Uhr
Goto Top
Auszug aus meiner Function Klasse:

    /**
     *
     */
    public static function sendHttpPostRequest($sUrl, $aGet, $aPost, $iPort=80)
    {
        $aUrl = parse_url($sUrl);
        $sReferer = $sUrl .'?'. My_Function::createUrl($aGet, true);  
        $sPostData = My_Function::createUrl($aPost, true);
    
        if ($hSock = fsockopen($aUrl['host'], $iPort)) {  
            // sende die Anfrage
            fputs($hSock, "POST {$aUrl['path']} HTTP/1.1\r\n");  
            fputs($hSock, "Host: {$aUrl['host']}\r\n");  
            fputs($hSock, "Referer: $sReferer\r\n");  
            fputs($hSock, "Content-type: application/x-www-form-urlencoded\r\n");  
            fputs($hSock, "Content-length: ". strlen($sPostData) ."\r\n");  
            fputs($hSock, "Connection: close\r\n\r\n");  
            fputs($hSock, $sPostData);
            
            // empfange ggf. eine Antwort
            if (!feof($hSock)) {
                while (!feof($hSock)) {
                    $sResult .= fgets($hSock, 128);
                }
                $sResult = substr($sResult, strpos($sResult, "\r\n\r\n")+4);  
            } else {
                $sResult = true;
            }
            fclose($hSock);
            return $sResult;
        } else {
            //
            return false;
        }
    }

EDIT
    /**
     * Erstellt aus einer Liste eine Url
     * 
     * @param array $aParam     Liste der Parameter => Werte
     * @return string           ein Url String
     */
    public static function createUrl($aParam, $bDataOnly=false)
    {
        $sUrl = ($bDataOnly) ? '' : '?';  
        if (is_array($aParam)) {
            $aUrl = array();
            foreach ($aParam as $key=>$value) {
                if (is_array($value)) {
                    foreach ($value as $entry) {
                        $aUrl = urlencode($key).'='.urlencode($entry);  
                    }
                } else {
                    $aUrl = urlencode($key).'='.urlencode($value);  
                }
            }
            $sUrl .= implode((($bDataOnly) ? '&' : '&'), $aUrl);  
        }
        return $sUrl;
    }
EinTyp
EinTyp 26.11.2010 um 21:11:10 Uhr
Goto Top
Wow! Es geht face-smile
Kann oder muss man die Sitzung löschen?

Danke!
EvilMoe
EvilMoe 26.11.2010 um 21:14:23 Uhr
Goto Top
Können schon: $_SESSION = array();
Mehr braucht man in der Regel nicht.
EinTyp
EinTyp 26.11.2010 um 21:31:27 Uhr
Goto Top
Das ist jetzt blöd..
Ich kapier den Code nur zum Teil...
Wo soll ich was einfügen, wenn ich eine POST-Anfrage an http://www.domain.de/post.php schicken will.
Mit dem Inhalt:

$_POST = array(3) {
    [4]=>
    string(4) "vier"  
    ["Foo"]=>  
    string(3) "bar"  
    ["test_ist"]=>  
    string(8) "gelungen"  
}
EvilMoe
EvilMoe 26.11.2010 um 21:35:29 Uhr
Goto Top
So wie ich das sehe brauchst du nur deinen Array übergeben als Parameter.
Also $aPost = $_POST;
nxclass
nxclass 26.11.2010 um 21:35:33 Uhr
Goto Top
wenn Du die oberen Funtionen in eine statische Klasse eingefügt hast:
Klasse::sendHttpPostRequest( 'http://www.domain.de/post.php', null, $_POST);  
EinTyp
EinTyp 26.11.2010 um 21:44:25 Uhr
Goto Top
Was sollte da (optimal) passieren?
nxclass
nxclass 26.11.2010 um 21:56:53 Uhr
Goto Top
Zuerst werden die URL und die zu übertragenden Daten vorbereitet:
  • die URL wird in seine Bestandteile zerlegt weil wir den HOST und den PATH brauchen
  • die Parameter werden in eine andere Form gebracht ( schlüssel=wert& ...)

Dann wird eine Verbindung aufgebaut und eine HTTP Anfrage gesendet (wie es auch der Browser macht )
  • Header Informationen zuerst
  • dann die POST Daten


Die Bezeichnung 'My_Function' in der sendHttpPostRequest Funktion musst Du noch anpassen - oder Du nutzt diese Funktionen nicht in einer Klasse sondern nur in einer Include -ierten PHP Datei.
EinTyp
EinTyp 26.11.2010 um 22:05:13 Uhr
Goto Top
Meine PHP-Datei is nicht include- iert (oder sowas). Die ist "original".

meine ganzes Skript sieht so aus:

/*public static */function sendHttpPostRequest($sUrl, $aGet, $aPost, $iPort=80) {
    $aUrl = parse_url($sUrl);
    $sReferer = $sUrl .'?'. /*My_Function::*/createUrl($aGet, true);  
    $sPostData = /*My_Function::*/createUrl($aPost, true);
    if ($hSock = fsockopen($aUrl['host'], $iPort)) {  
        fputs($hSock, "POST {$aUrl['path']} HTTP/1.1\r\n");  
        fputs($hSock, "Host: {$aUrl['host']}\r\n");  
        fputs($hSock, "Referer: $sReferer\r\n");  
        fputs($hSock, "Content-type: application/x-www-form-urlencoded\r\n");  
        fputs($hSock, "Content-length: ". strlen($sPostData) ."\r\n");  
        fputs($hSock, "Connection: close\r\n\r\n");  
        fputs($hSock, $sPostData);
        if (!feof($hSock)) {
            while (!feof($hSock)) {
                $sResult .= fgets($hSock, 128);
            }
            $sResult = substr($sResult, strpos($sResult, "\r\n\r\n")+4);  
        } else {
            $sResult = true;
        }
        fclose($hSock);
        return $sResult;
    } else {
        return false;
    }
}

    /** 
     * Erstellt aus einer Liste eine Url 
     *  
     * @param array $aParam     Liste der Parameter => Werte 
     * @return string           ein Url String 
     */ 
/*public static */function createUrl($aParam, $bDataOnly=false) 
{ 
    $sUrl = ($bDataOnly) ? '' : '?';   
    if (is_array($aParam)) { 
        $aUrl = array(); 
        foreach ($aParam as $key=>$value) { 
            if (is_array($value)) { 
                foreach ($value as $entry) { 
                    $aUrl = urlencode($key).'='.urlencode($entry);   
                } 
            } else { 
                $aUrl = urlencode($key).'='.urlencode($value);   
            } 
        } 
        $sUrl .= implode((($bDataOnly) ? '&' : '&'), $aUrl);   
    } 
    return $sUrl; 
}

$_POST['test'] = "gelungen";  
sendHttpPostRequest( 'http://localhost/Netzwerk/seite1.php', null, $_POST);  

(Wahrscheinlich sind bei mia 1000 Fehledr drinnen face-smile )

Ich hab ein paar Sachhen auskommentiert da sie Fehlermeldungen verursachen (public static). So wie ich es verstanden habe hätte ich das "My_Function::" nicht auskommentieren sollen...

P.S.: Diesmal ist mein Skript ganz leer. Es nur das obige Skript drinnen. Ich will dieses Skript ausführen und dann auf der Seite mit den empfangenen $_POST-Werten auftauchen.
nxclass
nxclass 26.11.2010 um 22:09:09 Uhr
Goto Top
ok so ... ein
echo sendHttpPostRequest( 'http://testchat.localhost/Netzwerk/registrierensql.php', null, $_POST);  
sollte Dir nun die Ausgabe von http://testchat.localhost/Netzwerk/registrierensql.php anzeigen.

EDIT: obwohl die /* */ innerhalb des Codes schon eigenartig aussehen - am besten jetzt löschen
EinTyp
EinTyp 26.11.2010 um 22:31:57 Uhr
Goto Top
Vielen Dank!
Es ist genauso wie ich wollte^^

-einTyp-