- PR -

phpのユーザ共通ライブラリについて

投稿者投稿内容
tuchida
大ベテラン
会議室デビュー日: 2006/08/06
投稿数: 125
投稿日時: 2007-11-24 01:12
お世話になっております。

tuchidaです。

php初心者なために以下の様な質問になってすみません。

ここで、こんなこと聞いていいのかどうかわからないのですが、
お怒りの方がいたらすみません。

php4.4.0で現在ユーザが定義した共通関数を書きたいと考えていますが、
include文やrequire文で取り込んだ外部ファイル内に複数の関数を書いてこの
関数を呼び出すことはできるのでしょうか
(色々なファイルから共通の関数として呼び出したいためです。)
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2007-11-24 01:19
外部ファイルと仰っている「外部」の意味がよくわかりませんが、
同じところに置いてある別のphpファイルをインクルードして、
関数の呼び出しを行いたいってことでしょうか?
できますよ。というか、普通によくやりますよ。
tuchida
大ベテラン
会議室デビュー日: 2006/08/06
投稿数: 125
投稿日時: 2007-11-24 02:02
引用:

かつのりさんの書き込み (2007-11-24 01:19) より:
外部ファイルと仰っている「外部」の意味がよくわかりませんが、
同じところに置いてある別のphpファイルをインクルードして、
関数の呼び出しを行いたいってことでしょうか?
できますよ。というか、普通によくやりますよ。



説明が正しくなくてすみません。

具体的には

require('../includes/ComLib.php');

 .
 .
 .

$No = NumGet("AAA");

以上のコーディングでNumGet()関数はComLib.phpの中にあるのですが
NumGet("AAA")の所でエラーとなってしまっています。
kalze
ぬし
会議室デビュー日: 2003/10/23
投稿数: 406
お住まい・勤務地: 東京・東京
投稿日時: 2007-11-24 04:39
引用:

tuchidaさんの書き込み (2007-11-24 02:02) より:
require('../includes/ComLib.php');
$No = NumGet("AAA");

以上のコーディングでNumGet()関数はComLib.phpの中にあるのですが
NumGet("AAA")の所でエラーとなってしまっています。



どんなエラーがでるのでしょうか?
また、ComLib.phpの場所は正しいですか?
tuchida
大ベテラン
会議室デビュー日: 2006/08/06
投稿数: 125
投稿日時: 2007-11-24 04:52
[/quote]

どんなエラーがでるのでしょうか?
また、ComLib.phpの場所は正しいですか?
[/quote]
場所は正しいです。
以下のエラーが発生しました。

Fatal error: Call to undefined function: numget() in /home/XXX/public_html/Order/php/Order.php on line 106
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-11-24 09:17
うーん・・こんなコード↓で試してみましたが、問題ないですね

コード:

【test.php】
<?php
require('lib/test.inc');
print numget("AAA");
?>

【lib/test.inc】
<?php
function NumGet($arg) {
return("ret " . $arg);
}
?>



前のスレッド(その後進展がないようですが・・)も不思議な現象でしたし、再現可能なミニマムコードを書いてそのまま転記していただけるといいのですが・・・。

[ メッセージ編集済み 編集者: shimix 編集日時 2007-11-24 09:17 ]
tuchida
大ベテラン
会議室デビュー日: 2006/08/06
投稿数: 125
投稿日時: 2007-11-24 09:44
ご心配頂き有難う御座います。

引用:

前のスレッド(その後進展がないようですが・・)も不思議な現象でしたし、再現可能なミニマムコードを書いてそのまま転記していただけるといいのですが・・・。




呼んでいる方のプログラムは以下の通りです。

<?php
/**
* Order.php is Vanish55 OrderSystem Order Sheet Create
*
*
* <ul>
*/
/***************************************************
require('../includes/DatabaseCommon.inc');
require('../includes/common.inc');
***************************************************/

$Mail = $_POST["prm01"];
$Yubin1 = $_POST["prm02"];
$Yubin2 = $_POST["prm03"];
$Jyu1 = $_POST["prm04"];
$Jyu2Name = $_POST["prm05"];
$Jyu3Name = $_POST["prm06"];
$Kana = $_POST["prm07"];
$Shimei = $_POST["prm08"];
$TEL = $_POST["prm09"];
$FAX = $_POST["prm10"];
$Count = $_POST["prm11"];
$Tanka = $_POST["prm12"];
$Shokei = $_POST["prm13"];
$Soryo = $_POST["prm14"];
$Total = $_POST["prm15"];




/** Database Update */
/**
/* DB Connection */
if(!($conn = mysql_connect("localhost","XXXXX", "XXXXX"))){

print "database Connect Error";

}

if(!(mysql_select_db("XXXXXXXX"))){

print "Database SELECT Error";

}

if (!( mysql_query("begin;"))){

print "Transaction START Error";

}

$OrderNo = NumGet("Order");   <−−−−−−ここです。


$SQL = "INSERT INTO OrderInf (";
$SQL = $SQL . "RecType, Or_OrderNo, Or_AgSel, Or_Agency, Or_Mail, ";
$SQL = $SQL . "Or_Yubin1, Or_Yubin2, ";
$SQL = $SQL . "Or_Jyu1, Or_Jyu1Name, Or_Jyu2, Or_Jyu2Name, Or_Jyu3, ";
$SQL = $SQL . "Or_TEL, Or_FAX, Or_Name, Or_NameKana, ";
$SQL = $SQL . "Or_Count, Or_Tanka, Or_Gokei, Or_Soryo, Or_Total, Or_Nebiki, ";
$SQL = $SQL . "Or_RequestDay, ";
$SQL = $SQL . "SendRecord, Timestamp) ";
$SQL = $SQL . "VALUES (";
$SQL = $SQL . "'Or', '" . $OrderNo . "', '0000', '00000000', ";
$SQL = $SQL . "'" . $Mail . "', '" . $Yubin1 . "', '" . $Yubin2 . "', ";
$SQL = $SQL . "'" . $Jyu1 . "', '" . $Jyu1Name . "', '" . $Jyu2 . "', '" . $Jyu2Name . "', '" . $Jyu3Name . "', ";
$SQL = $SQL . "'" . $TEL . "', '" . $FAX . "', '" . $Shimei . "', '" . $Kana . "', ";
$SQL = $SQL . $Count . ", " . $Tanka . ", " . $Shokei . ", " . $Soryo . ", " . $Total . ", 0 , ";
$SQL = $SQL . "'', '', '');";

if (!(mysql_query($SQL))){
print $SQL . "\\\\\\\\n";
/** print "Order Request INSERT Error"; **/
}

if (!( mysql_query("COMMIT;"))){

print "COMMIT Error";

}


mysql_close($conn);


?>

呼ばれている方は以下の通りです。

<?php
/**
* Database common Function
*
* <Argment Gide>
* ArgHostName : Database HostName
* ArgDatabase : Database Name
* ArgUser : Database UserID
* ArgPassword : Database Password
*
* <return>
* return : Database Connect Character
*
* <Gide>
* this is Database initialize Function
*
* <ul>
*/
function DBConnect($ArgHostName , $ArgDatabase, $ArgUser, $ArgPassword){

/** Database Connect */
if(!($conn = mysql_connect($ArgHostName, $ArgUser, $ArgPassword))){

print "database Connect Error";

}

if(!(mysql_select_db($ArgDatabase))){

print "Database SELECT Error";

}

return $conn;

}
/**
* Database Query Function
*
* <Argment Gide>
* ArgSQL : Request SQL
* ArgMode : [S] SELECT SQL
* : [I] INSERT SQL
* : [D] DELETE SQL
* : [U] UPDATE SQL
*
* <return>
*
* <Gide>
* this is SQL Execute Function
*
* <ul>
*/
function DBQery($ArgSQL,$ArgMode){

$result = mysql_query($ArgSQL);
if (!($result)){

print "DatabaseQuery Err";
print $ArgSQL;
die;

}

return $result;

}
/**
* Database Get Field Function
*
* <Argment Gide>
* ArgSQL : Request SQL
*
* <return>
*
* <Gide>
* this is SQL Execute Function
*
* <ul>
*/
function DBGetField($Result){

$return = mysql_fetch_array($Result,MYSQL_ASSOC);

return $return;

}
/**
* Database Close Function
*
* <Argment Gide>
* ArgConn : Database Connect Character
*
* <return>
*
* <Gide>
* this is Database Close Function
*
* <ul>
*/
function DBClose($ArgConn){

mysql_close($ArgConn);

}

/**
* NumberGet Function
*
* <Argment Gide>
* ArgNUMKey : Number Get Key
*
* <return>
* return : Get Number(Length=
*
* <Gide>
* this is Database Close Function
*
* <ul>
*/
function NumGet($ArgNumKey){

$W_SQL = "SELECT NUMKBN, Renban, UPDATE ";
$W_SQL = $W_SQL . "FROM NumTbl ";
$W_SQL = $W_SQL . "WHERE (((NUMKBN)='" . P_Key . "'));";

$res = DBQery($W_SQL);
if (!$res) {

$W_SQL = "INSERT INTO NUMTBL(NUMKBN,Renban,UpdDate) ";
$W_SQL = $W_SQL . "VALUES('" . $ArgNumKey . "',1,'" . date("Y/m/d H:i:s") . "')";

$RetNum = 1;

}else{

$row = DBGetField("Renban");
$RetNum = $row["Renban"] + 1;
If ($RetNum > 99999999){

$RetNum = 1;
}

$W_SQL = "UPDATE NUMTBL SET Renban = " . $RetNum . " ";
$W_SQL = $W_SQL . "WHERE (((NUMKBN)='" . $ArgNumKey . "'));";

}

return $RetNum;

}
?>

長くなってすみません。
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2007-11-24 10:13
#私は再現可能なミニマムコードと書いたのですが・・。

引用:

include文やrequire文で取り込んだ外部ファイル内に複数の関数を書いてこの
関数を呼び出すことはできるのでしょうか


という質問に対しては「できる」としか答えられません。

問題の切り分けをしていただかないと、回答する側としてもスクリプト全部を検証するわけにはいきません。ライブラリ側にDBConnectなども定義されているようですから、
コード:

if(!($conn = mysql_connect("localhost","XXXXX", "XXXXX"))){
print "database Connect Error";
}


の部分を
コード:

$conn = DBConnect("localhost","XXXXX", "XXXXX", "XXXXX");


などとしたらどうなりますか?

よくあるのは「includes/DatabaseCommon.inc」があちこちの階層に存在している(&保守漏れで微妙に内容が違う)というパターンですが、それはありませんね?

[ メッセージ編集済み 編集者: shimix 編集日時 2007-11-24 10:14 ]

スキルアップ/キャリアアップ(JOB@IT)