Antworten auf deine Fragen:
Neues Thema erstellen

php-Kontaktformular funktioniert nicht auf neuem Webspace

logi84

Noch nicht viel geschrieben

Hallo,

es wäre super, wenn Ihr mir helfen könntet.

Nachdem ich meinen Webhoster ghewechselt habe, funktioniert mein php-Kontaktformular nicht mehr.
Das Script wird einfach nicht fertig ausgeführt. In der Adressleiste steht eine Session-ID, doch wird die Email nicht versendet. Es kommt auch keine Fehlermeldung - die Seite wird einfach neu geladen.

Auf beiden Servern läuft PHP 5.2, alle Pfadangaben sind relativ...

Leider kann ich euch den Link gerade nicht zeigen. Habt Ihr denneoch eine Idee woran das ganz Allgemein liegen könnte?

Ich danke euch

lg
 

logi84

Noch nicht viel geschrieben

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Hilfe! Was ist denn das?!?!

Was bedeutet das, wenn sie off wären?
Muss ich die dann anschalten?

Danke für deine Hilfe!
 

JonJonson

Aktives Mitglied

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Poste bitte deinen PHP-Code des Kontaktformulars hier mal. Ansonsten müsste man schon Hellsehen können ...
 

logi84

Noch nicht viel geschrieben

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Ihr habt recht - bin mittlerweile zu Hause und hier ist der PHP Code.
Den habe ich aus einem anderen Forum erhalten und mit Hilfe eines Kumpels ein wenig an meine Bedürfnisse angepasst.

unter funktioniert alles - auf einer enuen Str*t* Domain (gleiche PHp Version), funktioniert das leider nicht.


index.php
PHP:
<?php
require_once 'secureForm.php';

$form_sent = false; 

// Eine neue Instanz der Klasse wird erzeugt 
$form = new SecureForm(); 

// Fr jedes Formfeld wird eine zufllige (CSS-)ID erzeugt und in den Variablen gespeichert 
$id_name = $form->getID('name'); 
$id_email = $form->getID('email');
$id_phone = $form->getID('phone');  
$id_nachricht = $form->getID('nachricht'); 

// Der Submit-Button muss nicht zwangsweise "anonymisiert" werden 
$id_submit = $form->getID('submit'); 


// Die CSS-Datei wurde vom Browser angefordert und wird abgeschickt 
if (isset ($_GET['getCSS'])) { 
    header ("Content-Type: text/css"); 
    $form->generateCSS(); 
    exit; 
} 
?>






<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
<title>...</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="index,follow" />
<meta name="copyright" content=" ... " />
<meta name="keywords" content=" ... " />
<meta name="description" content=" ... " />


<style type="text/css" media="screen">
@import url(../css.css);



        body { 
            font-family: Arial, Helvetica, Geneva, sans-serif;
            color: #666;
            margin: 0;
            }
            
        fieldset {
            margin-top: 3em;
            margin-bottom: 20px;
            vertical-align: center;
            }
        
        fieldset legend {
            margin-bottom: 1.3em;
            font-size: 1em;
            font-weight: bold;
            }
            
        label {
            font-size: 16px;
            
            }
        
        input {
            border: #666 solid 1px;
            width: 14em;
            font-size: 1em;
            padding: 5px;
            margin: 0;
            margin-top: 5px;
            }
            
        textarea {
            border: #666 solid 1px;
            width: 45em;
            height: 20em;
            font-size: 1em;
            padding: 5px;
            margin: 0;
            margin-top: 5px;
            }
        
        /* Dieser Abschnitt ist fuer das Skript wichtig */
        .form input, .form textarea { 
            position: static !important; 
            display: block !important; 
            speak: normal !important; 
        }





















</style>
</head>


<body>

                    
                    
<?php


// Es wird nun geprft, ob der Submit-Knopf gedrckt und das Formular abgesendet wird. 
// Die Formularfelder sind mit den verschiedenen IDs als Namen gespeichert. 
if (!empty ($_POST[$id_submit])) { 
    $form_sent = true; 
     
    // Zuerst berprfen wir, ob alle gewnschten Felder ausgefllt sind 
    if (!empty ($_POST[$id_name]) && !empty ($_POST[$id_email]) && !empty ($_POST[$id_phone]) && !empty ($_POST[$id_nachricht])) { 
         
        // Danach wird geprft, ob das versteckte Feld ausgefllt wurde. 
        // Sollte das der Fall sein haben wir es hchstwahrscheinlich mit einem Spambot zu tun 
        // Hier knnten auch weitere Aktionen unternommen werden, z.B. loggen und/oder sperren der IP des Bots, o.. 
        if (!empty ($_POST[$form->getSecretID()])) { 
            session_destroy (); 
            echo 'Spambot erkannt.'; 
            exit; 
        } 
         
        // Nun knnen wir die E-Mail versenden 
        $name = $_POST[$id_name]; 
        $email = $_POST[$id_email];
        $phone = $_POST[$id_phone]; 
        $nachricht = $_POST[$id_nachricht]; 

        // E-Mail verschicken...  
        mail ('abc@def.de', 'Nachricht per Kontaktformular von ' . $name, $name . ' (Email:' . $email  . ' Telefon: ' . $phone . ") hat um " . date('d.m.Y H:i:s', time()) . " eine Nachricht geschrieben:\n" . $nachricht, 'From: abcdefg@hij.de' );
         
        session_destroy ();
        
        echo '
        
        <h2><br /><br />Vielen Dank für Ihre Nachricht.<br /> Wir werden uns schnellstmöglich um Ihr Anliegen kümmern.</h2> 
            
                
                
                ';
        
         
        //exit; 
    } 
     
    // Falls nicht alle Felder ausgefllt sind sollte die Session-ID sowie die geheimen IDs erneuert werden, 
    // um mgliche Brut-Force-Angriffe von Bots aus dem Weg zu gehen. 
    // WICHTIG: Vor dem erneuern drfen die Header noch nicht gesendet werden! 
    $form->regenerateIDs(); 
} 
else
{
/* Nun wird das Formular erzeugt: 
Eventuell wird es auch in Templates eingebunden o.. 
Vorher sollten normalerweise der HTML-Kopf, etc. kommen 
Wichtig ist, dass die Session-ID bergeben wird! 
Alternativ kann diese auch mit einem versteckten Feld und POST bergeben werden, 
PHP erkennt diese automatisch. 
Auerdem drfen die beiden Stylesheets nicht fehlen! 

Das erste Stylesheet ist die Vorgabe fr die normalen Felder. 
Da diese Angabe *vor* den anderen kommt, gilt diese. 
Bei den versteckten Feldern wird zustzlich ein !important hingehngt, damit werden die Felder unsicht- und -hrbar.*/ 

echo '
    <link rel="stylesheet" type="text/css" href="index.php?getCSS&amp;' . SID . '" media="all" /> 
<fieldset>
    <legend>Kontaktformular:</legend>

    <!-- Auch hier ist die Session-ID wichtig, um die IDs spaeter wieder den Feldern zuzuordnen -->
    <form action="index.php?' . SID . '" method="POST" class="form">'; 

// Nun werden die einzelnen Eingabefelder ausgegeben. 
// Dabei wird gleich berprft, ob das Formular bereits abgesendet wurde und ob Felder fehlen. 
echo '
    <label>Ihr Name' . ((($form_sent && empty ($_POST[$id_name]))) ? ' (fehlt)' : '') . ':</label> <input type="text" id="' . $id_name . '" name="' . $id_name . '" value ="' . ((!empty ($_POST[$id_name])) ? htmlspecialchars ($_POST[$id_name]) : '') . '" /><br /> 
    <label>Ihre E-Mail-Adresse' . ((($form_sent && empty ($_POST[$id_mail]))) ? ' (fehlt)' : '') . ':</label> <input type="text" id="' . $id_email . '" name="'  .$id_email . '" value="' . ((!empty ($_POST[$id_email])) ? htmlspecialchars ($_POST[$id_email]) : '') . '" /><br /> 
        <label>Ihre Telefonnummer' . ((($form_sent && empty ($_POST[$id_phone]))) ? ' (fehlt)' : '') . ':</label> <input type="text" id="' . $id_phone . '" name="'  .$id_phone . '" value="' . ((!empty ($_POST[$id_phone])) ? htmlspecialchars ($_POST[$id_phone]) : '') . '" /><br /> 
    <label>Ihre Nachricht' . ((($form_sent && empty ($_POST[$id_nachricht]))) ? ' (fehlt)' : '') . ':</label><br /> 
    <textarea name="' . $id_nachricht . '" id="' . $id_nachricht . '">' . ((!empty ($_POST[$id_nachricht])) ? htmlspecialchars ($_POST[$id_nachricht]) : '') . '</textarea><br />
    <input type="text" name="' . $form->getSecretID() . '" id="' . $form->getSecretID() . '" value="" />' . // Auch das versteckte Feld bekommt seinen Platz 
    '
    <input type="submit" name="' . $id_submit . '" id="' . $id_submit . '" value="Formular absenden" />
    
    </form>

</fieldset>';
}

// Fertig. :) 
// Man knnte das versteckte Feld noch an zuflligen Positionen erscheinen lassen, um es den Spambots nicht zu leicht zu machen. 
?>                    
    
                    
            
</div><!--kontakt-->                    
                    
                    
        

</body>

</html>
secureform.php
PHP:
<?php

/**
 * No more SPAM: Secure your form...
 * 
 * INSTALL:
 * You *must* include a css-definition for the form fields like this:
 * input, textarea { position: static !important; display: block !important; speak: normal !important; }
 * 
 * This is very important, otherwise the user wont see ANY fields!
 * You also have to include the class-generated css-definitions in your document.
 *
 * @author Steffen Manzer, noecho.de <noecho.smanzer@gmail.com>
 * @license    GNU Lesser General Public License <http://opensource.org/licenses/lgpl-license.php>
 * @see http://xhtmlforum.de/51007-bitte-austesten-formular-spamschutz.html
 *
 */
class SecureForm



{
    
    private
        $secret        = null,
        $keys        = array (),
        $confusing    = array ();
    
    
    
    public function __construct () {
        // make sure that the session id will not be saved in cookies
        @ini_set('session.use_cookies', 0);
        @ini_set('session.use_only_cookies', 0);
    
    session_start();    
        
        if (!empty ($_SESSION['secret'])) {
            $this->secret = $_SESSION['secret'];
        } else {
            $this->secret = $this->generateID();
        }
        
        if (!empty ($_SESSION['keys'])) {
            $this->keys = $_SESSION['keys'];
        }
        
        if (!empty ($_SESSION['confusing'])) {
            $this->confusing = $_SESSION['confusing'];
        }
        
        // dont cache this or you'll be shot!
        if (!headers_sent ()) {
            header('Cache-Control: no-cache, must-revalidate');
            header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
        }
    }
    
    /**
     * Save keys in Session
     *
     */
    public function __destruct ()
    {
        $_SESSION['secret'] = $this->secret;
        $_SESSION['keys'] = $this->keys;
        $_SESSION['confusing'] = $this->confusing;
    }
    
    /**
     * Generate a random ID
     *
     * @return string
     */
    protected function generateID ()
    {
        return substr (chr (rand (97, 122)) . sha1 (uniqid ()), 0, rand (5, 8));
    }

    /**
     * Add new field
     *
     * @param $label label for the field
     * @return string $key
     */
    public function getID ($label)
    {
        if (empty ($this->keys[$label])) {
            $this->keys[$label] = $this->generateID();
        }
        return $this->keys[$label];
    }
    
    /**
     * return the secret key
     *
     * @return unknown
     */
    public function getSecretID ()
    {
        return $this->secret;
    }
    
    /**
     * Generate new Session-ID and new keys
     * WARNING: This function must be called before any output.
     * The headers may not be sent yet!
     *
     * @return bool
     */
    public function regenerateIDs ()
    {
        if (headers_sent ()) return false;
        @session_regenerate_id (true);
        $this->secret = $this->generateID();
        foreach ($this->keys as $key => $value) {
            $this->keys[$key] = $this->generateID();
        }
        $this->confusing = array ();
        return true;
    }
    
    /**
     * Generate the css necessary for the forms
     *
     * @param $return return the generated css or output it directly
     * @return mixed string|null
     */
    public function generateCSS ($return = false)
    {
        $content = '@media all{';
        
        $ids = array_values ($this->keys);
        if (empty ($this->confusing)) {
            for ($i = 0; $i < (rand(8, 15)); $i++) {
                $id = $this->generateID();
                $ids[] = $id;
                $this->confusing[] = $id;
            }
        } else {
            $ids = $ids + $this->confusing;
        }

        sort ($ids);    
        $num = count($ids);
        $pos = array_rand ($ids);
        
        $displayed = false;
        for ($i = 0; $i < $num; $i++) {
            
            // hidden field
            if (($pos == $i) && (!$displayed)) {
                $content .= '#' . $this->secret . ' {';
                $content .= "position:absolute !important;left:-99999px;speak:none !important;display:none !important;}";
                $displayed = true;
                $i--;
            
            // any other form field
            } elseif (in_array ($ids[$i], $this->keys)) {
                $content .= '#' . $ids[$i] . " {";
                $content .= "position:absolute;left:-99999px;speak:none;display:none;}";
        
            // random, confusing field
            } else {
                $r = (rand (0, 1) == 1);
                $content .= '#' . $ids[$i] . " {";
                $content .= "position:absolute" . ($r ? ' !important' : '') . ";left:-99999px;speak: none" . ($r ? ' !important' : '') . ";display: none" . ($r ? ' !important' : '') . ';}';
            }
        }
        $content .= '}';
        if ($return) {
            return $content;
        } else {
            echo $content;
        }
    }
}
Vielen lieben Dank für eure Mühe!
 
Zuletzt bearbeitet:

JonJonson

Aktives Mitglied

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Beim überfliegen des Codes hab ich jetzt keinen Fehler entdeckt.

Was du versuchen kannst:
Check mal deine Spammails. Eventuell gelangt das Mail schon auf dem Server in einen Spamordner (Hab ich mich auch mal zu Tode gesucht)

mach dir eine test.php mit folgendem Inhalt:
PHP:
<? php
mail('zoomed@gmx.de', 'Irgendein Betreff', 'Irgendein Mailtext');
schau mal ob du so ein Mail bekommst.
 

logi84

Noch nicht viel geschrieben

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Beim überfliegen des Codes hab ich jetzt keinen Fehler entdeckt.

Was du versuchen kannst:
Check mal deine Spammails. Eventuell gelangt das Mail schon auf dem Server in einen Spamordner (Hab ich mich auch mal zu Tode gesucht)

Ich glaube daran kann es nicht liegen. Die Nachricht wird ja nicht losgeschickt bzw. startet nicht die Seite mit der Sendebestätigung.

mach dir eine test.php mit folgendem Inhalt:
PHP:
<? php
mail('abc@def.de', 'Irgendein Betreff', 'Irgendein Mailtext');
schau mal ob du so ein Mail bekommst.
Das teste ich gleich mal...
 
Zuletzt bearbeitet:

logi84

Noch nicht viel geschrieben

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

mach dir eine test.php mit folgendem Inhalt:
PHP:
<? php
mail('abc@def.de', 'Irgendein Betreff', 'Irgendein Mailtext');
schau mal ob du so ein Mail bekommst.

Beim Altern Server funktioniert das wunderbar.
beim neuen erhalte ich:

Parse error: syntax error, unexpected T_STRING in /mnt/web2/63/58/52461958/htdocs/test/template4kontakt/kontakt/test.php on line 2

Sagt dir das etwas?
 
Zuletzt bearbeitet:

JonJonson

Aktives Mitglied

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Ups;)
mach mal aus dem <? php ein <?php
also das leerzeichen muss weg
 

logi84

Noch nicht viel geschrieben

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Also, ich verstehe das nicht...

Da ist doch kein Fehler drin:


PHP:
<?php
mail('abc@def.de', 'Irgendein Betreff', 'Irgendein Mailtext'); 
?>
Was will der von mir?


Parse error: syntax error, unexpected T_STRING in /mnt/web2/63/58/52461958/htdocs/test/template4kontakt/kontakt/test.php on line 2
 
Zuletzt bearbeitet:

Robbyn-

PHP / Flex Programmierer

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Speichere die Werte doch mal in Variablen ab und ersetze deinen Text durch diese Variablen. Der Fehler besagt ja eigentluch nur das du was vergessen hast manchmal ist es solch ein dummer Fehler wie ein ' zuviel/wenig aber ich sehe dort jetzt auch nichts.

MfG.Robbyn
 

logi84

Noch nicht viel geschrieben

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Oder ist da bei meinem Webhoster Str*t* was falsch eingestellt?
 

Robbyn-

PHP / Flex Programmierer

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Also ich habe da mehr als 5 Server laufen und alle von einen anderen Paket und dort funktioniert es perfekt.

MfG.Robbyn
 

logi84

Noch nicht viel geschrieben

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

ok, aber da mein Sript exakt gleich ist, ist der provider der einzige unterschied....
 

logi84

Noch nicht viel geschrieben

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Folgende Info habe ich eben vom wirklich angenehmen Service-Chat meines Providers erhalten:

Deren Mailserver sind von den PHP-Servern getrennt.
Deshalb wird meine mail-Funktion unterdrückt und für die Anbindung an den Mailserver soll ich deren CGI Mail-Manager verwenden.
Dort könnte ich aber auch eigene Formulare verwenden.


Wie ist eure Meinung dazu? Hat das einen Nachteil für mich? Ist das ein grund gleich wieder adé zu sagen und den Provider wieder zu wechseln?
 

saila

Moderatorle

AW: php-Kontaktformular funktioniert nicht auf neuem Webspace

Hi,

wie wäre es mit dem 4. Paramter für mail()?!
PHP:
 <?php
if(mail('deine@adresse.de', 'Irgendein Betreff', 'Irgendein Mailtext', 'From: Du eben<deine@adresse.de>')) {
 echo 'versendet';
} else {
 die();
}
?>
Ich würde den Provider fragen, warum den diese Lösung und welche Lösungsvorschläge z.B. für php-Newsletter angedacht sind?
Abgesehen davon will garantiert nicht jeder einen Newsletter über Perl/Cgi schreiben....

Du kannst den Provider auch noch fragen, ob Pear für dich vorhanden ist. Dann kannst du über den Pear-Klasse Mail deine Mails auch versenden.
 
Bilder bitte hier hochladen und danach über das Bild-Icon (Direktlink vorher kopieren) platzieren.
Antworten auf deine Fragen:
Neues Thema erstellen

Willkommen auf PSD-Tutorials.de

In unseren Foren vernetzt du dich mit anderen Personen, um dich rund um die Themen Fotografie, Grafik, Gestaltung, Bildbearbeitung und 3D auszutauschen. Außerdem schalten wir für dich regelmäßig kostenlose Inhalte frei. Liebe Grüße senden dir die PSD-Gründer Stefan und Matthias Petri aus Waren an der Müritz. Hier erfährst du mehr über uns.

Stefan und Matthias Petri von PSD-Tutorials.de

Nächster neuer Gratisinhalt

03
Stunden
:
:
25
Minuten
:
:
19
Sekunden

Neueste Themen & Antworten

Flatrate für Tutorials, Assets, Vorlagen

Zurzeit aktive Besucher

Keine Mitglieder online.

Statistik des Forums

Themen
118.635
Beiträge
1.538.449
Mitglieder
67.556
Neuestes Mitglied
Ggirl
Oben