ユーザーが入力できるフォームを作成し、ユーザーがメールを正しく挿入したかどうかを確認します。
- 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;
}