プロが教えるわが家の防犯対策術!

下記のプログラムを実行するとWarning: Undefined array key "C_num" in C:\xampp\htdocs\customer\c_regi_veri.php on line 2というエラーが出てきます。

DBのC_numはPRIMARYKEYにしています。

DBの設定がいけないでしょうか?
それともプログラムがいけないでしょうか?
分からなくなってきました。

最初のプログラムはエラーの出た部分を表示します。
<?php
$C_num = $_GET['C_num'];   <ーーーエラー部分
$C_name = $_GET['C_name'];
$C_phon = $_GET['C_phon'];
$C_sa = $_GET['C_sa'];
?>

下記のプログラムは遷移元のプログラムです。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitio …
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta charset="utf8">
<meta name="viewport" content="width=device-width">
<title>顧客登録</title>
<link rel="stylesheet" href="ser_style.css">

</head>
<body>
<div class="content">


<script type="text/JavaScript">
function check0()
{
txt = document.form1.C_num.value;
n = txt.length;
if (n > 6) alert("6文字以内で入力してください");
}

function check1()
{
txt = document.form1.C_name.value;
n = txt.length;
if (n > 10) alert("10文字以内で入力してください");
}

function check2()
{
txt = document.form1.C_phon.value;
n = txt.length;
if (n > 11) alert("11文字以内で入力してください");
}

function check3()
{
txt = document.form1.C_sa.value;
n = txt.length;
if (n > 50) alert("50文字以内で入力してください");
}

function check4()
{
txt = document.form1.C_num.value;
n = txt.length;
if (n == "") alert("顧客番号に未入力がありました");
}

function check5()
{
txt = document.form1.C_name.value;
n = txt.length;
if (n == "") alert("顧客名に未入力がありました");
}

function check6()
{
txt = document.form1.C_phon.value;
n = txt.length;
if (n == "") alert("顧客電話番号に未入力がありました");
}

function check7()
{
txt = document.form1.C_sa.value;
n = txt.length;
if (n == "") alert("顧客住所に未入力がありました");
}
</script>

</form>
<h1>顧客登録</h1>
<form action="c_regi_veri.php" method="GET" name="form1" onSubmit="return formcheck()">
<div class="control">
<label for="C_num">顧客番号(半角数字のみ入力可)<span class="required">必須</span></label>
<input pattern="[1-9][0-9]*" id="C_num" type="number" name="C_num" value="" onChange="check0() , check4()">
</div>
<div class="control">
<label for="C_name">顧客名(全角文字のみ入力可)<span class="required">必須</span></label>
<input pattern="[^\x20-\x7E]*" id="C_name" type="text" name="C_name" value="" onkeyup = "this.value = this.value.replace(/[ -~1234567890]/g, '')" onChange="check1() , check5()"/>
</div>
<div class="control">
<label for="C_phon">顧客電話番号(半角数字のみ入力可、11桁まで入力可、ハイフンなし)<span class="required">必須</span></label>
<input pattern="^[0-9]+$" id="C_phon" type="tel" name="C_phon" value="" onChange="check2() , check6()">
</div>
<div class="control">
<label for="C_sa">顧客住所<span class="required">必須</span></label>
<input id="C_sa" type="text" name="C_sa" value="" onChange="check3() , check7()">
</div>
<div class="control">
<input type="submit" value="登録">
</div>
</form>
<form action="menu.php" method="GET">
<div class="control">
<input type="submit" value="メニューへ">
</div>
</form>
</div>
</body>
</html>

A 回答 (3件)

C_numという名前のGETパラメーターがないからです。


正しくはisset()でその名前のパラメーターがあるかどうかを判断して処理すべきです。
https://www.php.net/manual/ja/function.isset.php

加えて、文字列であることを検証するにはis_string()、空かどうかの検証にempty()を特徴を捉えた上で活用します。
https://www.php.net/manual/ja/function.is-string …
https://www.php.net/manual/ja/function.empty.php

警告やエラーは、それだけ問題となっている部分がある表れなので、無視すべきではありません。
場合によってはWebサーバーのログとしても出力され、無視できるものではなくなります。

あまりPHPの入口すら理解できていないようなら、初心者向けの参考書で学習されるといいかもしれません。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
issetで何とか上手く行きましたが、下記のプログラムのC_numだけクリアされるのですが、記述はこれであっているのでしょうか?
比較のため二つ載せておきます。

value=
"<?php if(isset($_GET['C_num'])){print($_GET['C_num']);}?>">

value=
"<?php if(isset($_GET['C_name'])){print($_GET['C_name']);}?>" >

お礼日時:2021/02/01 20:47

クリアするようなコードではないため、本当にその値は渡ってきているのか?他のコードが邪魔してクリアしていないか?をご確認ください。

    • good
    • 1
この回答へのお礼

回答ありがとうございます。
原因は全角の空白でした。
お騒がせしてすいませんでした。

お礼日時:2021/02/01 22:07

それはエラーじゃなくて警告なので、動作に問題が無いなら、無視するという手もあります。



警告の原因は、プログラムのその部分が悪いからです。
古い入門書を読んで書いたプログラムですかね。しっかりとした教科書で学び直すことをお薦めします。
    • good
    • 1
この回答へのお礼

回答ありがとうございます。
ちなみにですが、エラーの出たところは前の画面で入力した値を変数に代入するという処理です。

警告が出ているせいで上手く動作しません。

書き直すとしたらどんな文がいいと思いますか?

お礼日時:2021/02/01 07:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!