スレッド表示 | フラット表示〕 全トピック 920 件中 822 番目 次≫ ≪前

PHPのサブルーチン化

created: 2003-08-18 22:17 | modified: 2003-08-29 11:44 | reply: 16

[505] PHPのサブルーチン化

user: たろ- | created: 2003-08-18 22:17
お世話になります。
内部サブルーチン と 外部サブルーチンありますが、ステップ数が長くなりそうなので教えてください。

まず
内部サブルーチンの場合は、同一ファイル内で
Sub Test{} のような記述でいいのでしょうか?

でもあまり長くなるとスクロールが大変なので外部サブルーチンの方がよいのですが
CALL Test のような記述できるのでしょうか? 
例えば、登録、修正、削除 を行うのに
insとupdとdelとパラメータをHiddenで飛ばして振り分けたいのです。
reply: 506 返信 編集 削除

[506] ユーザー定義関数

user: ゆうじ | created: 2003-08-19 04:09
こんばんは。

サブルーチンにあたるのは、
PHPでいうところのユーザー定義関数でしょうね。

▼PHPマニュアル 関数 - ユーザー定義関数
http://www.php.net/manual/ja/functions.php


PHPでは内部と外部という使い分けはなされず、
どのような関数を呼ぶ場合も

 functionname()

のように記述します。ただし、
呼び出す関数が他のファイルに記述してある時は、
呼び出す側のスクリプトであらかじめ、
該当するファイルを読み込んでおく必要があります。、

include_once("xxxx.phps");

これは「 xxxx.phps をここに読み込んでね♪」という命令です。
include_once の仲間はいくつかあります。
エラーの処理や重複するファイルは読み込まないなど、
微妙に動作が異なりますので使い分けています。

include()
require()
require_once()

▼PHPマニュアル include_once
http://www.php.net/manual/ja/function.include-once.php


> 例えば、登録、修正、削除 を行うのに
> insとupdとdelとパラメータをHiddenで飛ばして振り分けたいのです

ここのところがよくわかりませんでした。
Hiddenで飛ばすということは、
『 次のスクリプトに処理を引き渡す 』ってことですので。
ユーザー定義関数(サブルーチン?)は関係ないかもしれません。

もう少し情報くださいね。
Parent: 505  reply: 507 返信 編集 削除

[507] 訂正:include

user: ゆうじ | created: 2003-08-19 12:12
たろーさん、なんとなくわかってきました。

POSTで受け取った値によって処理を分岐させようと考えてるんですね。
その時、スクリプトが長くなるので処理ごとにファイルをわけたい。
で、その利用方法も知りたいと。

ご質問はこれであってます?


そういうことならば、
サブルーチンやユーザー定義関数は関係ありませんでした。

「外部のファイルをスクリプト内に読み込む」という処理になります。
先に説明した include 命令を使います。

以下のようにすれば $_POST['action'] の値によって
読み込まれるファイルが変わります。


▼ 処理分岐するスクリプト----------
<?php

if( $_POST['action'] == 'ins' ) {
include("ins.php");
} elseif( $_POST['action'] == 'upd' ) {
include("upd.php");
} elseif( $_POST['action'] == 'del' ) {
include("del.php");
} else {
echo "ERROR:無効なコマンドが指定されました。";
}

?>


で、読み込まれる側の
ins.php
upd.php
del.php
それぞれに処理内容を記述しておきます。

こんなんでいかがでしょう。
Parent: 506  reply: 533 536 返信 編集 削除

[533] そうなんです。inclideはPHPでも使用可能なんですね。

user: たろー | created: 2003-08-24 13:34
ゆうじさん ありがとうございます。
私も考えて見たのですが、JavaScriptのModeエラーと出ます。間違えているのでしょうか?

実行後、確認PHPに飛ぶようにしています。
確認PHPでは、ins,upd,delを判断してSQLを実行(INSERT,UPDATE,DELETE)するだけの処理です。


<?php
//MySQL接続情報

//DB接続

//DB選択
?>

<html>
<head>
<title>検索メンテナンス</title>

<SCRIPT LANGUAGE="JavaScript">
function doSubmit(mode,bukncode){
if(mode=='udp'){
document.MyForm.mode.value='udp';
}else{
document.MyForm.mode.value='del';
}
document.MyForm.frm_bukncode.value=bukncode;
document.MyForm.action='kakunin.php';
document.MyForm.submit();
}
</SCRIPT>
</head>

<style type= "text/css">





<?php

$kekka = "";
while ($row =@mysql_fetch_array($result,MYSQL_ASSOC)) {
$kekka .= "<FORM NAME=\"MyForm\" method=\"POST\">";
$kekka .= "<INPUT TYPE=\"hidden\" NAME=\"mode\">";
$kekka .= "<INPUT TYPE=\"hidden\" NAME=\"frm_bukncode\">";
$kekka .= "<center>";
$kekka .= " <table width =\"700\" cellspacing =\"0\" cellpadding =\"2\" border =\"1\">";
$kekka .= " ";
$kekka .= " <tr>";
$kekka .= " <td bgcolor =\"aliceblue\" width =\"50\">処 理</td>";
$kekka .= " <td width=\"80\" heigth=\"60\" rowspan=\"4\"><img src=" . $row["image"] . "></td>";
$kekka .= " <td bgcolor =\"aliceblue\" width =\"100\">物件コード</td>";
$kekka .= " <td bgcolor =\"white\" width =\"200\"><a href=\"meisai.php?";
$kekka .= "bukncode=" . $row["bukncode"] . "\" TARGET=\"_NEW\">";
$kekka .= $row["bukncode"] . " </a></td>";
$kekka .= " <td bgcolor =\"aliceblue\" width =\"100\">物件名</td>";
$kekka .= " <td bgcolor =\"white\" width =\"200\">" . $row["buknname"] . "</td>";
$kekka .= " </tr>";
$kekka .= " ";
$kekka .= " <tr>";
$kekka .= " <td>";
$kekka .= "<INPUT TYPE=\"button\" VALUE=\"修正\""
." onClick=\"doSubmit('upd','". $row["bukncode"] . "');\">";
$kekka .= "<INPUT TYPE=\"button\" VALUE=\"削除\""
." onClick=\"doSubmit('del','". $row["bukncode"] . "');\">";
$kekka .= "</td>";

$kekka .= " <td bgcolor =\"aliceblue\" width =\"100\">市郡町村</td>";
$kekka .= " <td bgcolor =\"white\" width =\"200\">" . $row["citytown"] . "</td>";
$kekka .= " <td bgcolor =\"aliceblue\" width =\"100\">地区</td>";
$kekka .= " <td bgcolor =\"white\" width =\"200\">" . $row["tiku"] . "</td>";
$kekka .= " </tr>";
$kekka .= " ";
$kekka .= " <tr>";
$kekka .= " <td bgcolor =\"aliceblue\" width =\"100\"> </td>";
$kekka .= " <td bgcolor =\"aliceblue\" width =\"100\">金額(円)</td>";
$kekka .= " <td bgcolor =\"white\" width =\"200\">" . number_format($row["king"],0,'.-',',') . "</td>";
$kekka .= " <td bgcolor =\"aliceblue\" width =\"100\">駅・バス亭</td>";
$kekka .= " <td bgcolor =\"white\" width =\"200\">" . $row["ekte"] . "</td>";
$kekka .= " </tr>";
$kekka .= " ";
$kekka .= " </table>";
$kekka .= "</center>";
$kekka .= "</form>";
$kekka .= "<br>";
$kekka .= "";
}
//結果セットの開放
//mysql_free_result($result);
//DB切断
mysql_close($conn);

if($kekka){
echo $kekka;

}else{
//----echo "<B>検索条件に該当する物件は存在しませんでした</B>\n";
}

?>


Parent: 507  reply: 534 535 返信 編集 削除

[534] 要報告

user: ゆうじ | created: 2003-08-24 15:16
先ずは、[507] 訂正:include のご報告をお願いします。
そうでないと、返事を無視したのだと思いますよ。

507> ご質問はこれであってます?

この時点で私には、たろーさんが、
何がわからないのかがわかってないので、
推測で答えているにすぎません。
まずはこのご報告をください。

いちどここらへんをご覧頂くことをオススメします。
http://www.hyuki.com/writing/techask.html

その間に、[533]のお返事を考えておきます。
Parent: 533  reply: 537 返信 編集 削除

[537] 533のエラー内容の補足なのですが

user: たろー | created: 2003-08-24 15:57
補足なのですが、

選択画面より検索実行で次の照会一覧保守画面<itiranmnt.php>を表示させますがそれぞれのレコード毎に修正と削除ボタンがあり、修正を押すとkakunin.phpのUPDATEへ削除を押すとDELETEへパラメータを渡すという流れです。

PHPではボタン制御は無理だと思い、本を参考にJavaScriptを記述してみました。
本のとおりなのでJavaScriptエラーでないはずなんですが?なんでだろうです。

エラー行10行目をみると
10行 $conn = mysql_connect($host,$username,$password)
11行 or die ('MySQL Connect error = ' . mysql_error());

の箇所なんですが、メッセージの内容は、JavaScriptっぽいです。


ERROR Message
--------------------------------------------------------------
ランタイムエラーが発生しました。
デバッグしますか?

行 10
エラー;document.MyFormはNullまたはオブジェクトではありません。
--------------------------------------------------------------
Parent: 534  reply: 538 539 返信 編集 削除

[538] タイミングと状態

user: ゆうじ | created: 2003-08-24 18:38
まだ判断する材料が足りないのですが、

エラーメッセージはダイアログで表示されるんですよね?

この時ブラウザの表示はどのような状態でしょうか?

このエラーメッセージが出るタイミングは、
itiranmnt.phpに処理が移った時で間違いないでしょうか?
Parent: 537  reply: 541 返信 編集 削除

[541] yagiさんゆうじさんこんにちは。こんな感じです。

user: たろー | created: 2003-08-25 09:24
はい。ダイアログ.…通常WindowsのMSGBOXです。 エラー と表示されて 赤○の×マークで表示されます。

ブラウザーの表示は、変化無しです。
タイミングは押しボタンを押した直後です。

一覧PHPの表示は問題ないのですが、押しボタンを押したタイミングなのでなにか記述が悪いのかと思っているのですが.…

一覧保守画面ですがイメージはこんなものです。
修正、削除の押し実行ボタンになっています。

 ◆◆◆ 一覧メンテナンス ◆◆◆

---------------------------------
【修正】【削除】 CODE 101  青木
---------------------------------
【修正】【削除】 CODE 101  山田
---------------------------------
【修正】【削除】 CODE 102  青木
---------------------------------
【修正】【削除】 CODE 103  山本
---------------------------------
【修正】【削除】 CODE 104  鈴木
---------------------------------


現在、JavaScriptPHPでもリンクでなく、上記のような『押しボタン』処理できるのでしょうか.…

現在、
---------------------------------
【修正】【削除】 CODE 101  青木
---------------------------------
毎にFORMでくくり、<FORM>MyFrom ACTION=POST </FORM>としてHIDDENでキーであるCODEを次画面の更新処理へ飛ばすようにしています。
Parent: 538  reply: 544 546 返信 編集 削除

[544] JavaScript のしょうがないところ

user: ゆうじ | created: 2003-08-25 11:30
エラーが出るタイミングが、
ボタンをクリックした直後ということでしたので、
先に挙げていただいてたコードを簡略化したテストコードをかいて、
テストしてみましたが再現しませんでした。

ソースそのものに問題は無いようです。

ボタンを押した後は JavaScript の問題ということになりますので
エラーメッセージの、
「Nullまたはオブジェクトではありません。」
をキーワードにGoogleで検索したところ、
一番初めにそれらしき答えが出てました。

エラーの原因は
JavaScriptの仕様による現象ということになりますね。

yagiさんが例を挙げてくださったように、
今回はJavaScriptは使わない手法のほうが
得策のように思います。
Parent: 541  reply: 545 返信 編集 削除

[545] yagiさんよりヒント頂きましたが そうですね

user: たろー | created: 2003-08-25 11:39
yagiさんよりヒント頂きましたが そうですね。 今回、本からの抜粋で組み込んでみたのですが、変にするよりもPHPでまとめた方がいいですね。
ありがとうございました。
Parent: 544  返信 編集 削除

[546] JavaScriptのデバッグについて

user: yagi | created: 2003-08-25 11:59
>タイミングは押しボタンを押した直後です

JavaScriptをかじった程度なのでどこにミスがあるかはわかりませんが、
以下のページは参考になりますか?

http://free1.webdos.net/~spiritbox/err/xx13.html

>現在、JavaScriptPHPでもリンクでなく、上記のような『押しボタン』処理できるのでしょうか

?JavaScriptPHPでもなくっていうのがよくわかりませんが、
つまり、JavaScriptと連携したPHPでもアンカーを使ったGETクエリでもなく、
押しボタン(POST)で処理できるのか、という意味でしょうか?
それだったらPHPでできますよ。

<input type='mode' value='upd'>
<input type='bukncode' value='$row["bukncode"]'>

のようにすればいいと思います。
修正ボタン、削除ボタンをそれぞれ作ると大変なのでラジオボタン、あるいは選択形式にすれば簡単にmodeを振り分けられます。


いらぬつっこみかもしれませんが、
styleタグがheadタグの外側にないですか?
Parent: 541  reply: 553 返信 編集 削除

[553] スクリプトは撤廃しました。

user: たろー | created: 2003-08-28 17:43
<input type='mode' value='upd'>
yagiさんのヒントの上記の方法ですと、凹んだTEXTBOXにudpとなったのであれ? となりました。。。

そこで手法でご紹介いただいたラジオで振り分けるようにして次のPHPへパラメータの引継ぎが可能となりました。
$kekka .= "<input type=\"radio\"name=\"mode\"value=\"upd\" CHECKED><font size=\"-1\">修正</font>";
$kekka .= "<input type=\"radio\"name=\"mode\"value=\"del\"><font size=\"-1\">削除</font>";
$kekka .= "<input type=\"submit\"value=\"実行\">";
Parent: 546  reply: 563 返信 編集 削除

[563] >すいません、ミスタイプ(^^;

user: yagi | created: 2003-08-29 11:44
すいません、ミスタイプです(^^;

<input… → <hidden …

です。自分でもよくやる間違いなのですいませんでした。
Parent: 553  返信 編集 削除

[539] ちょっとつっこみ

user: yagi | created: 2003-08-25 01:43
>PHPではボタン制御は無理だと思い、本を参考にJavaScriptを記述してみました

コードを見てみるとPHPでは無理なようなことはしてないようですが?
つまり、mode値によって呼び出すPHPスクリプトを判断しているだけのようなので
あえてJavaScriptを使わなくてもできます。
つまり、

<input type="hidden" name="mode" value="ins">
<input type="hidden" name="mode" value="upd">
<input type="hidden" name="mode" value="del">

を使えば$_POST["mode"]で取れますよ(^^)
それにJavaScriptはアクセシビリティに欠けますのであまり使わないことをお勧めします。

それから、PHPで出来ないボタン処理といえば、
フォーム送信を行う前にデータ入力をチェックしたりするような場合です。
Parent: 537  reply: 543 返信 編集 削除

[543] ありがとうございます。

user: たろー | created: 2003-08-25 11:02
なるほどですね。ありがとうございます。

JavaScriptはなるべく使用したくないと思っています。
例えば、登録画面で入力必須チェック(コードや名称)を行う場合は、『JavaScript』が必要になってきますね。
Parent: 539  返信 編集 削除

[535] Modeエラー???

user: ゆうじ | created: 2003-08-24 15:29
「JavaScriptのModeエラーと出ます」
というのが、どいう現象なのかわからないのですが、

そのエラーは、どこにどのような形で出ているのでしょうか?
また、エラーを出しているのは、PHP、DB、JavaScript、のどれでしょうか?
Parent: 533  返信 編集 削除

[536] 合っています。

user: たろー | created: 2003-08-24 15:38
すみません。

ゆうじさん あっています。

kakunin.phpのステップ数が長くなるため見難いので短くそれぞれモジュール化行えないかと考えておりました。


▼ 処理分岐するスクリプト----------
<?php

if( $_POST['action'] == 'ins' ) {
include("ins.php");
} elseif( $_POST['action'] == 'upd' ) {
include("upd.php");
} elseif( $_POST['action'] == 'del' ) {
include("del.php");
} else {
echo "ERROR:無効なコマンドが指定されました。";
}

?>
Parent: 507  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 822 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑