2012-03-01 15 views
1

最後の数日間、私はインターネット上で見つかったPHPフォームを修正しようとしていました(そして、私は数多くの投稿を見てきました。そのフォーム)。 フォームが送信されると、私に電子メールが送信されます。これはすばらしいことです。しかし、私が変えようとしてきたことがあり、正しい/働く解決策を全く見つけることができなかったことがあります。PHPフォーム:検証、提出、コンテンツの表示

私は何を達成したいことは次のとおりです。フォームが送信されたとき

1)(私が行って、この1)

2)検証

3)表示エラーメッセージ内に考えるEメールを受信します同じページ

名前*

[....... .......これはテキストフィールド]

(あなたのお名前が必要です)

4)を提出することを許可しますすべての間違いが訂正されたとき、またはすべてのデータが最初に正しく入力されたときに、一度だけ作成します。

5)私のフッターが表示されていなかったデータを検証中にエラーメッセージ(前)を有します。これの理由は何でしょうか?フォームが提出されたときに表示されました。

この私は以下

<?php 
if(isset($_POST['email'])) { 

// EDIT THE 2 LINES BELOW AS REQUIRED 
$email_to = "[email protected]"; 
$email_subject = "Your email subject line"; 


function died($error) { 
    // your error code can go here 
    echo "We are very sorry, but there were error(s) found with the form you submitted. "; 
    echo "These errors appear below.<br /><br />"; 
    echo $error."<br /><br />"; 
    echo "Please go back and fix these errors.<br /><br />"; 
    die(); 
} 

// validation expected data exists 
if(!isset($_POST['first_name']) || 
    !isset($_POST['last_name']) || 
    !isset($_POST['email']) || 
    !isset($_POST['telephone']) || 
    !isset($_POST['comments'])) { 
    died('We are sorry, but there appears to be a problem with the form you submitted.');  
} 

$first_name = $_POST['first_name']; // required 
$last_name = $_POST['last_name']; // required 
$email_from = $_POST['email']; // required 
$telephone = $_POST['telephone']; // not required 
$comments = $_POST['comments']; // required 

$error_message = ""; 
$email_exp = '/^[A-Za-z0-9._%-][email protected][A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/'; 
if(!preg_match($email_exp,$email_from)) { 
$error_message .= 'The Email Address you entered does not appear to be valid.<br />'; 
} 
$string_exp = "/^[A-Za-z .'-]+$/"; 
if(!preg_match($string_exp,$first_name)) { 
$error_message .= 'The First Name you entered does not appear to be valid.<br />'; 
} 
if(!preg_match($string_exp,$last_name)) { 
$error_message .= 'The Last Name you entered does not appear to be valid.<br />'; 
} 
if(strlen($comments) < 2) { 
$error_message .= 'The Comments you entered do not appear to be valid.<br />'; 
} 
if(strlen($error_message) > 0) { 
died($error_message); 
} 
$email_message = "Form details below.\n\n"; 

function clean_string($string) { 
    $bad = array("content-type","bcc:","to:","cc:","href"); 
    return str_replace($bad,"",$string); 
} 

$email_message .= "First Name: ".clean_string($first_name)."\n"; 
$email_message .= "Last Name: ".clean_string($last_name)."\n"; 
$email_message .= "Email: ".clean_string($email_from)."\n"; 
$email_message .= "Telephone: ".clean_string($telephone)."\n"; 
$email_message .= "Comments: ".clean_string($comments)."\n"; 


// create email headers 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 
?> 

<!-- include your own success html here --> 

Thank you for contacting us. We will be in touch with you very soon. 

<?php 
} 
?> 

(私はおそらくあまりにも乱雑で、あまりにも私はそれで遊んで後に変更されて、私は「オリジナル」のコードをコピー)を変更しようとしているコードは私の一部です(フォームがある)contact.phpからコードが

<form name="contactform" method="post" action="submit_form.php"> 

<div class="left_form"> 
<label for="name" class="label">your name</label> 

(this is the code that was suppose to display error message within the same page 

<?php if($errors['name'] = "") echo $errors['name']; ?>) 


<input type="text" class="inputtext" name="name" value="" /> 

上記のコードはかなり(のみ異なるものが名前である=」「)

エニオン場合は、すべての入力フィールドでも同じです私を助けることができます、私は非常に感謝します。

ありがとうございます。 =)

答えて

1

関数内から投稿を処理し、エラーの発生したフィールドを保持する別の配列を生成します。エラーがある場合は、フィールドを出力するか、フィールドが有効であれば投稿を処理します。OKをクリックします。ユーザーの入力を信頼しないでください。

if(isset($_POST['submit'])) 
{ 

    if(!ctype_alpha($_POST['fieldname'])) //or other validation type you prefer 
    { 
     $errors[] ='<p>problem with fieldname</p>'; 
    } 

... repeat above for each field 

    if(count($errors)) 
    { 
     //output error message using foreach from 
    } 
    else 
    { 
     //process the post 
    } 
} 

あなたがPHPに非常に慣れていない場合、私はあなたがそれはあなたが作成し、どのように将来的には、それを改善するためにしているが何であるかを理解することができるように勉強し、いくつかの重い読書やチュートリアルを示唆しています。あなたは擬似コードの形として起こるしたいものをテキスト形式でビットによって、ビットを書き込むことによって、

スタート、実際のP​​HPコードを使用すると、各段階で、あなたの結果をテストすることができ、このように置き換えます。

php official site foreach construct

+0

こんにちはせずにこのフォームを送信できることを意味。あなたの時間をありがとう。私はあなたの答えを実装しようとしています。私はPHPに慣れ親しんでいないことを忘れています。 :-P(これまでのところ私はコピー>貼り付け>研究>編集方法で管理していました)。 foreachフォームを正しく記述する方法がわかりません。また、あなたのコードを使用するには、古いものからいくつかのセクションを削除する必要があると思います(彼らは衝突しません)。申し訳ありませんが痛みです。 :-P – Vetaxili

0

私は非常にあなたがフォームライブラリを使用して離れて痛みを取ることをお勧めします。ここで

は、いくつかの例は以下のとおりです。

まだ検証したいユーザーの入力を自分で消毒してから、少なくともfilter php extensionを試してみてください。しかし、実際には、車輪を再発明するのではなく、外部コードを再利用しようとすると、コードがきれいになります多くの!!!!

また、あなたのコードは、少なくともセキュリティ問題の対象となります。CSRF request forgery、誰かが潜在的に彼の同意

関連する問題