• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:functionについて)

functionについて

このQ&Aのポイント
  • htmlのフォームから時間を入力して、その値に”時~”をつけてmysqlに登録したい
  • 普通に値を代入すると登録されるが、function関数を使用すると値が入力されない
  • 何が悪いのかを教えてください

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

  • ベストアンサー
  • kabinett
  • ベストアンサー率60% (9/15)
回答No.3

No.2へのお礼内の質問に対しての回答です。 $aaaへ"時~"を代入し、それを関数の外でも使おうとするため、参照渡しが必要になります。 値渡しの場合呼び出し元の変数から関数の引数へ値が代入されて渡されます。 関数を使わないとするとwork_time ($mon0,"mon0")の部分は $aaa=$mon0; $bbb="mon0"; $aaa = $_POST[$bbb]; if ($aaa != ""){ $aaa .="時~"; } このような構文と等価になります。 これ以降で$mon0を使ったとしても、"時~"が追加されてるのは$aaaなので、値が変更されていないことになります。 一方参照を使った場合のwork_time ($mon0,"mon0")の部分は $bbb="mon0"; //$bbbは参照を使わないとする $mon0 = $_POST[$bbb]; if ($mon0 != ""){ $mon0 .="時~"; } と等価の構文になります。関数内で名前が$aaaになっていますが、使われるのは$mon0の内容なので$mon0が変更され以降の行で$mon0を使った場合にも変更された値が使用できます。 また、上の文では$bbbは参照渡しにしていないので値が代入されていますが、関数内で$bbbの内容を変更していないので問題ありません。 参照渡しで呼び出し元の変数の値を変更できる利点は、関数で呼び出し元の変数の値を変更されてしまうという欠点もあるので、使用する場合には注意してください。 (今回の例であれば、関数呼び出し前に$mon0に入っていた内容は、関数内で上書きされて消えます) 例示の文にあんまり変更を加えずに回答しようとしてしまったため参照渡しで回答しましたが、実際私が自分で書く場合であれば、$aaaの値を戻り値で戻すように書きます。関数を function work_time($bbb){ $aaa = $_POST[$bbb]; if ($aaa != "") { $aaa .="時~"; } return $aaa; } として、使うときは、 $mon0 = work_time("mon0"); とします。 戻り値を使ったほうがどこで$mon0を変更してるか分かりやすくなると思います。

noname#19843
質問者

お礼

kabinett 様 迅速な回答と丁寧な返答有難う御座いました。<(_ _)> とても勉強になりました! 機会がありましたら、またよろしくお願いいたします。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • kabinett
  • ベストアンサー率60% (9/15)
回答No.2

引数が値渡しになっているため、呼び出し元の変数(この場合は$mon0)の値は変更されません。 Function側で呼び出し元の変数の値を変更したい場合は、引数を参照渡しにしましょう。 function work_time (&$aaa,$bbb){ //$aaaの前に&を追加 $aaa = $_POST[$bbb]; if ($aaa != ""){ $aaa .="時~"; } } work_time ($mon0,"mon0"); //こっちは変わらない

参考URL:
 
noname#19843
質問者

お礼

kabinett 様 有難う御座いました。 今回は、$aaaに”時~”を代入しているから、 参照渡しにしないと駄目と言う事でしょうか?

全文を見る
すると、全ての回答が全文表示されます。
noname#86752
noname#86752
回答No.1

これでどうでしょう? function work_time($bbb){ $aaa = $_POST[$bbb]; if ($aaa != "") { $aaa .="時~"; } } work_time("mon0");

noname#19843
質問者

補足

この場合は、どこで$aaaに値を代入するのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ExcelのVBA。Staticな変数について

    あるプロシージャやfunctionで定義したstaticな変数は、その定義したsubやfunctionで有効です。今回、例えば、static a as integer とSub AAA 内で、定義し、その AAA が呼び出す BBB という ユーザーフォームの中でも staticな変数である a に値を代入したり、変更したりし、その後 sub AAAにまた入ったとき、BBBで変更した内容を保持することができるのでしょうか。

  • VBAでif文にorを使う場合の仕様

    http://www.relief.jp/itnote/archives/vba-if-or.php このページにも書かれてあるのですが、 Sub textss() aaa = 2 If aaa = 0 Or 1 Then bbb = 1 ElseIf aaa = 2 Then bbb = 2 End If ccc = bbb End Sub を実行すると cccには2が代入されそうなのですが、実際には1が代入されてしまいます。 If aaa = 0 Or aaa = 1 Then と入力する必要があります。 それでは、 If aaa = 0 Or 1 Then とした時、プログラムではどういう処理がなされているのでしょうか?

  • PHPでのフォームの受け渡しについて

    PHPの勉強中の者です。 PHPでフォームの受け取りの時に入力データのIDを受け取り、出力させるやり方について模索しています。 具体的には以下の通りです。 例えば、セレクトフォームのIDをそれぞれAAAとBBBにします。 ーーーーーーーーーー [フォーム内] <form action="file.php" method="post" name=""> <select name="data1" size="1"> <option value="0">選択する</option> <option value="100" id="AAA" >aaa</option> <option value="200" id="BBB" >bbb</option> </select></form> ーーーーーーーーーー [出力結果] AAA は aaa です。 BBB は bbb です。 ーーーーーーーーーー 選択された aaa の受け取りは、 $data1[] = $_POST['data1']; これで出来ると思いますが、idを受け取り出力する方法が分からないのです。 どなたかわかる方ご教授お願い出来ますでしょうか? 宜しくお願いします。

    • 締切済み
    • PHP
  • PL/SQL 複数件同じ値で更新する方法

    functionを作成しています。 AAA  BBB     BBB  ==== ==== → ====  001  100      200 001  101       200 002  102      201 003  103      202 update TABLE_NAME set BBB = function (BBB); のように呼び出されています。 現在はfunctionで連番がふられているため、BBBのカラムは 全て違う値に更新されてしまうのですが、 AAAで同じ値のものには同じ値を返しBBBのカラムを更新したいのですが どのように作成したらいいのか教えてください。お願いします。

  • Access Nullの評価について

    お世話になります。 Access2010 フォームを作成しました。 「登録」ボタンが押されたら、フォーム上の値の変更有無をチェックし 変更がなければ何もせず、変更があった場合のみ該当レコードを更新 します。 そこで質問ですが、  If Me.AAA = Me.BK_AAA And Me.BBB = Me.BK_BBB And Me.CCC = Me.BK_CCC Then    '変更が無ければ何もしない  Else    該当レコードにAAA~CCCの値を上書き  End If としておりますが、例えばMe.CCCとMe.BK_CCCにそれぞれNullが 入っている場合、Elseになってしまいます。 ※M.BK_CCCは変更前の値が入っている 恐らく、  If Me.AAA & "@" = Me.BK_AAA & "@" ・・・ のように文字をくっつけて評価させればよいかと思うのですが、 そもそもNullの場合は、イコールで評価出来ないのでしょうか。 ご教示の程、宜しくお願い致します。

  • POSTデータをフォームに残す方法

    同一フォーム内PHPへ、フォームをポストした際、 フォーム入力チェックを行い誤りがあれば、 元のフォームに入力したデータを残したいのですがどのようにすればよいでしょうか? 結果によって分岐せずに、フォームに必ず値が残ると言う方法でもかまいません。 //ここから <form method="post" action =""> <table> <tr> <td><input name="title" size="20"></td> <td><input type="submit" name="send" value=" 登録 "></td> </tr> </table> </form> <?php if(len_check($_POST['title'])>8){ echo "文字数オーバーです。"; //フォームに値を戻す処理。 }else{ echo "入力した文字={$_POST['title']}"; //フォームの値は破棄。 } function len_check($s){ return strlen(bin2hex($s)) / 2; } ?>

    • ベストアンサー
    • PHP
  • explodeと条件分岐

    次のようなプログラムを描きました。 /////////////////////////////////////////////////////////////// $A1 = $_POST['A1']; $B1 = $_POST['B1']; $fp = fopen("data.dat", "a+"); flock($fp, LOCK_EX); while($line = fgets($fp)){  list($A2,$B2) = explode("^", $line);  if($A1 == $A2 && $B1 == $B2) echo "成功";  else echo "ログイン失敗"; } //////////////////////////////////////////////////////////////// ここでdata.datの内容は…  AAA^AAA  BBB^BBB  CCC^CCC とします。 フォームから、A1=AAA,B1=BBBを与えたとき、 「成功」が出ると思っていたのですが、「失敗」と出てしまいます。 いろいろ考えてみたのですが、解決に至らず質問することにしました。 ご指摘、お願いします。 尚、フォームから正確に入力されていることと、 分岐のところを「if($A1 == $A2)」とすると、 正常に動くことは確認できました。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • FLASHでHPのメニュー画面

    FLASHを使って、ホームページのメニューを作りたいと思っています。 そこで、SONYのホームページのようにボタンを押すと、メニュー画面がスクロールして表示され、もう一度ボタンを押したらフレームが逆再生されてメニュー画面が消えるようにしたいと思い下記のように作成しました。 (suzuki-_-さんの方法を参考にして作らせていただきました。QNo.2540039) MC1に this.onEnterFrame=function(){ if(aaa%2==0){ this.prevFrame(); }if(aaa%2==1){ this.nextFrame(); } } ボタン1に on(press){ aaa=aaa+1; } としていました。 これでうまく動いていたのですが、ここでボタン2を作り、もう一つ同様のアクションをするものを作ったのですが、この場合MC1が表示されている場合、MC1を引っ込めてから、MC2を実行しようとして、以下のようにしたのですがうまく動作しません。どのようにしたらいいかアドバイスをお願いします。 MC1 this.onEnterFrame=function(){ if(aaa%2==0){ this.prevFrame(); }if(aaa%2==1){ this.nextFrame(); } } ボタン1 on(press){ aaa=aaa+1; if(bbb%2==1){ bbb=bbb+1; } } MC2 this.onEnterFrame=function(){ if(bbb%2==0){ this.prevFrame(); }if(bbb%2==1){ this.nextFrame(); } } ボタン2 on(press){ bbb=bbb+1; if(aaa%2==1){ aaa=aaa+1; } } これをメインのフレームに配置したのですがうまく動作しませんでした。 一応調べてみると、変数は定義したMCの中だけでしか有効ではないらしいということがわかりました。どうすれば、目的の動作が動くか教えていただきたいです。よろしくお願いします。

  • PL/SQL)Functionの引数(文字列)をWHERE文に記述する方法

    PL/SQLで、Functionの中で実行するselect文のWhereに、Functionの 引数で受けとった値をセットしようとしています。 この引数が文字列(VARCHAR2型)の場合、どのようにWHEREで、記述したらよいのでしょうか? ご教授のほどをよろしくお願いします。 CREATE OR REPLACE FUNCTION Fn_TBL_AAA (psCODE IN VARCHAR2) IS CURSOR TBL_AAA_CUR IS SELECT * FROM TBL_AAA WHERE BBB = psCODE ; TBL_AAA_REC TTBL_AAA_CUR%ROWTYPE;       :       : ※上記のように記述すると、実行ではエラーが発生しないのですが、  取得したい結果が返ってきません。TABLE(TBL_AAA)のBBBは、  VARCHAR2なので、通常のSQL*PLUSのSELECT文ではBBB = psCODE  はBBB = 'psCODE'のように [']で括るのですが、PL/SQLの  FUNCTION内ではどのように記述すればよいのかが  わかりません。 以上、よろしくお願いいたします。

  • <aタグで変数に文字を代入

    JavaScriptをはじめて勉強し始めました。 今、変数のやり取りについて勉強しているのですが、 http://aaabbb.com/aaa/bbb.zip というアドレスがあったとして、 <script type="text/javascript"> <!-- function out(){ var urldata; // --> </script> 上の『urldata』にhttp://aaabbb.com/aaa/bbb.zipを代入したいのです。 でも、タダ代入するだけでなく、 <a href=""></a>で代入したいのです。 つまり、リンクをクリックすると、http://aaabbb.com/aaa/bbb.zipがurldataに代入されるようにしたいのですが・・・ どう書けばいいのかが分かりません。 ためしに書いてみても、全然代入されませんでした。 <a onclick="urldata='http://aaabbb.com/aaa/bbb.zip';out()" href="#">テスト</a> すみませんが、ご教授ください