Benutzerdefinierte Suche

Umleitung auf eine Seite nach Formular versenden.

  1. mactrisha

    mactrisha Thread StarterMacUser Mitglied

    Mitglied seit:
    27.11.2003
    Beiträge:
    683
    Medien:
    3
    Zustimmungen:
    4
    Hi all,

    ich habe ein kleines php-Script geschrieben, das Daten aus einem hmtl-Formular per E-Mail verschicken soll. Das klappt auch. Nur: Ich will die Erfolgsausgabe nicht mit print ("<b><center>Irgendein Mitteilungstext</center></b>\n"); machen, sondern auf eine entsprechende Seite umleiten. Ich dachte mir, das geht mit header ("location: index.php");. Aber irgendwas mit meiner if-Bedingung scheint auch nicht zu stimmen, denn das Mail sendet auch ein leeres Formular und leitet aber nach dem Senden nie auf danke.php, sondern nur immer auf index.php um. Ich will nur vor dem Senden prüfen, ob das Feld "nachricht" einen Eintrag besitzt und ob der Sende-Button geklickt wurde. Wenn ja soll gemailt werden und auf die Seite danke.php umgeleitet werden. Wenn nicht, dann soll nicht gemailt werden und auf die selbe Formularseite (index.php) zurückgeleitet werden.

    PHP:
    /*Beim Sende-Button im Formular steht ein Hidden-Feld <input type="hidden" name="wurdegesendet" value="true">.*/
    if ($nachrichteingetragen) {
    /*Beim Nachrichten-Feld im Form steht ein Hidden-Feld <input type="hidden" name="nachrichteingetragen" value="true">.*/
        
    if ($wurdegesendet) {

    /*Senden per Mail und bei Erfolg umleiten zur danke.php bei Nichterfolg zurück auf index.php.*/
            
    if (mail("$derempfaenger","$derbetreff","$einpaarfelderplusdienachricht\n","FROM: $derabsender\n")) {
            
    header ("Location: danke.php");
            } else {
            
    header ("Location: index.php");
            }

    /*Wenn keine Nachricht eingegeben wurde, dann soll auch nicht gemailt werden, sondern nur auf index.php umgeleitet werden.*/
        
    } else {
        
    header ("Location: index.php");
        }
    }
    Ich weiß nicht, warum das Umleiten zur index.php funktioniert, wiegesagt, das mailen funktioniert, nur ich komme nicht auf die danke.php. Wo ist denn mein Hund begraben? Kann mir jemand bitte helfen? Hat´s was mit den Hidden-Feldern zu tun? Oder muss ich das gesamte Konzept ändern?

    Salü,
    mactrisha.
     
    mactrisha, 10.06.2005
  2. msslovi0

    msslovi0MacUser Mitglied

    Mitglied seit:
    20.03.2005
    Beiträge:
    2.714
    Zustimmungen:
    115
    Zunächst:
    • Du weißt, was ein Schachtel-if ist?
    • Aus Formularen übergebene Variablen werden schon seit einiger Zeit mit den Arrays $_POST und $_GET angesprochen, je nachdem, welche Übertragunsmethode das Formular nutzt. Außer man hat, aus welchen Gründen auch immer, register_globals auf 'on' stehen.
    • Der Location-Header erwartet eine komplette Adresse:

    Und um zu verhindern, das auf index.php umgeleitet wird, solltest du nach jedem header(); einen exit; notieren.

    Matt
     
    msslovi0, 10.06.2005
  3. mactrisha

    mactrisha Thread StarterMacUser Mitglied

    Mitglied seit:
    27.11.2003
    Beiträge:
    683
    Medien:
    3
    Zustimmungen:
    4
    Nein, leider. Ich bin Anfänger. Stimmt das so nicht?

    Hieße das http://www.domain.de/verzeichnis/danke.php? Das hatte ich nämlich gelesen und auch probiert, ging nicht. Oder ist der absolute Unix-Pfad zu einer Datei gemeint?

    Formular steht auf methode=post, das mit den Arrays ist mir noch zu kompliziert kriegt man es mit meinem Ansatz gar nicht hin?

    Danke,
    mactrisha.
     
    mactrisha, 10.06.2005
  4. mactrisha

    mactrisha Thread StarterMacUser Mitglied

    Mitglied seit:
    27.11.2003
    Beiträge:
    683
    Medien:
    3
    Zustimmungen:
    4
    mactrisha, 10.06.2005
  5. msslovi0

    msslovi0MacUser Mitglied

    Mitglied seit:
    20.03.2005
    Beiträge:
    2.714
    Zustimmungen:
    115
    Es stimmt schon, es macht den Code nur schwer les- und wartbar. Schachtel-if in meinem Post ist ein Link, dort erfährst du mehr dazu.

    Nein, nicht der Pfad zur Unix-Datei, sondern ein URI, wie du ihn geschrieben hast.
    Es wäre Zufall, wenn es funktioniert.

    Aber ein exit; nach jedem header(); sollte zumindest dein primäres Problem lösen.

    Matt
     
    msslovi0, 10.06.2005
  6. mactrisha

    mactrisha Thread StarterMacUser Mitglied

    Mitglied seit:
    27.11.2003
    Beiträge:
    683
    Medien:
    3
    Zustimmungen:
    4
    Hi msslovi0,

    das mit dem exit; habe ich auch schon bevor ich den Beitrag geschrieben habe gelesen, mit exit; hatte ich auch keine Umleitung. Ich schaue mir deinen Link nochmal genau an, da habe ich mehrere Hinweise gefunden und knie mich rein.

    Danke,
    mactrisha.
     
    mactrisha, 10.06.2005
  7. JohnP

    JohnPMacUser Mitglied

    Mitglied seit:
    12.10.2004
    Beiträge:
    471
    Zustimmungen:
    6
    Das passiert weil das Script nicht die Eingabefelder überprüft sondern die "hidden"- Felder.
    Ausserdem brauchst du nur ein "hidden"- Feld (<input type="hidden" name="gesendet" value="1"/>).

    Hier ein Beispiel wie es funktionieren könnte (mit verschachtelten if's ;-) ):
    Formular wird per POST versendet.


    <?php
    if($_POST['gesendet'] == 1)
    {
    if($_POST['nachricht'] != "")
    {
    $sent = mail(....);
    if($sent) header("Location: http://www.domain.de/verzeichnis/danke.php");
    else echo("Kann E- Mail nicht senden.");
    }
    else
    {
    header("Location: http://www.domain.de/verzeichnis/index.php");
    }
    }
    else
    {
    header("Location: http://www.domain.de/verzeichnis/index.php");
    }
    ?>
     
    JohnP, 10.06.2005
  8. Rupp

    RuppMacUser Mitglied

    Mitglied seit:
    10.10.2004
    Beiträge:
    7.557
    Zustimmungen:
    603
    mal ein beispiel wie sowas aussehen könnte... benutze ich übrigens auch serh erfolgreich!

    PHP:
    <?php

    # Empfaenger
    $strEmpfaenger 'IhrName@provider.xy';

    # Absender
    $strFrom       '"Formmailer" <IhrAndererName@provider.xy>';

    # Betreff
    $strSubject    'Feedback';

    # Dankseite
    # Wichtig: Sie muessen hier eine gueltige HTTP-Adresse angeben!
    $strReturnhtml 'http://www.provider.xy/IhrName/IhreSeite.htm';

    # Welche(s) Zeichen soll(en) zwischen dem Feldnamen und dem angegebenen Wert stehen?
    $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 Mail konnte nicht versendet werden.");
     
    header("Location: $strReturnhtml");
     exit;
    }

    ?>
    das als konfig über den Doctype der .php datei

    PHP:
    <form action="<?php print $_SERVER['PHP_SELF']; ?>" method="post">
    </form>
    hier das in den <body></body> tag... da kommen dann die formularfelder rein...
     
    Rupp, 10.06.2005
Die Seite wird geladen...
Ähnliche Themen - Umleitung auf eine
  1. MacEnroe
    Antworten:
    6
    Aufrufe:
    662
    MacEnroe
    19.01.2017
  2. Saugkraft
    Antworten:
    6
    Aufrufe:
    382
    Saugkraft
    04.09.2016
  3. Bantam
    Antworten:
    3
    Aufrufe:
    1.397
    nonpareille8
    03.03.2016
  4. Jackson100
    Antworten:
    5
    Aufrufe:
    632
    falkgottschalk
    31.03.2013
  5. rpoussin
    Antworten:
    3
    Aufrufe:
    2.597
    rpoussin
    28.05.2008