1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[PHP] Variable mit Link übergeben und auslesen

    • Frage
  • xeraa
  • 13. Februar 2006 um 19:50
  • Unerledigt
  • xeraa
    5
    xeraa
    Mitglied
    Punkte
    205
    Beiträge
    36
    • 13. Februar 2006 um 19:50
    • #1

    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:

    PHP
    <?php
    if($_GET['ziel']=="kreth"){
    	$strEmpfaenger='joerg.kreth@call-4-you.at';
    }elseif($_GET['ziel']=="auzinger"){
    	$strEmpfaenger='verena.auzinger@call-4-you.at';
    }elseif($_GET['ziel']=="lex"){
    	$strEmpfaenger='thomas.lex@call-4-you.at';
    }elseif($_GET['ziel']=="willinger"){
    	$strEmpfaenger='walpurga.willinger@call-4-you.at';
    }elseif($_GET['ziel']=="webmaster"){
    	$strEmpfaenger='webmaster@call-4-you.at';
    }else{
    	$strEmpfaenger='office@call-4-you.at';
    }
    
    
    $strFrom='"Formmailer www.call-4-you.at" <office@call-4-you.at>';
    $strSubject='Feedback';
    $strReturnhtml='../danke.html';
    $strDelimiter=":\t";
    
    
    if($_POST){
    	$strMailtext="";
    	while(list($strName,$value)=each($_POST)){
    		if(is_array($value)){
    			foreach($value as $value_array){
    				$strMailtext.=$strName.$strDelimiter.$value_array."\n";
    			}
    		}else{
    			$strMailtext.=$strName.$strDelimiter.$value."\n";
    		}
    	}
    	if(get_magic_quotes_gpc()){
    		$strMailtext=stripslashes($strMailtext);
    	}
    	mail($strEmpfaenger, $strSubject, $strMailtext, "From: ".$strFrom) or die("Die Email konnte nicht versendet werden.");
    	header("Location: $strReturnhtml");
    	exit;
    }
    ?>
    Alles anzeigen


    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

  • Jensi
    28
    Jensi
    Mitglied
    Reaktionen
    141
    Punkte
    8.486
    Beiträge
    1.649
    • 13. Februar 2006 um 20:11
    • #2

    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.

  • xeraa
    5
    xeraa
    Mitglied
    Punkte
    205
    Beiträge
    36
    • 13. Februar 2006 um 21:13
    • #3

    also die form schaut so aus:

    PHP
    <h1>Email an <?php echo $strEmpfaenger;?></h1>
    			<form method="post" action="<?php print $_SERVER['PHP_SELF'];?>">
    				<dl>
    					<dt>Ihr Name:</dt>
    					<dd><input type="text" name="Versender" maxlength="50" size="32"value="" title="Name bitte hier eingeben."/></dd>
    					<dt>Ihre Emailadresse:</dt>
    					<dd><input type="text" name="Mail" maxlength="50" size="32"value="" title="Mailadresse bitte hier eingeben."/></dd>
    					<dt>Ihre Nachricht:</dt>
    					<dd><textarea name="Nachrichtenfeld" rows="12" cols="70"></textarea></dd>
    				</dl>
    				<input type="submit" value="Senden" class="button"/>
    				<input type="reset" value="Zur&uuml;cksetzen" class="button"/>
    			</form>
    Alles anzeigen

    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

  • Jensi
    28
    Jensi
    Mitglied
    Reaktionen
    141
    Punkte
    8.486
    Beiträge
    1.649
    • 13. Februar 2006 um 21:31
    • #4

    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.

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 14. Februar 2006 um 00:09
    • #5
    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 ... :winking_face:

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

  • xeraa
    5
    xeraa
    Mitglied
    Punkte
    205
    Beiträge
    36
    • 15. Februar 2006 um 00:35
    • #6

    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

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 15. Februar 2006 um 08:23
    • #7
    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. ***

  • xeraa
    5
    xeraa
    Mitglied
    Punkte
    205
    Beiträge
    36
    • 15. Februar 2006 um 15:59
    • #8

    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

  • Paulchen
    1
    Paulchen
    Gast
    • 15. Februar 2006 um 16:28
    • #9

    vielleicht brauchst du $_SERVER['QUERY_STRING'] --> http://www.php.net/manual/en/rese…ariables.server

  • xeraa
    5
    xeraa
    Mitglied
    Punkte
    205
    Beiträge
    36
    • 15. Februar 2006 um 16:37
    • #10

    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

  • maciek
    16
    maciek
    Mitglied
    Punkte
    2.805
    Beiträge
    434
    • 15. Februar 2006 um 23:14
    • #11
    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. ***

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung