• 締切済み

functionの使い方について

バージョンはPHP: 5.2.6です。 PHPの練習で普通の掲示板を作っているのですが、formからラジオボタンで name=color value=1やname=color value=2 などを色選択で持ってきているのですが、 f($color=="1"){ $color="#333333"; }else if($color=="2"){ $color="#999999"; }else if($color=="3"){ $color="#FF0000"; }else if($color=="4"){ $color="#0000FF"; } 上記で判別して$colorに色情報を渡したのですが、メンテナンス性が悪いと感じました。プログラムは上記で正確に動きます。 いじりやすいように以下のようにしたのですが、上手くcolorに情報が渡りません。 function colorsikibetu($colorno,$colorcode){ if($color==$colorno){ echo"カラー一致しました<br />"; $color=$colorcode; }else{ echo"一致しません"; echo"カラーは $color カラーナンバーは $colorno カラーコードは $colorcode <br />"; } } colorsikibetu("1","#333333");//黒 colorsikibetu("2","#999999");//グレー colorsikibetu("3","#FF0000");//赤 colorsikibetu("4","#0000FF");//青 毎回実行されてどうやら、カラー情報がないみたいなのです。 functionの使い方が間違ってるようなのですが、 短くてすっきりした形にするには、どのようにすれば良いでしょうか。 ご教授お願いします。

  • PHP
  • 回答数1
  • ありがとう数1

みんなの回答

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

functionの中で if($color==$colorno) と使っていますが、function中に$colorがどこからも与えられていません。 ちなみにこの手のものはいくつかやり方がありますが、たとえば 配列をつくっておくだけでも、組み合わせは表現できますがどうでしょう?

bhdkgo
質問者

お礼

ヒントありがとうございました、配列で実現できました。 valueで持ってきたものを添字にして、キーと値を格納する方法で実現できました。

bhdkgo
質問者

補足

お返事ありがとうございます。 配列ですが、全く考えても見ませんでした…。 どのように書くと効率がよさそうでしょうか。 大変お手数おかけしますが、ご教授いただけますとありがたいです。

関連するQ&A

  • チェックボックスの初期選択と選択保持

    複数のチェックボックスのうちどれかを初期選択させ、ボタン押下後は選択保持をさせたいです。 片方のみならできるのですが、どなたかご教授いただけるとうれしいです。 現在のソースはこんな感じになっていて選択したものの保持はできるのですが、初期選択ができていません。よろしくおねがいします。 <html> <body> <form name="form" method="post"> <?php test1() ?> test1 <?php test2() ?> test2 <?php test3() ?> test3<br><br> <input type="submit" name="button" value="button"> </form> <?php function test1(){ if ($_POST['test1']){ echo "<input type=\"checkbox\" name=\"test1\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test1\">"; } } function test2(){ if ($_POST['test2']){ echo "<input type=\"checkbox\" name=\"test2\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test2\">"; } } function test3(){ if ($_POST['test3']){ echo "<input type=\"checkbox\" name=\"test3\" checked>"; }else{ echo "<input type=\"checkbox\" name=\"test3\">"; } } ?> </body> </html>

    • 締切済み
    • PHP
  • php $_SESSIONで値が消える。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? どうぞよろしくお願い致します。           記 <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['email'] = $_POST['email']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['email'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!DOCTYPE html> <html lang="ja"> <head> </head> <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <form method=post> お名前(ニックネーム)<br> <input type="text" name="name" value="<?php echo $_SESSION['name'] ?>"><br> Eメール<br> <input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"><br> カテゴリー<br> <input type="text" name="category" value="<?php echo $_SESSION['category'] ?>"><br> 本文<br> <textarea style="font-size:1.5em;" cols="30" rows="80" name="message"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" /> </form> <?php }else if( $mode=='confirm'){ ?> <!--確認画面--> <form method="post"> <?php echo $_SESSION['name']?><br> <?php echo $_SESSION['email']?><br> <?php echo $_SESSION['category']?><br> <br> <?php echo nl2br($_SESSION['message'])?><br> <input type="submit" name="back" value="戻る"/> <input type="submit" name="send" value="送信"/> } </form> <?php } else { ?> <!--完了画面--> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • functionの中にfunction?

    functionの中にfunctionの関数を読み込みたいのですが そのようなことはphpで可能でしょうか? ソースは以下のようになっております。 // 実行 hoge1(); hoge2(); function hoge1() { if (!$_POST["submit"]) { foreach($_POST as $k => $v) { if(get_magic_quotes_gpc()) { $v=stripslashes($v); } $v=htmlspecialchars($v); $array[$k]=$v; } extract($array); } } function hoge2() { echo <<<EOM ~~表示させる文章など~~ EOM; foreach ($array as $key => $val){ echo "<input type=\"hidden\" name=\"$key\" value=\"$val\" />\n"; } } 具体的にはhoge1のextract($array);をhoge2の$arrayに入れて foreachで出力させたいのですがどのようにすればできますでしょうか?

    • 締切済み
    • PHP
  • php $_SESSIONでデータが残らない。

    いつもお世話になり誠にありがとうございます。 標記の件。 インプット画面ー>確認画面ー>戻るー>インプット画面 インプット画面に戻った時、どうしても最初のインプット画面で打った内容が消えてしまいます。 プログラムを診て、誤りを指摘して頂けないでしょうか? 今度はCSSなども書きます。 どうぞよろしくお願い致します。 記 <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['email'] = $_POST['email']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['email'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!DOCTYPE html> <html lang="ja"> <head> <meta charset="utf-8"> <meta http-equiv="content-type" content="text/html" charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>ブログ</title> <meta name="description" content="このWebサイトは、初めてHTMLで作るブログページです。"> <link rel="stylesheet" href="./css/style.css"> <style> body{ width: 100%; max-width: 800px; margin-top: auto; margin-left: auto; margin-right: auto; background-color: rgb(71, 133, 157); padding: 10px; text-align: center; } div{ background-color: rgb(247, 248, 245); padding: 2em; } script{ margin-top: 12em; } p { margin-left: 2em; text-align: left; font-size: 25px; font-weight: bold; color: rgb(10, 10, 10); } form { font-size: 25px; font-weight: bold; color: blue; } input { font-size: 25px; margin:auto; } </style> </head> <body> <div class="v_line_fix"> <h1>Blog K・T</h1> <h2><a href="index.html">トップページ</a></h2> <?php if( $mode=='input'){ ?> <form method=post> お名前(ニックネーム)<br> <input type="text" name="name" value="<?php echo $_SESSION['name'] ?>"><br> Eメール<br> <input type="email" name="email" value="<?php echo $_SESSION['email'] ?>"><br> カテゴリー<br> <input type="text" name="category" value="<?php echo $_SESSION['category'] ?>"><br> 本文<br> <textarea style="font-size:1.5em;" cols="30" rows="80" name="message"><?php echo $_SESSION['message'] ?></textarea><br> <input type="submit" name="confirm" value="確認" /> </form> <?php }else if( $mode=='confirm'){ ?> <!--確認画面--> <form method="post"> <?php echo $_SESSION['name']?><br> <?php echo $_SESSION['email']?><br> <?php echo $_SESSION['category']?><br> <br> <?php echo nl2br($_SESSION['message'])?><br> <input type="submit" name="back" value="戻る"/> <input type="submit" name="send" value="送信"/> } </form> <?php } else { ?> <!--完了画面--> <?php } ?> </body> </html>

    • ベストアンサー
    • PHP
  • 外部テファイルを使って未入力に対しての背景色を変える

    これが外部ファイル(CheckUtil.js)です。 //入力データ(テキストデータやテキストエリア)の必須チェック function requiredCheck(strVal,strErr) { var total = strVal.length; var flag = true; for (var i=0; i<total; i++) { if((strVal.type == 'text')||(strVal.type == 'password')){ strVal.style.backgroundColor = ''; if (strVal.value == "") { strVal.className = 'error_field'; flag = false; } if (strVal.value) { strVal.className = ''; } } } if (! flag)return strErr + "は必須入力です \r"; }else{ return ""; } } このファイルはPHPファイルです。外部ファイルで分けないでやったときは動いたのでそのままにしています。 <script language="JavaScript" src="CheckUtil.js" type="text/javascript" charset="EUC-JP"></script> <style //背景色は#FF8080に設定 type="text/css"><!--.error_field{background-color:#FF8080;}--></style> <script type="text/javascript"> <!-- function chk(part){ strErr = ""; strErr += requiredCheck(part.name.value,"なまえ"); strErr += requiredCheck(part.pass.value,"パス"); if(strErr == ""){ return true; }else{ window.alert(strErr); return false; } } //--> </script> </head> <body> <!-- {/literal} --> <br> <form action="<?php echo $PHP_SELF; ?>" method="POST" name="fm" onsubmit="return chk(this)"> <input type="text" name="name" size="40"> <br> <input type="password" name="pass" size="40"> <br> <br> <input type="submit" name="submit" value="ボタン"> <br> </form> <br> <br> <center></center>

  • 色をラジオボタンで選択

    エレメントでボタンを押すと色を変えるJavaScriptです。 検索をしながら ボタンで一度変えることはできるようになりましたが <script type="text/javascript"> function effect() { var element = document.getElementById("sample"); element.style.color = '#000000'; } </script> <button onclick="effect()">チェンジ</button> <span id="sample">■□□■</span> ラジオボタンで選択するようにしたいのですが どのようにすればよいでしょうか? うまくいく方法を教えてください。 ブラウザーはGoogle Chrome最新版です。 どうしてもできなければ Firefoxでもかまいません。 <script type="text/javascript"> function effect() { var element = document.getElementById("sample"); element.style.color = '#000000'; } </script> <input type=radio name="colorcode" value="#000000" checked>黒 <input type=radio name="colorcode" value="#ff0000">赤 <input type=radio name="colorcode" value="#00ff00">緑 <span id="sample">■□□■</span>

  • phpがうまく動きません。

    phpで4択のクイズを作りたいのですが 正解のラジオボタンを選んでもカウントされないのと 答え合わせを押すと正解だった箇所を赤く表示したいのですがなんて書けばよいのか どこにそのコードを入れるのかよくわかりません <状態> ・5つのデータがmyadminに保存されています ・データベースの内容は表示されます。 ・答え合わせを押すと正解のラジオボタンを選んだ数が表示されるようにしたいです ・保存ボタンは閉じても答えを保存するためにあります ・q_noは8ケタ固定であり、左から5つ目までは固定であと3桁は999問入れられるよう設定してあります ・q_ansはデータベースに答えの値(1~4)が入れてあります ・データベース名はproblemです <省略> $res_set = mysql_query($sql); while ($row=mysql_fetch_array($res_set)){ ?> <form method="POST" action="H2102.php"> <?php echo $row['q_no'] . " "; ?> <br> <?php echo $row['q_text'] . " "; ?><br><br> <br> <?php echo "ア"; ?> <input type="radio" name="q_ans" value="1"> <?php echo $row['q_point1'] . " "; ?> <br><br><br> <?php echo "イ"; ?> <input type="radio" name="q_ans" value="2"> <?php echo $row['q_point2'] . " "; ?> <br> <br><br> <?php echo "ウ"; ?> <input type="radio" name="q_ans" value="3"> <?php echo $row['q_point3'] . " "; ?> <br><br><br> <?php echo "エ"; ?> <input type="radio" name="q_ans" value="4"> <?php echo $row['q_point4'] . " "; ?> <br><br><br> <br> <input type = "submit" name="save" value="保存"> <?php if(isset($_POST['save'])){ $_SESSION['save'] = $_POST['q_ans']; //保存すると選んだ回答を保存 } ?> <?php } ?> </form> <form method="POST" action="H2102.php"> <input type = "submit" name="ans" value="答え合わせ"> <?php //正解かどうかをチェック if(isset($_POST['ans'])){ $a = $_SESSION['a']; if($row['q_no'] == $_POST['q_no'] && $_POST['q_ans'] || $_SESSION['save'] == $row['q_ans'] ){ $_SESSION['a'] = $a + 1; //q_noが一致かつ保存した値または選んだ解答(値)が一致していれば1問につき1つカウントする $a = $_SESSION['a']; } echo $a; //カウントされているかをチェック } ?> <input type = "submit" name="del" value="カウント初期化"> <?php if(isset($_POST['del'])){ session_unset(); } ?> </form> <br> <?php } ?> 足りない情報があれば追記します

    • 締切済み
    • PHP
  • リセットボタンとエラー画面

    PHPを始めて1週間ほどのド初心者です。 本を買って勉強中ですが、本やネットでも調べてもわからないので 質問させて頂いています。 あるところからサンプルを引っ張ってきてフォームを作るところです。↓ session_start(); $errors = 0; if(!isset($_SESSION["form1"])){ $_SESSION["form1"] = "input"; $error["name"]["message"] = "<br><font color=\"#FF9900\">《必須》</font>"; $error["birt"]["message"] = ""; $error["sexx"]["message"] = "<br><font color=\"#FF9900\">《必須》</font>"; $name1 = ""; $name2 = ""; $sex = ""; $year = ""; $mon = ""; $day = ""; }else{ $name1 = stripslashes( $_POST["name1"] ); $name2 = stripslashes( $_POST["name2"] ); if((0==strlen($name1))&&(0==strlen($name2))) { $error["name"]["message"] = "<br><font color=\"#FF0000\">《名前が未入力です》</font>"; $errors++; } elseif(0==strlen($name1)) { $error["name"]["message"] = "<br><font color=\"#FF0000\">《性が未入力です》</font>"; $errors++; } elseif(0==strlen($name2)) { $error["name"]["message"] = "<br><font color=\"#FF0000\">《名が未入力です》</font>"; $errors++; } else { $error["name"]["message"] = ""; } $year = $_POST["year"]; $mon = $_POST["mon"]; $day = $_POST["day"]; if( (($year<1900)||(date("Y")<$year)) || (($mon<1)||(12<$mon))|| (($day<1)||(31<$day)) ) { $error["birt"]["message"] = "<br><font color=\"#FF0000\">《生年月日が無効です》</font>"; $errors++; } else { $error["birt"]["message"] = ""; } $sex = $_POST["sex"]; if(!isset($_POST["sex"])) { $error["sexx"]["message"] = "<br><font color=\"#FF0000\">《性別が未選択です》</font>"; $errors++; } else { $error["sexx"]["message"] = ""; } if(0 == $errors){ $_SESSION["form1"] = "checked"; } } ?> ~~~~~~~中略~~~~~~~~ echo "<tr><td colspan=2 align=center><input type=submit name=submit value=\"申 込\">  \n". "<input type=reset name=cancel value=\"クリア\"></td></tr>\n". "</table> ~~~~~~~以降略~~~~~~~ 配布されているサンプルなのでこのままUPすれば正常に動きます。 フォームに何も入力しないで送信ボタンを押すとエラー表示されます。 何か入力をしてリセットを押すと、入力された値はリセットされて消えますが、 エラー表示がそのままになってしまいます。 つまり、エラー表示されたままなので、これをリセットボタンを押すことにより 初期の(エラー表示されていない)状態に戻したいのです。 $reset = true; などの例文を拝見しても難しくて解決できません(T-T) 何か良い方法があったら教えて下さい。 宜しくお願いします。

    • 締切済み
    • PHP
  • htmlとphpのデータ受け渡し???

    いつもお世話になり誠にありがとうございます。 標記の件。 まだ、ボク自身、解っていないようです。 htmlとphpのソースコードを提示します。 どうすればデータの受け渡しができるか? 添削してくださらないでしょうか? html <!--入力画面--> <form action = "./Blog.php" method = "get"> <label class="label" for="name">お名前(ニックネーム)</label> <center><input id="name" type="text" name="name"></center> <label class="label" for="e-mail">メール</label> <input id="e-mail" type="e-mail" name="e-mail"> <label class="label" for="category">カテゴリー</label> <input id="category" type="category" name="categoryl"> <label class="label" for="message">本文</label> <textarea name="area1" style="color:rgb(8, 8, 8); font-size:100%;" cols="50" rows="30"></textarea><br> <input type="submit" name="confiem" value="確認"> </form> CSS <meta charset="utf-8"> <?php session_start(); $mode = 'input'; if( isset($_POST['back']) && $_POST['back'] ){ //何もしない } else if( isset($_POST['confirm']) && $_POST['confirm'] ){ $_SESSION['name'] = $_POST['name']; $_SESSION['e-mail'] = $_POST['e-mail']; $_SESSION['category']= $_POST['category']; $_SESSION['message'] = $_POST['message']; $mode = 'confirm'; } else if( isset($_POST['send']) && $_POST['send'] ){ $mode = 'send'; } else { $_SESSION['name'] =""; $_SESSION['e-mail'] =""; $_SESSION['category']=""; $_SESSION['message'] =""; } ?> <!--確認画面--> <?php if( $mode == 'input' ){ ?> お名前(ニックネーム)<?php echo $_POST['name'] ?><br> Eメール<?php echo $_POST['e-mail'] ?><br> カテゴリー<?php echo $_POST['category'] ?><br> 本文<br> <?php echo nl2br($_POST['message']) ?><br> <input type="submit" name="back" value="戻る" /> <input type="submit" name="send" value="送信" /> <?php } else { ?> <!--完了画面--> <?php } ?> 上記の通りです。 全然ダメだと思います。 添削のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • PHP
  • このPHPコードのエラー原因を教えてください。

    いつもお世話になっています。 現在PHPの勉強をしているのですが、プログラムがエラーとなり、原因が分からず困っています。 原因の分かる方がいらっしゃれば、教えて頂きたいと思います。 状況は以下の様になっています。 ・PHPのversionは5.2.0、XAMPPはv3.2.1を使用しています。 ・Aptanaでは一番最後のcreate_radio($c, $d)関数で構文エラーが発生しているので、問題はこの辺りにあるのではと考えてはいます。 ・return <<< __end__ ~ __end__;の記述方法がPHPの設定上できないのかもしれません。 (echo <<< ~も使用できませんでした。) ・以下コードです <?php show_header(); show_form(); show_footer(); function show_header(){ $color = "white"; if(isset($_GET["Name_Of_Color"])){ $color = $_GET["Name_Of_Color"]; $color_html = htmlspecialchars($color); echo "<html><body bgcolor='color_html'>"; }else{ echo "<html><body bgcolor='white'>"; } } function show_footer(){ echo "</body></html>"; } function show_form(){ $colors = array("赤色" => "red", "青色" => "blue", "白色" => "white"); echo "<form>"; foreach($colors as $a => $b){ echo create_radio($a, $b); } echo "<input type='submit' value='変更'>"; echo "</form>"; } function create_radio($c, $d){ return <<< __end__ <input type="radio" id="$c" name="Name_Of_Color" value="$d"> <label for="$c">$c</label> __end__; } ?> それでは、よろしくお願いします。

    • 締切済み
    • PHP

専門家に質問してみよう