5

ユーザーが入力できるフォームを作成し、ユーザーがメールを正しく挿入したかどうかを確認します。

  • false が返された場合: ユーザーにはエラー メッセージが表示されます。
  • true が返された場合: ユーザーに確認メッセージが表示されますがINSERT、データもデータベースに入れられます。

そのため、PHPファイルにフォームを追加しようとしたときに問題が発生したため、同じページでアラートを作成したり、ユーザーにエラーメッセージを表示したりできました。このエラーが発生し始めました:

HTML ドキュメントの文字エンコーディングが宣言されていません。ドキュメントに US-ASCII 範囲外の文字が含まれている場合、一部のブラウザー構成では、ドキュメントが文字化けしてレンダリングされます。ページの文字エンコーディングは、ドキュメントまたは転送プロトコルで宣言する必要があります。

そのため、古いバージョンに戻すことでこれを復元しようとしました。いくつかのコードをカット アンド ペーストする必要がありましたが、それほど複雑ではありませんでした。奇妙な理由で、まだこのエラーが発生します。当然、Stackoverflow でこの問題に関する同様のトピックを確認しましたが、それ以上の回答はありませんでした。たとえばmeta、ページのヘッダーに情報を追加するために、次のような PHP ヘッダーも作成しました。header('Content-type: text/html; charset=utf-8');その後、このエラーに関する記事をいくつか読みましたが、この問題の解決に役立つ記事はありませんでした。

これが私のコードの例です。エラーが発生するのはこのページです。

 <?php    
include_once('credentials.php');
mysql_connect($host, $user, $pass) or die(mysql_error());
mysql_select_db($db) or die(mysql_error());
include_once('functions.php');

 $apples = sanitize($_POST['Apple']);
 $oranges = sanitize($_POST['Orange']);
 $melons = sanitize($_POST['Melon']);
 $pears = sanitize($_POST['Pear']);
 $strawberries = sanitize($_POST['Strawberry']);
 $grapes = sanitize($_POST['Grape']);               
    if($_POST['Grape'] == 'Yes')
    { $grapes = 1; }
    else
    { $grapes = 0; } 
$blueberries = sanitize($_POST['Blueberry']);

if (checkStrawberries($strawberries) == true) {    
    mysql_query("   INSERT INTO tablename (Name, Weight, Color, Ripeness, Age, Origin, Destination) 
            VALUES ('$apples', '$oranges', '$melons', '$Pears', '$strawberries', '$grapes', '$blueberries') ");

    or die(mysql_error()); 

    echo '<!DOCTYPE html>   
            <html>
                <head>
                    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
                </head>
                <title>Page</title>
                <body>
                    True
                    <a href="../index.php">home</a>
                </body>
            </html>';
} else {
    echo '<!DOCTYPE html>   
            <html>
                <head>
                    <meta content="text/html;charset=utf-8" http-equiv="Content-Type">
                </head>
                <title>Pagina</title>
                <body>
                    False
                    <a href="../index.php">home</a>
                </body>
            </html>';
}
?>

私が働いている会社と強い関係があるため、変数とクラスの名前を変更する必要がありました。

編集: このエラーは、Firebug を使用して Firefox のコンソール ログによって生成されています。

EDIT 2 : 混乱を避けるため、またこのアプリケーション内でのデータ交換を説明するために、var と function の名前を変更しました。

編集 3 : Dobromir Velev によって以下に提示されたテストケースでエンコーディング部分をテストしたため、コードでこのエラーが発生しているものを正確に把握しようとしましたが、それはうまくいきました。IF ELSE ステートメントをコメントアウトすることにしましたが、エラーは発生しませんでした。したがって、これはページを破損しているようです。

この特定の課題に何の価値も追加しなかったため、今のところエコーを削除しました。

if (checkStrawberries($strawberries) == true) {    
    mysql_query("INSERT INTO tablename (Name, Weight, Color, Ripeness, Age, Origin, Destination) 
    VALUES ('$apples', '$oranges', '$melons', '$Pears', '$strawberries', '$grapes', '$blueberries') ");
    or die(mysql_error());
} else {
    echo 'FALSE';
}

関数 checkStrawberries は次のとおりです。

function checkEmail($email) {
if (!preg_match("/^( [a-zA-Z0-9] )+( [a-zA-Z0-9\._-] )*@( [a-zA-Z0-9_-] )+( [a-zA-Z0-9\._-] +)+$/" , $email)) {
return false;
}
return true;
}

関数サニタイズは次のとおりです。

function sanitize($dirty){
$clean = htmlspecialchars($dirty);
$cleaner = mysql_real_escape_string($clean);
return $cleaner;
}
4

2 に答える 2

1

まず、HTTPヘッダーとメタタグの両方を含むファイルを試してみます。

<?php
header("Content-Type: text/html; charset=utf-8");
?>

<html>
<head>
<meta content="text/html;charset=utf-8" http-equiv="Content-Type">
<meta content="utf-8" http-equiv="encoding">
</head>
<body>
text
</body>
</html>

これでエラーが発生しない場合は、コードに問題がある可能性があります。たとえば、<?phpタグの前のスペースは、PHPがHTTPヘッダーを設定するのを防ぎます。また、インクルードファイルfile1.phpまたはfile2.phpによってコンテンツが返されると、ブラウザがエンコーディングを誤って検出する可能性があります。

于 2012-12-13T16:57:05.743 に答える
1

PHP チャットに関するいくつかの議論の後、問題は余分なセミコロンに起因するようです

から :

mysql_query(); or die();

に :

mysql_query() or die();
于 2012-12-14T13:07:14.217 に答える