Umleitung auf eine Seite nach Formular versenden.

Diskutiere mit über: Umleitung auf eine Seite nach Formular versenden. im Web-Programmierung Forum

  1. mactrisha

    mactrisha Thread Starter MacUser Mitglied

    Beiträge:
    674
    Medien:
    2
    Zustimmungen:
    4
    Registriert seit:
    27.11.2003
    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.
     
  2. msslovi0

    msslovi0 MacUser Mitglied

    Beiträge:
    2.713
    Zustimmungen:
    115
    Registriert seit:
    20.03.2005
    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
     
  3. mactrisha

    mactrisha Thread Starter MacUser Mitglied

    Beiträge:
    674
    Medien:
    2
    Zustimmungen:
    4
    Registriert seit:
    27.11.2003
    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.
     
  4. mactrisha

    mactrisha Thread Starter MacUser Mitglied

    Beiträge:
    674
    Medien:
    2
    Zustimmungen:
    4
    Registriert seit:
    27.11.2003
  5. msslovi0

    msslovi0 MacUser Mitglied

    Beiträge:
    2.713
    Zustimmungen:
    115
    Registriert seit:
    20.03.2005
    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
     
  6. mactrisha

    mactrisha Thread Starter MacUser Mitglied

    Beiträge:
    674
    Medien:
    2
    Zustimmungen:
    4
    Registriert seit:
    27.11.2003
    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.
     
  7. JohnP

    JohnP MacUser Mitglied

    Beiträge:
    471
    Zustimmungen:
    6
    Registriert seit:
    12.10.2004
    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");
    }
    ?>
     
  8. Rupp

    Rupp MacUser Mitglied

    Beiträge:
    7.543
    Zustimmungen:
    603
    Registriert seit:
    10.10.2004
    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...
     
    Zuletzt bearbeitet: 10.06.2005
Die Seite wird geladen...
Ähnliche Themen - Umleitung auf eine Forum Datum
Suche einfachste "Laien"-Möglichkeit Daten aus XML-Datei auf Webseite darzustellen. Web-Programmierung 27.11.2015
PHP Update auf 5.6 im Terminal für Localhost (MAMP und Laravel) Web-Programmierung 12.09.2014
PHP: Nächster Tag auf Deutsch ausgeben Web-Programmierung 23.01.2014
mod_rewrite und Form-Umleitung Web-Programmierung 30.03.2013
Umleitung, wenn Aufruf vom iPhone kommt Web-Programmierung 28.05.2008

Diese Seite empfehlen

Benutzerdefinierte Suche