人に聞けない痔の悩み、これでスッキリ >>

初歩的な質問ですみません。
現在、PHPで問い合わせフォームを作成しており、チェックボックスが選択されていない場合に、エラーを返す処理を行いたいです。

通常のテキストフィールドの場合は、下記の文言でエラー処理が行われるのですが、
チェックボックスが選択されているかを見るにはどうすればよいかご教示いただけないでしょうか。
ーーーーーーーーーーーーーーーー
■フォーム側
{if:$required.お名前} <p>エラー文</p> {/if:$required.お名前}

■php
// 入力必須チェック
if (isset($_POST['required'])) {
foreach ($_POST['required'] as $v) {
$tmpl->set("required.$v", false);
if (empty($_POST[$v])) {
$tmpl->set("required.$v", h($v . ERROR_REQUIRED));
$global_error[] = h($v . ERROR_REQUIRED);
$global_error_flag = true;
}
}
}
ーーーーーーーーーーーーーーーー

このQ&Aに関連する最新のQ&A

A 回答 (1件)

チェックボックスのnameをどうしているかによりますね



そもそもチェックボックスはチェックしなければデータが飛ばないので
普通にnameをつけていればissetでチェックすればセットされていないという
分岐にひっかかるでしょう

また「hogehoge[]」的なカッコをつけたnameで拡張していれば
isset($_REQUEST["hogehoge"])すると同時に
is_array($_REQUEST["hogehoge"])もチェックする必要があります
その上で、foreachすればいいでしょう

例示のものでいうと
>if (isset($_POST['required'])) {
>foreach ($_POST['required'] as $v) {

となっているのは

if (isset($_POST['required']) and is_array($_POST['required'])) {
foreach ($_POST['required'] as $v) {

とするか

if (isset($_POST['required'])) {
foreach (is_array($_POST['required'])?$_POST['required']:array($_POST['required']) as $v) {

のようにしておくと汎用性があがります
requiredが配列だと確定しているのであれば、手を抜いて

if (isset($_POST['required'])) {
foreach ((array) $_POST['required'] as $v) {

という書き方でも通用します
    • good
    • 0
この回答へのお礼

ありがとうございました!
記載いただいたもので無事稼働しました。
もっと勉強します。。。

お礼日時:2014/07/22 23:24

このQ&Aに関連する人気のQ&A

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

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qチェックボックスの必須項目指定

入力フォームにあるチェックボックスをPHPを使って必須にしたいです。

何もチェックしないまま送信すると、
「一つ以上チェックしてください」とチェックボックスの下に表示される仕組みを作りたいのですが、どのようなものがありますでしょうか?

調べてみましたが、エラーページにとぶ仕組みだったり確認画面への送り方などしかみつからず・・・

よろしくお願いします。

Aベストアンサー

自分自身にサブミットするならこんな感じで

<?PHP
$err_msg["c"]="";
if(isset($_REQUEST["go"]) and !isset($_REQUEST["c"])){
$err_msg["c"]="なんかえらんで!<br>\n";
}
if(isset($_REQUEST["c"]) and is_array($_REQUEST["c"])){
foreach($_REQUEST["c"] as $val){
$checked["c"][$val]=" checked";
}
}
print <<<eof
<form action="{$_SERVER["SCRIPT_NAME"]}">
<input type="checkbox" name="c[]" value="1"{$checked["c"][1]}>1
<input type="checkbox" name="c[]" value="2"{$checked["c"][2]}>2
<input type="checkbox" name="c[]" value="3"{$checked["c"][3]}>3<br>
{$err_msg["c"]}
<input type="submit" name="go" value="go">
</form>
eof;
?>

自分自身にサブミットするならこんな感じで

<?PHP
$err_msg["c"]="";
if(isset($_REQUEST["go"]) and !isset($_REQUEST["c"])){
$err_msg["c"]="なんかえらんで!<br>\n";
}
if(isset($_REQUEST["c"]) and is_array($_REQUEST["c"])){
foreach($_REQUEST["c"] as $val){
$checked["c"][$val]=" checked";
}
}
print <<<eof
<form action="{$_SERVER["SCRIPT_NAME"]}">
<input type="checkbox" name="c[]" value="1"{$checked["c"][1]}>1
<input type="checkbox" name="c[]" value="2"{$checked["c"][2]}>...続きを読む

Qアンケートフォームの未記入項目チェック

アンケートフォームを作る勉強をしています。
氏名やメールアドレスなどが未記入の場合にエラーとして登録できないようにするにはどうしたらいいでしょうか

PHPの勉強をはじめてまだ数日なので参考書片手にやっている状態なのですが
is_nullというのがあったので
<?php
if(is_null($_POST['name"])){
print("<p>ERROR:氏名が未記入です。<br>");
}else{
$result1=($_POST['t_fname']);
}
?>
こんな具合にやってみたのですがうまく動きませんでした
どのようにやったらいいかアドバイスお願いします。

Aベストアンサー

tabun0622さんはじめまして、papillon68と申します。

氏名やメールアドレスを入力する部分を
<input type="text"・・・>
で作成していると推測しての回答です。


◆text(テキスト)
submitが押されるとその時入力されている値が送信されます。
未入力の場合は空白です。("")

◆select、option(コンボボックス)
submitが押されるとその時選択中のvalueが送信されます。

◆checkbox(チェックボックス)
submitが押されるとチェックが入っていればvalueが送信され、チェックが入っていなければそのチェックボックス自体は送信されません。
$_POST['チェックボックスのname']が未定のような感じです。

◆radio(ラジオボタン)
submitが押されると選択されているラジオボタンのvalueが送信され、チェックが入っていなければそのラジオボタン自体は送信されません。

◆submit(サブミット)
押されたサブミットボタンのみが送信されます。



ですので、
> if(is_null($_POST['name"])){
の場合ですと

if($_POST['name'] == "") {

とすると未入力かどうかが判断できます。


チェックボックスやサブミットボタンの場合ですと

if(isset($_POST['name']))

とすると送信されたかどうかが判断されます。
この方法はよく使われているように思います。


例えば、以下のようにするとサブミットボタン(send)がおされなければ、登録処理は行われません。
--------------------------------------------------
<?php
 // sendが押されたかどうか
 if(isset($_POST['send'])) {
  // nameが未入力ではないか
  if($_POST['name'] == "") {
   print("<p>ERROR:氏名が未記入です。<br>");
  }else{
   $result1=($_POST['t_fname']);
  }
 }
?>
<form>
氏名:<input type="text" name="name">
<input type="submit" name="send">
</form>
--------------------------------------------------

tabun0622さんはじめまして、papillon68と申します。

氏名やメールアドレスを入力する部分を
<input type="text"・・・>
で作成していると推測しての回答です。


◆text(テキスト)
submitが押されるとその時入力されている値が送信されます。
未入力の場合は空白です。("")

◆select、option(コンボボックス)
submitが押されるとその時選択中のvalueが送信されます。

◆checkbox(チェックボックス)
submitが押されるとチェックが入っていればvalueが送信され、チェックが入っていなければそのチェ...続きを読む

Qチェックボックスから複数のvalueを取り出す

HTMLフォームから、action="file.php"でデータの受け渡し→PHPで送られてきたvalueに応じて文章を出力、というプログラムを作っています。

例:
グループAのラジオボタン1にチェック、送信
→グループAで押されたラジオボタンを送信されたvalueで判別、この場合はvalue==A
→value==Aの場合に表示する文章を変数に受け渡し、その変数で表示

ラジオボタン、テキストボックスのvalueは$_POST['XXX']で取り出せたのですが、チェックボックスのデータだけが取り出せません。こちらの質問を検索したとき、多次元配列という言葉を見かけたのですが、いまいちよく分かりませんでした。
チェックボックスの複数のvalueで、上記の例のような動きを実現させるにはどうしたらいいでしょうか。どなたかご教授ください。

Aベストアンサー

チェックボックスはちょっと特殊

まずHTML部分で、以下のように定義します
<input type="checkbox" name="sample[]" value="test1">test1
<input type="checkbox" name="sample[]" value="test2">test2

ここでは、nameの部分に[]をつけるのがポイント


次にphpで受け取る方法として、
$sample = $_POST["sample"];
で問題ありません。

受け取ったデータを使うときは、$sampleは配列になっていますので、
仮に上記のtest1とtest2両方にチェックが付いているとしたら、
$sample[0]にはtest1が、$sample[1]にはtest2が入っています。

$sampleをforeachで使うか、$sampleのデータ数を調べてforでループさせるなどで使えます。

QFORMで送信ボタンと戻るボタンを2つつけてそれぞれ遷移先を変えたい

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入力された値を表示する -->
  <INPUT type="submit" name="submit" value="登録"> // c.php に遷移する
  <INPUT type="submit" name="submit" value="戻る"> // a.php に戻る
 </FORM>

● c.php (完了画面)
--------------------------------------------------------------------------------
b.php について質問なのですが、
b.phpにおいて、登録ボタンと戻るボタンを2つつけて、
それぞれ遷移先を変えたいのですが、どうすればいいんでしょうか・・・?
<FORM method="POST" action="c.php">と書いてしまうと、
戻るボタンを押しても戻らずに、c.phpに遷移してしまいますよね??
こういう場合ってJavaScriptとかで遷移先を指定するんですか・・?
もしそうでしたら、JavaScriptがよくわからないので
できればサンプルコード示していただけると助かります・・・。
  

  
以下のような画面を作りたいのですが↓

--------------------------------------------------------------------------------
● a.php (ユーザ情報入力画面) ※フォームに入力する画面
 
 <FORM method="POST" action="b.php">
  <INPUT type="text" name="mail">
  <INPUT type="submit" name="submit" value="確認">
 </FORM>

● b.php (ユーザ情報入力確認画面)※フォームに入力された値を表示する画面

 <FORM method="POST" action="c.php">
  <!-- ここには、フォームに入...続きを読む

Aベストアンサー

はじめまして。

<INPUT type="submit" name="submit" value="登録" onClick="form.action='c.php';return true">
<INPUT type="submit" name="submit" value="戻る" onClick="form.action='a.php';return true">

でいいと思います。(実際、このコードで使っています)
値を渡すには、FORM内にhiddenで、値を設定しておいて、methodをPOSTに設定しておけば、渡せます。

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

Q配列をPOSTで受けとる

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j]"];
   print"$foo[$j]";
}
?>


こんな感じのことがしたいのですが
うまくいきません
どうもPOSTされてないみたいでfoo[$j]はnullです
凡ミスな気がしなくもないんですが...プログラム初心者なんで↓↓
教えてください
よろしくお願いします

タイトルのまんまですが
配列をformで送って
それをPOSTで受け取りたいのですが
うまくいきません

具体的に言うと
<?php
print"<form method=POST action=action.php>";

for($i=0; $i<$n; $i++){
   print"<input type=text name=foo[$i]>";
}
print"<input type=hidden name=n value=$n>";
print"<input type=submit value=go>";
print"<form>";
?>


///////////以下action.php//////////////////
<?php
$n = $_POST["n"];
for($j=0; $j<$n; $j++){
   $foo[$j] = $_POST["foo[$j...続きを読む

Aベストアンサー

atsuGTさんこんにちは。


受け取り側は

$foo = $_POST["foo"];

とするだけで$fooに送信された配列が格納されます。


$_POST["foo[添え字]"] ではなく、
$_POST["foo"][添え字] となります。

QParse error: syntax error, unexpected T_STRING in・・・118と出るのですが

Parse error: syntax error, unexpected T_STRING in 。。。 on line 118
とでるのですが対処はどうすればよろしいでしょうか?

Aベストアンサー

118行目をみてみてください。
ダブルクォーテーションのなかでダブルクォーテーションを使ったり
してませんか?
基本的な文法ミスなので、自己解決できないと今後きびしいですよ。

Qエラーを元の画面に表示させるには

http://income-seed.ck0.net/1000yen/demand.htm

上のページでは、テキストボックスに値を入力しなかった場合、別のエラー画面などに遷移せずに元のページにエラー表示がされます。

これと同じ仕組みを実現したいのですが、その方法論が思いつきませんので、皆様のお知恵をお借りしたいと思っています。よろしくお願いします。
具体的にコードで示して頂けたりすると非常に助かります。

Aベストアンサー

返信が遅くなりすみません
簡易版ですがサンプルPGを作成しました。NULLチェックと未入力チェックあと簡易版のメアドチェックです。
使用方法等サンプルソースは下記です。
<?php
  //宣言
  $sample = new CHK_SAMPLE();
  //メソッド実行
  $error = $sample->CHK_NULL($_POST['name'],$_POST['mail']);
?>
<html>
<head><title>サンプル</title></head>
<body>
 <form action="sample.php" method="POST">
  <font color="red">
 <?php
  if($error!="OK")
   print $error;
  }
 ?>
  </font><br>
  <input type="text" name="name">
  <input type="text" name="mail">
 <?php
  if($error!="OK"){//エラーがあるとき
   print "<input type=\"submit\" name=\"送信\">";
   print "<input type=\"reset\" name=\"リセット\">";
  }else{
   print "<input type=\"submit\" name=\"送信\">";
  }
 ?>
 </form>
</body>
</html>
//ここからクラス
<?php
class CHK_SAMPLE{
  private $ERROR_MSG1 = "名前とメールアドレスが未入力です。";
  private $ERROR_MSG2 = "名前が未入力です。";
  private $ERROR_MSG3 = "メールアドレスが未入力です。";
  private $ERROR_MSG4 = "メールアドレスが間違っています。";
  private $KEKKA = "OK";//TRUEの場合の戻り値
  
  //NULL・空白チェック・メアドチェック
  /*----------------------------------------
    引数1:名前
    引数2:メールアドレス

    戻り値:「OK」メッセージ or エラーメッセージ
  ----------------------------------------*/
  public function CHK_NULL($CNAME,$CMAIL){
    if($CNAME!=NULL){
      if($CMAIL!=NULL){
        //名前・メールアドレスがNULLでない
        if($CNAME!=""){
          if($CMAIL!=""){
            //名前・メールアドレスが空白でない
            //メアドチェックも行う
            if($this->CHK_MAIL($CMAIL)=="OK"){
              return $this->KEKKA;
            }else{
              return $this->CHK_MAIL($CMAIL);
            }
          }else{
            return $this->ERROR_MSG3;
          }
        }else{
          //メールアドレスも空白
          if($CMAIL!=""){
            return $this->ERROR_MSG2;
          }else{
            return $this->ERROR_MSG1;
          }
        }
      }else{
        return $this->ERROR_MSG3;
      }
    }else{
      //メールアドレスもNULL
      if($CMAIL!=NULL){
        return $this->ERROR_MSG2;
      }else{
        return $this->ERROR_MSG1;
      }
    }
  }
  //メアドチェック(簡易)
  /*----------------------------------------
    引数1:メールアドレス

    戻り値:「OK」メッセージ or エラーメッセージ

    文字列「*****@******」に一致するか
    ※「*」は任意の文字列
  ----------------------------------------*/
  public function CHK_MAIL($CMAIL){
    if(preg_match("/^[^.]+\@[^.]+$/i", $CMAIL)){
      return $this->KEKKA;
    }else{
      return $this->ERROR_MSG4;
    }
  }
}
?>

返信が遅くなりすみません
簡易版ですがサンプルPGを作成しました。NULLチェックと未入力チェックあと簡易版のメアドチェックです。
使用方法等サンプルソースは下記です。
<?php
  //宣言
  $sample = new CHK_SAMPLE();
  //メソッド実行
  $error = $sample->CHK_NULL($_POST['name'],$_POST['mail']);
?>
<html>
<head><title>サンプル</title></head>
<body>
 <form action="sample.php" method="POST">
  <font color="red">
 <?php
  if($error!="OK")
   print $error;
...続きを読む

Qphp ラジオボタンのデータの渡し方

phpで自動販売機プログラムを作成しています。
ラジオボタンを使い120円または150円の飲み物を選択できるようにし、購入を押すとおつりを計算するものです。

これがhtml側のプログラムです。
<FORM ACTION="result.php" METHOD="POST">
<INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan1" CHECKED>120円のジュースを購入します。お金を<INPUT TYPE="TEXT" NAME="money1" SIZE="5">円入れます。<BR>
<INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan2">150円のジュースを購入します。お金を<INPUT TYPE="TEXT" NAME="money2" SIZE="5">円入れます。<BR>

<INPUT TYPE="SUBMIT" VALUE="購入">

これをphp側のプログラムで処理するさいラジオボタンでデータを渡したいのですがやり方がわかりません。
この場合120円の飲み物のおつり計算をしたいのです。
if($_POST['Juice'] = '$nedan1'){(想像)
$sonyu = $_POST['money1'];
こちらでは150円のほうの計算を。
elseif($_POST['Juice'] = '$nedan2'){
$sonyu = $_POST['money2'];
このif文とテキストの渡し方の部分がこれでは動かないのでどなたかご教授ください。

環境はPHPDEV423を使っています。(Apache、Mysql)

phpで自動販売機プログラムを作成しています。
ラジオボタンを使い120円または150円の飲み物を選択できるようにし、購入を押すとおつりを計算するものです。

これがhtml側のプログラムです。
<FORM ACTION="result.php" METHOD="POST">
<INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan1" CHECKED>120円のジュースを購入します。お金を<INPUT TYPE="TEXT" NAME="money1" SIZE="5">円入れます。<BR>
<INPUT TYPE="RADIO" NAME="Juice" VALUE="nedan2">150円のジュースを購入します。お金を<INPUT TYPE="TEXT"...続きを読む

Aベストアンサー

if($_POST['Juice'] = '$nedan1'){(想像)

ラジオボタンは、1つのみ選択ですから $_POST['Juice'] の中に
nedan1かnedan2 という値のどちらかが入ってきます
ですから
比較するのであれば
if($_POST['Juice'] === 'nedan1'){
こうなります

あともうひとつ
実際の自動販売機には、お金を入れるところは1つしかありません。
しかしあなたの質問文に書いているソースを現実に当てはめると、商品毎にコイン投入口があることになります
money1 と money2です
コイン投入口が商品毎に存在する自販機を作るのであれば良いのですが・・・


いちおー私なりに、あなたが理解できるのではないかな?というソースを貼り付けておきますが、
かなりいい加減で、無作法なソースなのでこのままコピーしたりしても意味ないですよ
あくまでもヒントとしてのソースです
この例の場合、同一値段の商品が増えたときに対応できません(わざとです)


---------html
<form action="result.php" method="post">
<input type="radio"name="juice" value="120" />120円のジュースを購入します。 <br />
<input type="radio"name="juice" value="150" />150円のジュースを購入します。 <br />
お金を<inputtype="text" name="money1" size="5" />円入れます。<br />
<input type="submit" value="購入" />
</form>

---------result.php
//陳列している商品の値段と商品名
$price["juice1"]=120;
$price["juice2"]=150;

//POSTされた値を取得します
$juice = $_POST["juice"];
$money1 = $_POST["money1"];

//$money1 がお金かどうかを調べる
if( false === is_int($money1) ){
exit("お金を入れてください");
}

//選択されたジュースがいくらなのかを比較
if ( $price["juice1"] == $juice){
$change = $money1 - $price["juice1"] ;
}elseif( $price["juice2"] == $juice){
$change = $money1 - $price["juice2"];
}

if ( 0 > $change ){
print "お金が足りません";
}else{
print "おつりは".$change."円です";
}

if($_POST['Juice'] = '$nedan1'){(想像)

ラジオボタンは、1つのみ選択ですから $_POST['Juice'] の中に
nedan1かnedan2 という値のどちらかが入ってきます
ですから
比較するのであれば
if($_POST['Juice'] === 'nedan1'){
こうなります

あともうひとつ
実際の自動販売機には、お金を入れるところは1つしかありません。
しかしあなたの質問文に書いているソースを現実に当てはめると、商品毎にコイン投入口があることになります
money1 と money2です
コイン投入口が商品毎に存在する自販機を作...続きを読む

Qテーブルの最後(最新)のレコードを抽出したい

宜しくお願いします。
PHP MYSQL の組み合わせで使っています

以下のようにして、最後のレコードを取り出したいのですが
まったく違う事をしているのかもしれません。

$sql =" select * from テーブル where フィールド='max' " ;

フィールドはauto_incrementで番号を振っています。
これで最大のつもりなのですが・・・。

他にも、レコードを入れた時間も記録したフィールドがあるのですが
どうしてよいか?判りません。

テーブルの最新のレコードを出したいのです。
**その中の一つのフィールドを取り出すのですが、
  それはうまくいっているみたいです 
  (max の所に数字を入れると表示します)

お手数かけますが、どなたかご教授お願いいたします。

Aベストアンサー

#2回答者です。

MySQL 4.1以前(サブクエリを使えない)なら、以下のような方法が考えられます。

select * from 表名
order by 列名 desc limit 1


人気Q&Aランキング