Problem Kontaktformular

  • Der Geschwindigkeitsunterschied zwischen ".." und {} ist noch unsignifikanter als der zwischen ' und "
    Daher mache ich es so wie ich es am übersichtlichsten finde. Ich habe noch keine Seiten entwickelt die so umfangreich waren und so enorme Zugriffszahlen hätten, dass solche minimalsten Differenzen eine Rolle spielen würden.
    Prinzipiell bin ich immer dankbar für Anregungen meinen Code aus Performance-technischer Sicht zu optimieren. Eine gewisse Verhältnismäßigkeit zwischen Geschwindigkeitsgewinn und Umgewöhnung bei meinen Präferenzen sollte aber gegeben sein, und die sehe ich hier nicht.

    Ich wollte eigentlich auch nur darauf hinweisen, dass die Geschwindigkeitsunterschiede in deinem Artikel den du verlinkt hast so definitiv nichtmal mehr annähernd stimmen, zumindest für php-Versionen ab 5.2.6 (mit älteren habe ich nicht getestet).

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Also....aktueller Stand:


    php:

    Im Body:


    Funktioniert leider weiterhin nicht!


    Fehlermeldungen unter Angabe von:

    PHP
    print("Location: $strReturnhtml");
    header("Location: $strReturnhtml");
    Zitat

    Location:
    Warning: Cannot modify header information - headers already sent by (output started at /home/u0088629688/public_html/Kontakt.php:3) in /home/u0088629688/public_html/Kontakt.php on line 4

    ----Erscheint bei dem Kontaktformular.

    Zitat

    Location:
    Warning: Cannot modify header information - headers already sent by (output started at /home/u0088629688/public_html/Kontakt.php:3) in /home/u0088629688/public_html/Kontakt.php on line 4

    Warning: Cannot modify header information - headers already sent by (output started at /home/u0088629688/public_html/Kontakt.php:3) in /home/u0088629688/public_html/Kontakt.php on line 42

    ----Erscheint beim drücken des Button's "senden"


    Nun schaue ich mir die line 4 und 42 an:

    4:

    PHP
    header("Location: $strReturnhtml");

    Das ist der Teil aus dem:
    print("Location: $strReturnhtml");
    header("Location: $strReturnhtml");


    42:

    PHP
    header("Location:Danke-Kontakt.html");


    Fakten:
    1. Danke-Kontakt.html zu 100% vorhanden und auch aufrufbar - somit korrekt!

    2. Selbst mit direkter http-Adresse der Danke-Kontakt.html funktioniert es nicht!

    3. Bei Angabe einer Seite / Adresse unter

    Zitat

    $strReturnhtml

    , die gar nicht existiert, ändert sich auch nichts, was bedeuten muss, daß er ja gar nicht erst dazu kommt, das

    Zitat

    $strReturnhtml

    auszuführen, da er nicht einmal den Fehler ausgibt, daß die angegebene Seite nicht zu erreichen ist (da nicht existend)

    Irgendwas in dem Code muss ja falsch sein, daß er einfach an keine Seite weiterleitet..aber was und wo?
    Wie gesagt - die Email kommt an!

  • Er sagt dir ja genau was falsch ist: Warning: Cannot modify header information - headers already sent

    Vor dem header()-Befehl darf keine Ausgabe an den Browser kommen, auch kein Space oder eine Leerzeile.
    Ein Problem das ich früher schonmal hatte, war, dass ich die .php-Datei als utf-8 gespeichert hatte. utf-8 schickt aber beim Aufruf bevor überhaupt angefangen wird zu parsen schon ein ByteOrderMark an den Browser was eine Ausgabe erzeugt. In diesem Fall die Datei einfach als "utf-8 ohne BOM" speichern. (Die Option gibt es in den meisten vernünftigen Editoren, ich nutze z.B. Notepad++)

    Ansonsten deinen Code nochmal genau prüfen wo du vor dem header() schon eine Ausgabe hast, denn da ist definitiv eine.

    Diesbezüglich kann ich dir dann aber nicht weiterhelfen, da du nicht die komplette Datei in einem postest, genauso wie du sie auch abgespeichert hast.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Habs jetzt als "utf-8 ohne BOM" gespeichert..nützt leider nichts.

    Ok...das mit dem:

    Zitat

    Ansonsten deinen Code nochmal genau prüfen wo du vor dem header() schon eine Ausgabe hast, denn da ist definitiv eine.

    übersteigt jetzt einfach mein Wissen.
    Kannst du nicht anhand des angegebenen Codes erkennen, ob das so ist?
    Bitte nicht vergessen...ich bin Neu in dem Bereich um es fällt mir noch nicht sonderlich leicht, das alles zu verstehen^^

    Und zum Thema:

    Zitat


    Diesbezüglich kann ich dir dann aber nicht weiterhelfen, da du nicht die komplette Datei in einem postest, genauso wie du sie auch abgespeichert hast.

    Kann ich nur sagen, daß diese beiden Codes mein komplettes Kontaktformular darstellen. Natürlich sind da noch Bilder und Links mit auf der Seite, was aber ja nichts mit dem Formular an sich zu tun hat.

    Und zur Info: der von mir angegebene php-Teil sitzt ganz oben und der eigentliche <form> Teil sitzt halt im <body> Bereich - also alles innerhalb einer php-Datei.

    Macht das ein Problem?

  • Das Problem scheint zu sein, dass $strReturnhtml leer ist, das Headerzeugs ist erstmal egal. Tu mal folgendes oben ins Script:
    error_reporting(E_ALL);
    ini_set("display_errors",1);
    So sollte es dann aussehen

    Information will frei verfügbar sein.

    Don't eat unpeeled hedgehogs.

  • Eine header() Anweisung muss immer vor einer Ausgabe stehen, ansonsten bekommst du den Fehler den du erhalten hast. Also wenn vor dem header() irgendeine Ausgabe an den Browser geliefert wird, sei es auch nur ein <html> oder eine print()/echo() Anweisung, wirst du den Fehler erhalten.

    Darum wäre es in diesem Fall für uns praktisch wenn du einfach die ganze Datei posten würdest.

  • Da steht doch, wo schon etwas ausgegeben wird!

    output started at /home/u0088629688/public_html/Kontakt.php:3

  • http://www.php-fehlermeldungen.de/topic24.html
    Lies dir das erstmal durch um den Fehler zu verstehen.

    Wenn du die Ausgabe nicht findest poste doch am besten mal deine Komplette Datei, exakt so wie sie abgespeichert ist, von Zeile1 bis zu dem header()-Aufruf.
    vor dem ersten <?php darf auch kein Leerzeichen und keine Leerzeile kommen, das zählt auch schon als Ausgabe an den Browser.

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Tu mal folgendes oben ins Script:
    error_reporting(E_ALL);
    ini_set("display_errors",1);


    Ergebniss:

    Notice: Undefined index: Name in /home/u0088629688/public_html/Kontakt2.php on line 7

    Notice: Undefined index: Email in /home/u0088629688/public_html/Kontakt2.php on line 7


    Eine header() Anweisung muss immer vor einer Ausgabe stehen, ansonsten bekommst du den Fehler den du erhalten hast. Also wenn vor dem header() irgendeine Ausgabe an den Browser geliefert wird, sei es auch nur ein <html> oder eine print()/echo() Anweisung, wirst du den Fehler erhalten.


    http://www.php-fehlermeldungen.de/topic24.html
    Lies dir das erstmal durch um den Fehler zu verstehen.


    Das bedeutet doch, daß dann der header() über dem

    PHP
    if($_POST)

    stehen müsste, weil dort die erste Ausgabe ist? Aber wenn ich das tue, wird direkt an die Danke-Kontakt.html weitergeleitet, ohne daß ich auf die eigentliche Kontaktseite komme.

    Leerzeichen sind keine vorhanden!


    @SinnlosS--->danke für den Link!


    Kompletter Code der php-Seite



    So siehts aus.......

    Einmal editiert, zuletzt von vivistar (20. Mai 2009 um 16:52)

  • Notice: Undefined index: Name in /home/u0088629688/public_html/Kontakt2.php on line 7

    Notice: Undefined index: Email in /home/u0088629688/public_html/Kontakt2.php on line 7


    Das sind die Ausgaben die den Fehler beim header() auslösen, genau.
    Ändere diese Zeile:

    PHP
    $strFrom       = "$_POST[Name] <$_POST[Email]>";

    in:

    PHP
    $strFrom = isset($_POST['Name']) && isset($_POST['Email']) && !empty($_POST['Name']) && !empty($_POST['Email'])
        ?
        "{$_POST['Name']} <{$_POST['Email']}>"
        :
        "";

    Damit fragst du erstmal ab, ob die Variablen überhaupt gesetzt sind. Sollte dies nicht der Fall sein verwendest du sie gar nicht erst.
    Wenn du nämlich in deinem Script Variablen verwenden willst die nicht gesetzt sind schmeißt php eben ein Notice wie du sie da hast. Und das ist auch eine Ausgabe.

    Ich glaube das wurde dir aber auch schon auf der ersten Seite geschrieben, wenn mich grad nicht alles täuscht.

    Edit: Achso, es fehlten auch die ' ' um deine $_POST-Keys. ('Name' und 'Email')

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Nein, PHP Code erzeugt ja nur eine Ausgabe an den Browser wenn du das verlangst (print/echo/print_r usw.), alles andere spielt sich nur auf dem Server ab. Sonst würdest du ja den kompletten PHP Code einer Webseite sehen können.
    Ausgabe = wird im Browser angezeigt.

    Lies mal nach wie PHP grundsätzlich funktioniert, dann verstehst du alles andere auch besser.

  • Äh, meinst du mich, Phore? ^^

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook

  • Achso, hatte mich schon gewundert worauf sich das bezieht. :D

    "Programming today is a race between software engineers
    striving to build bigger and better idiot-proof programs,
    and the universe trying to build bigger and better idiots.
    So far, the universe is winning."
    Rick Cook


  • Ändere diese Zeile:

    PHP
    $strFrom       = "$_POST[Name] <$_POST[Email]>";

    in:

    PHP
    $strFrom = isset($_POST['Name']) && isset($_POST['Email']) && !empty($_POST['Name']) && !empty($_POST['Email'])    ?    "{$_POST['Name']} <{$_POST['Email']}>"    :    "";

    Leider spuckt er mir dabei nichts aus - es erscheint wieder nur eine weiße Seite.

    Edit: Achso, es fehlten auch die ' ' um deine $_POST-Keys. ('Name' und 'Email')

    Wenn ich das mache, sagt er:

    Zitat

    [B]Parse error

    Zitat

    : syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in /home/u0088629688/public_html/Kontakt2.php on line 6

    Mhhhh......?

    Gut...selbst wenn ich den

    PHP
    $strFrom       = "$_POST['Name'] <$_POST['Email']>";

    komplett weg lasse, macht es keinen Unterschied.


    Lies mal nach wie PHP grundsätzlich funktioniert, dann verstehst du alles andere auch besser.

    Bin ja nebenebei dabei.....aber mit diesem Problem komme ich echt nicht alleine weiter... :(


    Ich weiß auch nicht mehr, was ich noch tun soll...hab schon den Header an alle möglichen Stellen gesetzt^^..aber nix hilft^^

  • Ich weiß auch nicht mehr, was ich noch tun soll


    Das wurde dir aber doch sehr deutlich gesagt: lerne die Grundlagen!

    Ungetestet!!!

  • Leute...hab mal eben was getestet:


    Ich hab bei einem Provider 3 getrennte Webspace-Pakete laufen.
    Alle 2 Pakete haben getrennte ftp-Zugänge.

    Nun habe ich diese besagte Seite mit diesem Kontaktformular mal auf einer der anderen Pakete geladen - und siehe da......es geht - und zwar genau so, wie ich es am Anfang auch gepostet hatte.

    Gut, der Header sitzt zwar ganz unten und ob das nun so richtig ist oder nicht - es geht^^

    Dann werde ich mich wohl mal mit meinem provider auseinander setzen, warum nun genau in diesem einen Paket das Formular nicht richtig will^^


    Trotzdem nochmal die Frage:
    Muss der header unter allen Umständen weiter nach oben vor den Ausgaben oder kann der dann auch da unten stehen bleiben, wenn es so funktioniert? Ich meine..klar könnte er das - aber ist das mehr Glück als Verstand, daß es geht oder macht es nix und kann so bleiben?

  • @bandit-->

    Auch deine Variante funktioniert auf dem anderen Webspace-Paket - sogar etwas schneller! Danke dir!

    So und jetzt mal testen, ob deins bei dem ursprünglichen Paket jetzt geht^^

    So nen scheiß^^