"Notice: Undefined index: color in C:\xampp\htdocs\cpages\cmain\userfooter.php on line 31 error"を取り除くにはどうすればよいですか?
$color = ($_POST['color']);
mysql_query("UPDATE `theme` SET color = '$color' WHERE username='plmexico'");
"Notice: Undefined index: color in C:\xampp\htdocs\cpages\cmain\userfooter.php on line 31 error"を取り除くにはどうすればよいですか?
$color = ($_POST['color']);
mysql_query("UPDATE `theme` SET color = '$color' WHERE username='plmexico'");
color
にキーがないため、「未定義のインデックス」通知が発行され$_POST
ます。これはcolor
、前のページから渡されていないためです。キーにアクセスする前に、キーが存在するかどうかを検出できます。
if(array_key_exists("color", $_POST)) {
$color = $_POST["color"];
}else{
$color = "red"; // no color given; default to red
}
また、コードに露骨なSQL インジェクションの脆弱性が含まれていることも知っておく必要があります。クエリに挿入する前に$color
エスケープすることでこれを修正できます。mysql_real_escape_string
mysql_query("UPDATE theme SET color = '" . mysql_real_escape_string($color) . "' WHERE username='plmexico'");
準備済みステートメントを使用して修正することもできます。
その「お知らせ」は誤りです。「未定義のインデックス」というメッセージは、存在しないキーで配列の値にアクセスしようとしていることを意味します。アクセスする前に、値が設定されていることを確認する必要があります (設定されていない場合は、オプションで黒などのデフォルトに設定します)。
$color = isset($_POST['color']) ? $_POST['color'] : "#000000";
また、mysql データベース関数は非推奨になりつつあり、更新されていないことに注意してください。データベースとの対話には、代わりに mysqli または PDO を使用する必要があります。
さらに、コードは現在の状態では SQL インジェクションに対して非常に脆弱です。mysql_real_escape_string
これらの API のいずれかにアップグレードすることを選択した場合は、それと同等の mysqli/PDO を使用して、それらを防止する必要があります。
まず第一に、データを SQL クエリに挿入する前に、必ずデータをクリーンアップする必要があります。あなたのコードは現時点で脆弱です。最も簡単な方法は、 を使用することmysql_real_escape_string
です。もう 1 つの方法は、既に定義した色の ID を送信することです。そうすれば、SQL クエリに挿入する値が「安全」であることを 100% 確信できます。
color
パラメータがサーバーに送信されていないため、エラーが発生しています。
データを送信する前に (Javascript などを使用して) データを検証し、サーバー上で検証することもできます。関数を使用してisset()
、パラメーターが存在するかどうかをテストできます。だからあなたの場合 -
if (!isset($_POST['color'])){
// return an error here! The color paramter was not sent!
}
参考文献 -