2

私のワードプレスのテーマの連絡先フォームを構築しています。バックエンドから受信者アドレスを入力する機能が必要です。現時点では、非表示の入力フィールドで変数を渡しています。

<input type="text" class="hidden" name="receiver" value="<?php get_option('admin_email') ?>"/>

安全ではないため、これを行うべきではないことを読みました。しかし、どうすればそれを行うことができますか?

編集: これが私の process.php です。管理者のメールを取得しようとしましたが、どういうわけか壊れています。

<?php if( isset($_POST) ){

    //form validation vars
    $formok = true;
    $errors = array();

    //sumbission data
    $ipaddress = $_SERVER['REMOTE_ADDR'];
    $date = date('d.m.Y');
    $time = date('H:i');

    //form data
    $name = $_POST['name']; 
    $email = $_POST['email'];
    $website = $_POST['website'];
    $budget = $_POST['budget'];
    $message = $_POST['message'];

    $receiver = $_POST['receiver'];
    $sender = get_option('admin_email');

    if(empty($name)){
        $formok = false;
        $errors[] = "Sie haben keinen Namen angegeben.";
    }

    if(empty($email)){
        $formok = false;
        $errors[] = "Sie haben keine Emailadresse angegeben.";
    //validate email address
    }elseif(!filter_var($email, FILTER_VALIDATE_EMAIL)){
        $formok = false;
        $errors[] = "Sie haben keine gültige Emailadresse angegeben.";
    }

    if(empty($message)){
        $formok = false;
        $errors[] = "Das Nachrichtenfeld ist leer.";
    }
    elseif(strlen($message) < 20){
        $formok = false;
        $errors[] = "Ihre Nachricht muss mindestens 20 Zeichen enthalten.";
    }

    if($formok){
        $headers = "From: {$email}" . "\r\n";
        $headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

        $emailbody = "<p><strong>Name: </strong> {$name} </p>
                      <p><strong>Website: </strong> {$website} </p>
                      <p><strong>Nachricht: </strong> {$message} </p>
                      <p>Diese Nachricht wurde am {$date} um {$time} über {$sender} gesendet.</p>";

        if($receiver){
            mail($receiver,"Anfrage ".$name,$emailbody,$headers);
        }
        else{
            mail('test@test.com',"Error",$emailbody,$headers);
        }
    }

    //what we need to return back to our form
    $returndata = array(
        'posted_form_data' => array(
            'name' => $name,
            'email' => $email,
            'website' => $website,
            'budget' => $budget,
            'message' => $message
        ),
        'form_ok' => $formok,
        'errors' => $errors
    );

    //if this is not an ajax request
    if(empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) !== 'xmlhttprequest'){
        //set session variables
        session_start();
        $_SESSION['cf_returndata'] = $returndata;

        //redirect back to form
        header('location: ' . $_SERVER['HTTP_REFERER']);
    }
}
4

3 に答える 3

3

あなたは受信者のアドレスを知っているので、それを渡すべきではありません。フォームが送信されると、バックエンドの PHP スクリプトを使用して、ユーザーにまったく公開せずにフォームを送信できます。

于 2013-05-06T14:33:04.167 に答える
2

セッションを使用します。ユーザーが送信すると、すべてのデータを解析する次の SQL クエリにデータが送信されます

于 2013-05-06T14:31:24.510 に答える
0

フォーム処理コードを Wordpress ページ テンプレート内に配置するget_option('admin_email')と、バックエンド フォーム コードで使用でき、パブリック Web ページに公開する必要がなくなります。

于 2013-05-06T14:33:09.817 に答える