1

率直に言って、私はコーディングフリークではありません。基本的に、この php スクリプトは、「ニュースレター購読」フォームの名前と電子メール フィールドを検証します。まあ、すべてのブラウザですべてがうまくいくように見えました。2 日後、このスクリプトは IE9 と Firefox 14-16 で動作しなくなりました。Chromeで問題なく動作します。このエラーの原因を教えてください。

phpスクリプトはsignup.phpという名前です

コード内の「エコー スクリプト アラート」は、FF および IE9 では機能しないようです。Chromeではまったく問題なく動作します。これはまさに私の問題です。

Firefox のエラー - Firefox は、サーバーがこのアドレスへのリクエストを決して完了しない方法でリダイレクトしていることを検出しました。この問題は、Cookie の受け入れを無効にするか拒否することによって発生することがあります。

Firefox のアクション ポイント - このエラーに対処するために必要なすべてのアクションが実行されました。何もうまくいきませんでした。

IE9 のエラー - 単に応答せず、同じページにとどまります。

<?php

ob_start();
session_start();

/*Name Validation.*/
function checkName($name) 
{
$nAccept = array("&", "’", " ",  "-");

if (!ctype_alpha(str_replace ($nAccept, "", $name)))
   {
        return TRUE;
    }
}

/*Email Validation.*/
function checkEmail($email) 
{
   if(mb_eregi("^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]", $email)) 
   {
      return FALSE;
   }
    if (!preg_match("/^[^@]{1,64}@[^@]{1,255}$/i", $email))
    {

        return false;
    }

   list($Username, $Domain) = explode("@",$email);

   if(getmxrr($Domain, $MXHost)) 
   {
      return TRUE;
   }
   else 
   {
      if(fsockopen($Domain, 25, $errno, $errstr, 30)) 
      {
         return TRUE; 
      }
      else 
      {
         return FALSE; 
      }
   }
}


function isInjected($str) {
    $injections = array('(\n+)',
    '(\r+)',
    '(\t+)',
    '(%0A+)',
    '(%0D+)',
    '(%08+)',
    '(%09+)'
    );
    $inject = join('|', $injections);
    $inject = "/$inject/i";
    if(preg_match($inject,$str)) {
        return true;
    }
    else {
        return false;
    }
}

if(checkName($_REQUEST['name']) == TRUE) {
echo "<script>alert('Please enter a Valid Name.');history.back();</script>";
}

elseif (!isset($_POST['email'])) {
echo "<script>alert('Please ensure you have completed all fields before submitting the form. No fields to be left blank.');history.back();</script>";
}

elseif (empty($_POST['name']) || empty($_POST['email'])) {
echo "<script>alert('Please ensure you have completed all fields before submitting the form. No fields to be left blank.Type in only one valid email address.');history.back();</script>";
}

elseif ( isInjected($_POST['email']) ) {
echo "<script>alert('Please ensure you have completed all fields before submitting the form. No fields to be left blank.Type in only one valid email address.');history.back();</script>";
}

elseif(checkEmail($_REQUEST['email']) == FALSE) {
echo "<script>alert('Entered E-Mail is Invalid or The E-Mail does not belong to a valid domain.');history.back();</script>";
}

else{

$host="localhost"; // Host name 
$username="root"; // Mysql username 
$password="root"; // Mysql password 
$db_name="test"; // Database name 
$tbl_name="connect_members_temp"; //table name

mysql_connect("$host", "$username", "$password")or die("cannot connect to server"); 
mysql_select_db("$db_name")or die("cannot select DB");

$confirm_code=md5(uniqid(rand()));

$name=$_POST['name'];
$email=$_POST['email'];

$sql="INSERT INTO $tbl_name(confirm_code, name, email)VALUES('$confirm_code', '$_POST[name]', '$_POST[email]')";
$result=mysql_query($sql);

}
mysql_close();

if($result)
{

// send e-mail to
$to= 'me@localhost';
$thankyou_page = "before_subscription.html";
$email_page = "email_connectivity.html";
$data_page = "email_not_found.html";

$subject="Confirm Your Subscription with XXXXX";


$header="from: XXXXX <donotreply@XXXXX.com>";

$message="Your Confirmation link \r\n";
$message.="Click on this link to confirm your subscription \r\n";
$message.="http://localhost/XXXXX/confirmation.php?passkey=$confirm_code";

// send email
$sentmail = mail($to,$subject,$message,$header);

}

else
{
header( "Location: $data_page" );
}

if($sentmail)
{
header( "Location: $thankyou_page" );
}
else{
header( "Location: $email_page" );
}

?>

HTMLフォームはこちら

<form action="signup.php" method="post">
        <fieldset>
          <legend>Digital Newsletter</legend>
          <div class="fl_left">
            <input type="text" name="name" value="Enter name here&hellip;" onfocus="this.value=(this.value=='Enter name here&hellip;')? '' : this.value ;" />
            <input type="text" name="email" value="Enter email address&hellip;" onfocus="this.value=(this.value=='Enter email address&hellip;')? '' : this.value ;"/>
          </div>
          <div class="fl_right">
            <input type="submit" name="newsletter_go" id="newsletter_go" value="&raquo;"/>
          </div>
        </fieldset>
      </form>
4

1 に答える 1

2

ページ上でリダイレクトやエコーメッセージを実行することはできません。検証が失敗した場合は、メッセージをエコーし​​てから終了する必要があります。

リダイレクトエラーが発生する理由は、GBDが言及した問題が原因です。else検証が失敗した場合、を設定する句に入るのは決してありませんが、とにかく$data_pageそうします。header("Location: $data_page");

$thankyou_pageまた、それを行った後、またはのいずれかを送信するコードに入ります$email_pageLocation:ヘッダーは1つだけにすることができます。必要なリダイレクトを送信した後、終了する必要があります。

于 2012-10-13T05:58:50.023 に答える