phpでNotice: Undefined offset:のエラーが出る原因と対処法

このQ&Aのポイント
  • phpでNotice: Undefined offset:のエラーが出る原因とは、配列のインデックスが存在しない場合に発生します。このエラーの原因は、配列の範囲外のインデックスにアクセスしているか、配列が空である場合に要素にアクセスしていることです。このエラーの対処法としては、配列のインデックスが存在するかどうかを事前に確認するなどのエラーハンドリングを行うことが挙げられます。
  • 質問のコードでは、受け取ったチェックボックスの情報を配列として処理していますが、配列の要素が存在しない場合にエラーが発生しています。具体的には、$_POST['n']の要素が存在しない場合に、Notice: Undefined offset:のエラーが出ます。この場合、isset()関数を使用して要素の存在を事前にチェックすることでエラーを回避することができます。
  • 修正するには、以下のコードを追加します。 if(isset($_POST['n'][$i])) { // コードの処理 } 上記のようにisset()関数を使用して要素の存在を確認し、要素が存在する場合にのみコードの処理を行うようにします。これにより、配列のインデックスが存在しない場合にエラーが発生することを回避することができます。
回答を見る
  • ベストアンサー

phpで困ってます。

phpでNotice: Undefined offset:のエラーが出て困っています。ご指導よろしくお願いします。 まず、name.txtの内容からチェックボックスを生成し、そのチェックボックスにチェックを入れて送信します。 <?php $name_file = "name.txt"; $name_log = array(); // ログファイルの読み込み if (file_exists($name_file)) { $name_log = file( $name_file ); } // ログの内容をHTMLに変換する $html = ""; $count = 0; //チェックボックスの生成 foreach ($name_log as $line) { $checkbox = '<label><input class="che" type="checkbox" name="n['.$count.']" value="'.$line.'"><img src="'.$line.'"></label></br>'; $html .= $checkbox; $count ++; } $html .= '<input type="hidden" name="count" value="'.$count.'">'; ?>   後略 次に受け取る側ですが,チェックが入っている情報をもとにimgタグを生成しようとしています。 <?php $html = ""; $max = $_POST['count']; //n[ ]に送信されきた内容を代入 for ($i = 0; $i < $max; $i++) { if($_POST['n'][$i] != ''){ $img_src = htmlspecialchars($_POST['n'][$i], ENT_QUOTES); $img = '<img src="'.$img_src.'">'; $html .= $img; } } $fhn = fopen("show_html.txt","w"); fwrite($fhn,$html); fclose($fhn); ?> 後略 if($_POST['n'][$i] != '')の部分で Notice: Undefined offset:0 .............. Notice: Undefined offset:1 .............. Notice: Undefined offset:2 .............. . . . . のエラーが出ます。

  • dkong
  • お礼率86% (170/197)
  • PHP
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • t_ohta
  • ベストアンサー率38% (5081/13278)
回答No.1

エラーになっているoffset番号はチェックが入っていないチェックボックスの番号じゃありませんか? チェックボックスはチェックが入っていない時、name・value共にPOSTされてきませんので、エラーになっているのでしょう。 何が入ってくるか判らないので、以下のようにforeachで展開するといいのではないでしょうか。 if(isset($_POST['n'])){ foreach ($_POST['n'] as $imgValue) { $img_src = htmlspecialchars($imgValue, ENT_QUOTES); $img = '<img src="'.$img_src.'">'; $html .= $img; } }

dkong
質問者

お礼

早速の回答ありがとうございます。ご指摘のとおりエラーになっているのはチェックが入っていないチェックボックスの番号でした。教えていただいたように修正したらうまく動きました。助かりました。ありがとうございました。また機会があれば、ご指導よろしくお願いします。

関連するQ&A

  • フォームで受け取った値のPHP表示方法

    フォームのチェックボックスから選択したメニューを 同じページに表示するというPHPのサンプル練習ですが 複数選択した場合、適切に「と」が入るようにするには どのような方法があるのでしょうか? 以下のサンプルの場合だと1つの場合でも 複数選択の場合でも全てに「と」が入ってしまいます。 「echo $_POST["check"][$i]」の次に if条件文のような物を付ければよいと思い試しているのですが なかなか上手く行きません。 初学者ですが何か分かりやすく簡単な方法があれば お教えください。 よろしくお願いいたします。 ---------------------------------------------------------- <?php if(isset($_POST["check"])){ for($i=0; $i<count($_POST["check"]); $i++){ echo $_POST["check"][$i]."と"; ←※※※ } echo "が好きです。"; } ?> <html> <body> <form method="post" action=""> <input type="checkbox" name="check[]" value="きつねうどん">きつねうどん <input type="checkbox" name="check[]" value="カレーうどん">カレーうどん <input type="checkbox" name="check[]" value="ざるそば">ざるそば <input type="checkbox" name="check[]" value="天ぷらうどん">天ぷらうどん <input type="submit" value="何が好き"> </form> </body> </html> -----------------------------------------------------------

    • ベストアンサー
    • PHP
  • checkboxについておしえてください

    <form action=" " method="post"> <input type="checkbox" name=" figure" value="1"><img src="a.png"> <input type="checkbox" name=" figure" value="2"><img src="b.png"> <input type="checkbox" name=" figure" value="3"><img src="c.png"> <input type="checkbox" name=" figure" value="4"><img src="a.png"> <input type="checkbox" name=" figure" value="5"><img src="b.png"> <input type="submit" value="送信する"> </form> とした場合に、絵の左にくるチェックボックスの位置を、添付した図のように位置を図の中にもってこれないかと考えています。できれば、大きさも変えたいと考えています。 cssでできるのでしょうか? cssじゃない方法などもあるのでしょうか?よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • htmlのcheckboxで質問です

    <form action=" " method="post"> <p> <input type="checkbox" name="riyu" value="1"><img src="a.png"> <input type="checkbox" name="riyu" value="2"><img src="b.png"> <input type="checkbox" name="riyu" value="3"><img src="c.png"> </p> <p> <input type="submit" value="送信する"> </p> </form> のようにして、絵の左にくるチェックボックスの位置や大きさを変えたいのですが、cssとかでできるのでしょうか?できれば絵に重なるようにチェックボックスを持ってきたいのですが。 cssじゃない方法などもあるのでしょうか?よろしくお願いいたします。

  • PHPバージョン4.3.10で動作しない

    はじめのページでチェックボックスにチェックしてもらい、 次のページでそのチェックしたものを表示したいです。 しかし、下記のコードではPHPバージョン4.3.10ではうまく動作しませんでした。 PHPバージョン4.3.10で動作させるには、どうすればよいか教えていただけませんか? <form action="mail.php" method="post"> <input name="member[]" type="checkbox" value="AAA" checked>AAA <input name="member[]" type="checkbox" value="BBB" checked>BBB <input name="member[]" type="checkbox" value="CCC" checked>CCC <input type="submit" value="send"> </form> mail.php <?PHP if(is_array($member)){ $txt ="あなたの選んだのは"; foreach ($member as $key=>$val){ if ($key==0){ $txt .=$val; }else{ $txt .="、".$val; } } $txt.="です"; }else{ $txt="あなたは誰も選んでません"; } print $txt; ?>

    • ベストアンサー
    • PHP
  • phpでform画面を作るには

    phpの勉強を始め、 forとifだけでform画面を作ってみようと思いました。 配列でパスワードとユーザーの画像を用意して処理しようとしたのですが。 正しいパスを打ち込んでも「パスが違います」と3回表示されます。 どこがちがうのでしょうか...初心者なので正しいコードを教えて頂ければ幸いです。 $passArray[0] = "123"; $passArray[1] = "abc"; $passArray[2] = "xyz"; $passArray[0] = "<img src='img/user.png'>"; $passArray[1] = "<img src='img/user.png'>"; $passArray[2] = "<img src='img/user.png'>"; for($i=0;$i<3;$i++) { if($_POST["pass"] == $passArray[$i]) { print"<h2>ようこそ".$_POST["uName"]."様</h2>"; } else { print"パスが違います"; } } <form method="POST" action="test.php"> <h2>名前:</h2> <input type="text" name="uName" placeholder="ユーザー名"> <h2>パスワード:</h2> <input type="password" name="pass" placeholder="パスワード"> <h2>コメント:</h2> <input type="submit" value="送信" id="sub"> </form>

    • 締切済み
    • PHP
  • documentオブジェクトのlengthが取れない

    以下のプログラムでobjのlengthが「undefined」となる原因がわからない <script language="JavaScript"><!-- function Check() {alert("スタート"); var obj = document.frm.elements['check']; var i,j =0;alert("length="+ obj.length); for (i = 0; i < obj.length ; i++ ) { if ( obj[i].checked == true ) {j++;} } alert( 'チェックボックスの数='+ i); alert( 'チェックした数='+ j); } //--></script> <form name="frm" method="POST"><input type="checkbox" name="check" value="1"></form> <a href="javascript:Check();">チェック</a> formの中を以下のように変更すると正しく表示される <form name="frm" method="POST"><input type="checkbox" name="check" value="1"><input type="checkbox" name="check" value="2"></form> どなたか、ご教授くださいませ。

  • javascriptでチェックボックスの選択状況をチェックする方法につ

    javascriptでチェックボックスの選択状況をチェックする方法について質問です。 チェックボックスを <input type="checkbox" name="chk[]" value="1"> <input type="checkbox" name="chk[]" value="2"> のようにした場合、チェックボックスが1か所以上選択されているかどうかは、 var count = 0; for (var i=0;i<document.myform.elements['chk[]'].length;i++){ if(document.myform.elements['chk[]'][i].checked){ count++; } } if(count==0){ window.alert("チェックしてください!"); } のようにすればチェック可能ですが、inputタグで <input type="checkbox" name="chk1[]" value="1"> <input type="checkbox" name="chk1[]" value="2"> <input type="checkbox" name="chk2[]" value="A"> <input type="checkbox" name="chk2[]" value="B"> のように「name」の配列名が変化する場合はどのようにすればチェック可能でしょうか?

  • チェックボックスで得たデータを送信する場合

    CGIでデータの受け渡しを行い、決められたアドレスへ結果を送信するアンケートをつくっています。以前、チェックボックスで複数回答可とした場合の制限のかけ方をJavaScriptを用いた方法で教えてもらいましたが、これを利用して得た値をCGIで受け取りたいのですが、どうやって設定すればいいのでしょうか。「name」がそれぞれ名前が違う所でつまずいています。また<form method=post action="***.cgi">~</form>と項目全体をくくればいいのでしょうか?参考までに以下のHTMLを付記いたします。 <html> <head> <title>5個のうち3個しかチェックできないようにする</title> <script Language="JavaScript"><!-- function check(n) { fOBJ = document.myFORM; count = 0; for (i=1; i<=5; i++) if (fOBJ["CB"+i].checked) count++; if (count > 2) { alert("3個以上チェックできません"); fOBJ["CB"+n].checked = false; } } // --></script> </head> <body> <form name="myFORM"> <input type="checkbox" name="CB1" onClick="check(1)">チェック1<br> <input type="checkbox" name="CB2" onClick="check(2)">チェック2<br> <input type="checkbox" name="CB3" onClick="check(3)">チェック3<br> <input type="checkbox" name="CB4" onClick="check(4)">チェック4<br> <input type="checkbox" name="CB5" onClick="check(5)">チェック5<br> </form> </body> </html>

    • ベストアンサー
    • CGI
  • php アンケートについての質問

    htmlのフォームから送信 phpでアンケート結果を受け取る ようなものを書きましたがphpの受け取る処理でエラーが起きてしまうので@を書いて何とか動くようにしました。@を使わずにエラーを修正したいのですがうまくいきません。どなたか助けてさい <html> <p> </p> <h3>アンケート</h3> <form name="form" action="upload1.php" method="GET"> <body bgcolor="#f40fff" text="#ffffff"> <p> お名前を入力して下さい:<br> <input type="text" name="simei"> </p> <p> 性別を選んで下さい。<br> <input type="radio" name="gender" value="男性">男性です<br> <input type="radio" name="gender" value="女性">女性です<br> </p> <p> この大学を何で知りましたか?<br> <input type="checkbox" name="check1" value="メディア媒体"/> メディア媒体で<br> <input type="checkbox" name="check2" value="イラスト"/> イラストで<br> <input type="checkbox" name="check3" value="その他"/> その他<br> </p> <p> 最近ハマっていることは?<br> <input type="checkbox" name="check4" value="サークル、部活"/> サークル部活など<br> <input type="checkbox" name="check5" value="得にない"/> 得にない<br> <input type="checkbox" name="check6" value="その他"/> その他<br> </p> <p> 今やりたいことは?<br> <input type="checkbox" name="check7" value="課題"/> 課題など<br> <input type="checkbox" name="check8" value="得にない"/> 得にない<br> <input type="checkbox" name="check9" value="その他"/> その他<br> </p> <p> <input type="submit" name="submit" value="送信"> </p> </body> </html> php <html> <body bgcolor="#f40fff" text="#ffffff"> <p> </p> <h3>アンケート</h3> <p> <?php print(date('A:g時i分s秒').'<br>'); ?> <b>お名前:</b><br> <?php print( @$_REQUEST["simei"] ); ?> </p> <p> <b>性別:</b><br> <?php print( @$_REQUEST["gender"] ); ?> </p> <p> <b>この大学を何で知りましたか:</b><br> <?php print( @$_REQUEST["check1"] ); ?><br> <?php print( @$_REQUEST["check2"] ); ?><br> <?php print( @$_REQUEST["check3"] ); ?><br> </p> <p> <b>最近ハマっていることは:</b><br> <?php print( @$_REQUEST["check4"] ); ?><br> <?php print( @$_REQUEST["check5"] ); ?><br> <?php print( @$_REQUEST["check6"] ); ?><br> </p> <p> <b>今やりたいことは:</b><br> <?php print( @$_REQUEST["check7"] ); ?><br> <?php print( @$_REQUEST["check8"] ); ?><br> <?php print( @$_REQUEST["check9"] ); ?><br> </p> <p> <?php $life = 60 * 60 * 24 * 30; if(isset($_COOKIE["count"])) { $count = $_COOKIE["count"] + 1; } else { $count = 1; } setcookie("count", $count, time() + $life); ?> <?php echo $count, "回目の訪問です。\n"; ?> </body>

    • ベストアンサー
    • PHP
  • PHP 送信されたフォームについて

    HTMLから送信されたフォームがうまくうけとれないので質問させていただきます。 HTML側でチェックボックスを用いてphp側に送ったところうまく結果が反映されません。 HTML側で以下のソースを書き <input type="checkbox" name="kaitouran321" value="a">a <input type="checkbox" name="kaitouran322" value="b">b <input type="checkbox" name="kaitouran323" value="c">c php側で <?php print(htmlspecialchars($_POST['kaitouran321'], ENT_QUOTES, 'UTF-8')); ?> <?php print(htmlspecialchars($_POST['kaitouran322'], ENT_QUOTES, 'UTF-8')); ?> <?php print(htmlspecialchars($_POST['kaitouran323'], ENT_QUOTES, 'UTF-8')); ?> および <?php if($_POST['kaitouran321'] == 'a' && $_POST['kaitouran322'] == 'b' && $_POST['kaitouran323'] == 'c') ?> $i++; と書きました。htmlキャラはしっかり受け取ってくれるのですが、if文で書いた方は反応してくれません(iが+1されない)。選択肢がひとつの時、if文は反応するので条件の書き方がおかしいのでしょうか? 回答お願いします。

    • 締切済み
    • PHP

専門家に質問してみよう