人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPとMySQLについて質問です。

MySQLのDB接続設定(mysql_connectとmysql_select_dbの内容)を、config.phpにまとめて記述しています。

この中にサイトURL($site_url="http://localhost")も記述されているとします。

そこで質問ですが、関数内でconfig.phpを使う場合、どのようにされていますでしょうか?

■ファイル名(sidenavi.php)
function sideNavi(){
$sql="select * from datalist";
$res=mysql_query($sql,$conn);
while($row=mysql_fetch_array($res)){
echo "<a href=\"{$site_url}\">$row["name"]."</a><br/>";
}
}

このようなソースが合った場合を仮定します。

ファイル構造は
/config.php
/include/sidenavi.php

となっていると仮定します。(※ただし、構造が変わる可能性もあり)

上記のような単純なコードの場合は、classを使用してconfig.php内のDB接続情報をfunction内に送っていますが、今回はclassを使用しない方法でお願いします。

より良い回答をいただけた方には多くのポイントを差し上げます。

●質問者: kt26
●カテゴリ:ウェブ制作
✍キーワード:Class config dB ECHO MySQL
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● nandedarou
●50ポイント
require("config.php");

//ここで、$connにDBを接続するコードを書く
//接続の為のコードは省略します。

sideNavi($conn,$site_url);

function sideNavi($conn,$site_url){
 //省略
}

でいいと思います。

$connについては、これでいいと思いますが、

関数内で使う設定情報が$site_urlだけでなく、他にも多くある場合、引数の数が多くなることになります。

そこで、私は、設定ファイルをINIファイル形式で書き、関数の外で

$Conf = parse_ini_file( '設定ファイル名', true );

として設定情報を配列として$Confに格納し、$Confを引数として関数に渡します。関数内では、$Conf['site_url']で情報を引き出します。

sideNavi( $conn, $Conf );

function sideNavi($conn,$Conf ){
 //省略
 echo "<a href=\"{$Conf['site_url']}\">$row["name"]."</a><br/>";
 //省略
}

http://au.php.net/manual/ja/function.parse-ini-file.php

◎質問者からの返答

ありがとうございます。parse_ini_fileを使うのは全く想定していませんでした。

参考にさせていただきます。


2 ● tobeoscontinue
●50ポイント

http://jp.php.net/manual/ja/function.require-once.php

require_onceを使っていますが、相対パスで使う場合、最初にアクセスされるphpファイルの位置によって変わってくるのがやっかいです。かといって絶対パスでは長くなりますし、後で構造が変わった場合は面倒です。

ファイルへのパスを下記とします

/h/o/g/e/config.php
/h/o/g/e/include/sidenavi.php

この場合

define('HOGE_ROOT', '/h/o/g/e');a
ini_set('include_path', HOGE_ROOT.':'.ini_get('include_path'));

とinclude_pathに設定することでphpに探させるようにして、相対パスでアクセスするようにしています

位置が変わる程度であればHOGE_ROOTを変えることだけで済みます。

require_once 'config.php'
require_once 'include/sidenavi.php'

ただdefineとini_set()を毎回書くのは面倒なのでinit.phpとしています。

require_once '../init.php'

require_once 'config.php'
require_once 'include/sidenavi.php'

init.phpの時点ではまだinclude_pathは設定されていないのでそのphpスクリプトファイルの位置からinit.phpまでのパスを正しく設定しなければなりませんが以降は有効です。


MySQLのDB接続設定を、config.phpにまとめて記述しているのであればDBへの操作もconfig.phpへ記述したほうがいいと思うのですが(class的な考えなのでダメか)

function sideNavi(){
 $sql="select * from datalist";
 $res=mysql_query($sql,$conn);
 $data = array();
 while($row=mysql_fetch_array($res))
 $data[] = $row["name"];
 return array($site_url, $data);
}
require_once '../init.php'
require_once 'config.php'

list($site_url, $data) = sideNavi()
foreach ($data as $name) {
 echo "<a href=\"{$site_url}\">{$name}"</a><br/>";
}
◎質問者からの返答

ご丁寧にありがとうございます。

少々私には複雑に感じられましたが、テストしながら試してみます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ