[PHP] Variable mit Link übergeben und auslesen

  • ich versuche eine website zu machen, von der man mittels formular eine email abschicken kann. wenn ich die zieladresse fix in das mailformular hineinschreibe passt alles.
    nur die übergabe bei einem link tut nur teilweise was sie soll. aufgerufen wird das formular zum beispiel von http://www.call-4-you.at/impressum.html aus. in der formularseite, zb http://www.call-4-you.at/Skripts/mail.php?ziel=kreth steht dann die richtige emailadresse (eingebunden durch

    PHP
    <?php echo $strEmpfaenger;?>

    ). nur wird die email immer an das standardaccount geschickt (office@...), egal was in $strEmpfaenger steht. PHP code dazu:


    ich verstehe nicht was da nicht passt, da die adresse doch eigentlich richtig übergeben wird (sonst würde sie nicht im echo stehen). im notfall mache ich für jeden eine eigene mailfunktion, aber das ist wohl nicht sinn der sache. hoffe es kann mir jemand einen schubs in die richtige richtung geben, danke.

    Der Student geht solange zur Mensa, bis er bricht.

    http://xeraa.net

  • Rufst Du das Script über GET oder über POST auf?

    Wenn Du nämlich GET verwendest (was ich vermute, da du die Mailadresse nach der GET-Variable "ziel" bestimmst), wirst Du in der großen If-Klausel nicht if($_POST), sondern if($_GET) verwenden müssen, sonst wird sie wohl gar nicht abgearbeitet.

  • also die form schaut so aus:

    also schon mit post - generell funktioniert das mailen ja, nur irgendwie nimmt er immer das else (offie@...) als ziel und nie ein anderes.

    Der Student geht solange zur Mensa, bis er bricht.

    http://xeraa.net

  • Ja klar... weil wenn Du das Script über POST aufrufst, werden die if($_GET['ziel'])-Klauseln nie matchen, sondern immer nur das else...

    Dann mußt Du also diese Variablen von $_GET auf $_POST ändern.

  • Zitat von Jensi

    Ja klar... weil wenn Du das Script über POST aufrufst, werden die if($_GET['ziel'])-Klauseln nie matchen, sondern immer nur das else...

    Dann mußt Du also diese Variablen von $_GET auf $_POST ändern.


    oder aber Du gehst sicher und machst $_REQUEST ... ;)

    *** Make it idiot proof, and someone will build a better idiot. ***

  • also ich habe (nach einigem herumprobieren) hoffentlich endlich gecheckt, was das problem war.
    wenn ich die GETs durch POST ersetze geht es gar nicht mehr, bei REQUEST ist es so wie vorher.

    das eigentliche problem war:

    PHP
    action="<?php print $_SERVER['PHP_SELF'];?>">


    im nachhinein ohnedies klar: sobald das formular abgeschickt wird, wird die seite neu geladen damit der PHP teil drüberlaufen kann. das komische ist nur, dass dabei offensichtlich die variable im link nicht mitgenommen wird (PHP_SELF nimmt nur die URL, ohne ?variable=wert - vermute ich einmal) und deshalb immer der else zweig mit office@call-4-you.at als tatsächliche adresse genommen wird.

    hab jetzt als ziel eine extra PHP datei (Mailadresse wird hidden übergeben und nocheinmal abgefragt - will ja kein spam relay werden) und es scheint zu gehen.


    danke auf jeden fall für die denkanstöße, sonst wär ich schon verzweifelt

    Der Student geht solange zur Mensa, bis er bricht.

    http://xeraa.net

  • Zitat von Xeraa

    also ich habe (nach einigem herumprobieren) hoffentlich endlich gecheckt, was das problem war.
    wenn ich die GETs durch POST ersetze geht es gar nicht mehr, bei REQUEST ist es so wie vorher.

    das eigentliche problem war:

    PHP
    action="<?php print $_SERVER['PHP_SELF'];?>">


    im nachhinein ohnedies klar: sobald das formular abgeschickt wird, wird die seite neu geladen damit der PHP teil drüberlaufen kann. das komische ist nur, dass dabei offensichtlich die variable im link nicht mitgenommen wird (PHP_SELF nimmt nur die URL, ohne ?variable=wert - vermute ich einmal) und deshalb immer der else zweig mit office@call-4-you.at als tatsächliche adresse genommen wird.


    also normal mach ich das so: Du gibst dem submit-Button einen Namen, z.B.

    HTML
    <input type="submit" name="mailMe" value="Senden" class="button"/>

    Und dann gehst Du her und schreibst in PHP eine Abfrage:

    PHP
    if (isset($_POST['mailMe']) {
         /*
          * Formular wurde übergeben -> abarbeiten
          */
    }

    das muss gehen. Die Variablen im Link bzw. der Action ($_SERVER['PHP_SELF']), sind dann immer noch über _GET verfügbar. Man kann ja in einem Request Variablen über beide Methoden gleichzeitig abschicken, _GET und _POST.

    *** Make it idiot proof, and someone will build a better idiot. ***

  • ich glaub ich hab nicht gut erklärt, wie ich die variable übergebe oder wir reden aneinander vorbei.

    ich rufe die mailfunktion mit folgender url auf: http://www.call-4-you.at/Skripts/mail.php?ziel=kreth
    die variable ziel hat den wert kreth. wenn ich die seite aber mit

    PHP
    action="<?php print $_SERVER['PHP_SELF'];?>">

    aufrufe, wird alles ab dem fragezeichen abgeschnitten. hat offensichtlich das PHP_SELF so an sich.

    zur demonstration habe ich einen screenshot angehängt. dort kannst du sehen, dass die aufrufende url .../Skripts/mail.php?ziel=kreth ist. am ende vom dokument habe ich mit

    PHP
    <br/><b><?php echo $_SERVER['PHP_SELF'];?></b><br/>

    das PHP_SELF aufgerufen, und das zeigt nur auf .../Skripts/mail.php.
    und wenn ich über PHP_SELF die seite neu aufrufe ist die ziel variable weg, also geht es immer auf die "default" mailadresse.


    PS: das ursprüngliche mailformular ist von selfhtml aus dem PHP teil kopiert - deshalb auch die eigenartige art es auszuwerten.

    Der Student geht solange zur Mensa, bis er bricht.

    http://xeraa.net

  • danke paulchen, aber ich habe die mailfunktion einfach in eine extra datei ausgelagert, der übergebe ich "ganz normal" den mail-inhalt und zieladresse.
    so sollte es auf jeden fall funktionieren - hoffe ich ;).

    Der Student geht solange zur Mensa, bis er bricht.

    http://xeraa.net

  • Zitat von Xeraa

    ich glaub ich hab nicht gut erklärt, wie ich die variable übergebe oder wir reden aneinander vorbei.


    ok ... stimmt. Das PHP_SELF hab ich "überlesen". Ich verwende immer $_SERVER['REQUEST_URI'].

    *** Make it idiot proof, and someone will build a better idiot. ***

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!