1

この電子メール検証コードに大きく基づいています(これは動作します - 私はそれをテストしました)

<?php


require_once("include/connectionpdo.php"); 


echo("<h2>parsed1</h2> ");

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 />";
    echo "If you have fixed any possible errors, and you believe that there is a problem with our submission system, please ";
    die();
    }

   echo("<h2>parsed2</h2> ");

   // first checks to see if any information is supplied at all in the required fields 
    if(!isset($_POST['first_name']) ||
        !isset($_POST['last_name']) ||
        !isset($_POST['email']) ||
        !isset($_POST['phone']) ||
        !isset($_POST['addressl1']) ||
        !isset($_POST['addressl2']) ||
        !isset($_POST['town']) ||
        !isset($_POST['county']) ||
        !isset($_POST['type']))
    {
        died('We are sorry, but there appears to be a problem with the form you submitted.');       
    }

    echo("<h3>parsed3</h3> ");

    $first_name = $_POST['fname']; // required
    $last_name = $_POST['sname']; // required
    $email_from = $_POST['email']; // required
    $telephone = $_POST['phone']; // not required
    $dateofbirth = $_POST['dob']; // required
    $addresslone = $_POST['addressl1']; // required
    $addressltwo = $_POST['addressl2']; // required
    $townnm = $_POST['town']; // required
    $countynm = $_POST['county']; // required     
    $typeapp = $_POST['type']; // required
    $issubscribed = $_POST['subscribed']; // required

    // checks to see if information supplied is correct

    echo("<h4>parsed4</h4> ");

    $error_message = "";
    $email_exp = '/^[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}$/';
    $number_exp = '/^[0-9]/';  
  if(!preg_match($email_exp,$email_from)) {
    echo("errortest1 ");
    $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)) {
    echo("errortest2 ");
    $error_message .= 'The First Name you entered does not appear to be valid.<br />';
  }
  if(!preg_match($string_exp,$last_name)) {
    echo("errortest3 ");
    $error_message .= 'The Last Name you entered does not appear to be valid.<br />';
  }
    $number_exp = '/^[0-9]/';  
  if(!preg_match($string_exp,$last_name)) {
    echo("errortest4 ");
    $error_message .= 'Please just enter numerical values for your phone number.<br />';
  }

  if(strlen($addresslone) < 2) {
    echo("errortest5 ");
    $error_message .= 'The address (line one) you entered do not appear to be valid.<br />';
  }
   if(strlen($addressltwo) < 2) {
    echo("errortest6 ");
    $error_message .= 'The address (line two) you entered do not appear to be valid.<br />';
  } 
  if((!preg_match($string_exp,$townnm)) || (strlen($townnm) < 2)) {
    echo("errortest7 ");
    $error_message .= 'The town you entered does not appear to be valid.<br />';
  } 
  if((!preg_match($string_exp,$countynm)) || (strlen($countynm) < 2)) {
    echo("errortest8 ");
    $error_message .= 'The county you entered does not appear to be valid.<br />';
  } 

  if(strlen($error_message) > 0) {
    died($error_message);
  }


# the data we want to insert
$data = array($first_name, $second_name, $email_from, $telephone, $dateofbirth, $addresslone, $addressltwo, $townnm, $countynm, $typeapp, $issubscribed);
$STH = $DBH->prepare("INSERT INTO members (fname, sname, email, phone, dob, addressl1, addressl2, town, county, type, subscribed) values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
$STH->execute($data);


?>
<!--<!DOCTYPE html>
<head><title></title></head><body> -->

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

<!-- </body></html> -->

コードは「parsed 2」を出力しますが、それ以上は進みません。

function die は実行されますが、「申し訳ありませんが、送信したフォームに問題があるようです」という追加の一般的なメッセージのみが出力されます。

奇妙なことに、!isset は常に true を返すようです (フォーム内のフォーム情報に関係なく)。if !isset ブロックをすべて削除したため、「parsed 3」、「parsed 4」、「errortest1」、および「入力した電子メール アドレスは有効ではないようです」という出力が発生しました。繰り返しますが、これは、フォームの電子メール アドレスが指定された条件を満たしているかどうかに関係ありません。if!preg_match ステートメントを削除すると、エラー メッセージが生成される

「致命的なエラー: 88 行目の public_html/application4.php の非オブジェクトに対するメンバ関数 prepare() の呼び出し」

.

構文エラーはありません。少なくとも構文エラーがあったとしても、単に論理エラーを生成しているだけです。

4

2 に答える 2

1

コードの違いまたは変数名を参照してください。

echo("<h2>parsed2</h2> ");

あなたが使用した
!isset($_POST['first_name']

以降echo("<h3>parsed3</h3> ");

あなたが使用した

$first_name = $_POST['fname']; // required

' first_name ' はどのように ' fname ' になりますか?

コードで first_name が使用されるか、コードで fname が使用されます。

これと同じように、last_namesnameになります。このコードを更新して、もう一度テストします。

于 2012-11-03T12:29:08.200 に答える
1

first_nameおよびフィールドの名前を変更しlast_nameたので、条件内のすべてのフィールドが設定されている場合、以下のコードは false を返す必要があります。

if(!isset($_POST['fname']) ||
        !isset($_POST['sname']) ||
        !isset($_POST['email']) ||
        !isset($_POST['phone']) ||
        !isset($_POST['addressl1']) ||
        !isset($_POST['addressl2']) ||
        !isset($_POST['town']) ||
        !isset($_POST['county']) ||
        !isset($_POST['type']))
{
        died('We are sorry, but there appears to be a problem with the form you submitted.');       
    }
于 2012-11-03T12:13:59.230 に答える