電子書籍の厳選無料作品が豊富!

PHPの初心者です。下記のコードはDBに月刊情報を収納させて、$sqlやSQL文でやり取りする構造です。
構造や意味が理解できないコードがありますので、断片的な内容となりますが、どなたか解説をお願いできますでしょうか。質問が多くてすみません。
回答するのに追加情報が必要の場合は教えてください。
よろしくお願い致します。

①コード:
「 $sql .= " from m_magazine ";
if ($para['is_deleted'] == "y") {
$sql .= " where m_magazine.magazine_id is not null ";
} else if ($para['is_deleted'] == "yonly") {
$sql .= " where m_magazine.is_deleted = 'y' ";
} else {
$sql .= " where m_magazine.is_deleted = 'n' ";
}

質問:こちらのif文の意味は何でしょうか。
 「 else if ($para['is_deleted'] == "yonly") {」の「yonly」の指定はどういう意味でしょうか。

②コード:
「$sql .= " and m_magazine.magazine_id = '" . f_db_escape($para['magazine_id']) . "' ";」
質問:「. 」と「' "」はどういう意味と役割でしょうか。

③コード:「「if ($para['orderby'] == "magazine_title_desc") {
$sql .= " order by m_magazine.magazine_title desc";
} else if ($para['orderby'] == "magazine_title_asc") {
$sql .= " order by m_magazine.magazine_title asc";」
質問:「desc」と「asc」を両方指定する意味は何でしょうか。

④「$sql .= " , m_magazine.magazine_id asc";」はDBからとってきた月刊IDが昇順で並ばせるような指定でしょうか。

⑤コード:
「$data['ct_total'] = 0;
$data['ct_min'] = 1 + ($conf['CT_PER_PAGE'] * ($para[page] -1));
$data['ct_max'] = $conf['CT_PER_PAGE'] * $para[page];
$ret = f_db_select2($sql);
while ($h = mysql_fetch_array($ret)) {
$data['ct_total']++;
if ($data['ct_total'] < $data['ct_min']) continue;
if ($data['ct_max'] < $data['ct_total']) continue;」
質問:$dataはDBのパラメータ(設定値)を見る関数として設定されていますでしょうか。
 「['ct_total'] = 0;」はどういう意味でしょうか。
 「$data['ct_min'] = 1 + ($conf['CT_PER_PAGE'] * ($para[page] -1));」の式の意味は何でしょうか。
 「$conf」は「CT_PER_PAGE」を設定するための関数でしょうか。
 「ct_」という記述はどういう文法でしょうか。
 ['ct_min']と['CT_PER_PAGE']のように小文字と大文字を区別する意味は何でしょうか。
 $retはDBからの出力で、$resはDBへの入力という理解でよろしいでしょうか。

⑥「if ($data['list'] == "") $data['list'] = '<tr><td class="bg_cont" colspan="6">データがありません</td></tr>';」の「""」は初期化という理解でよろしいでしょうか。

⑦コード:
「 if ($para['magazine_id'] == "") {
$data['ctl_add'] = 'y';
} else {
$sql = "select * from m_magazine where magazine_id = '%%1%%'";
$ret = f_db_select($sql, $para['magazine_id']);
$data = array_shift($ret);
}」
質問:「$data['ctl_add'] = 'y';」はどういう意味でしょうか。
「%%1%%」という指定はidを「1」からセレクトするという意味でしょうか。
「array_shift」を調べますと、配列から先頭の要素を取り除くとありますが、先頭の要素はこの場合ではIDではなく、どの要素を指しますでしょうか。
「$data['READONLY_magazine_id'] = 'readonly';」は月刊IDを読み出し専用指定という意味でしょうか。 読み出し専用指定にする意味は何でしょうか。

⑧コード:
「 require 'lib/validate_magazine.php';
$err = f_validate_magazine_confirm();
if (count($err) > 0) f_err_exit($err);」
質問:こちらの処理は「エラーはvalidate_magazine.phpを通して、もし1個以上ありましたらvalidate_magazine.phpで設定しましたエラーメッセージを出す」という意味でしょうか。
 「f_err_exit」の「exit」は出力という意味でしょうか。

A 回答 (1件)

他人の書いた冗長なコードを一部だけ見ても明確な回答はむずかしいですが


想像してかきます

>①コード
それを$para配列のキー:is_deletedの値が3つあって
「y」・・・削除済みのときはmagazine_idカラムがNULLではないデータを抽出
「yonly」・・・y only?より厳密に削除済みのときはis_deletedカラムが「y」のデータを抽出
それ以外はis_deletedカラムが「n」のデータを抽出しています。
「yonly」は筆者のセンスなので良いとも悪いとも、なんとも言えないですね

>②コード
>質問:「. 」と「' "」はどういう意味と役割でしょうか。
「. 」は文字列の結合です、PHPの一般的な使われ方
「' "」はそこだけ切り取るから意味不明なのであって
「 and m_magazine.magazine_id = '・・・・' 」というSQL文を書くための布石です。
ちなみにf_db_escape()というユーザー関数の内容がわからないのでなんとも言えませんが
書き方がかなり古い、今のPHPでは敬遠される書き方です。

>③コード
>質問:「desc」と「asc」を両方指定する意味は何でしょうか。
パラメータのキーorderbyをみて "magazine_title_desc"をチェックしているので
それ以外のモノがはいっていれば「magazine_title」を利用してソートしないということです。

>④コード
>「$sql .= " , m_magazine.magazine_id asc";」
magazine_idの値で昇順にソートしています。
「,」でつないでいるので、一次ソートが別途あり、あくまで二次ソートしているのでしょう

>⑤コード
全体が俯瞰できないのでなんともいえません

>⑥コード
>「""」は初期化

ちがいます。
$data['list']の値が""と合致する場合という意味です。
ただし演算子「==」はよほどのことがない限り使いません。
最低でも「===」を利用しましょう。
※「==""」でチェックすると、falseや0やNULLといった理論的な空文字もヒットして
比較が厳密にできません。

>⑦コード
>「$data['ctl_add'] = 'y';」はどういう意味でしょうか。
$data['ctl_add']に'y'を代入しているだけです
なぜそうしているかはわかりません。

>「%%1%%」という指定はidを「1」からセレクトするという意味でしょうか。
「magazine_id」の値が「%%1%%」と合致するという条件ですね
筆者の意図はわかりませんがおそらくf_db_select()関数でsprintf的な
置き換えをしてSQL文を実行してるように想像できます

>先頭の要素はこの場合ではIDではなく、どの要素を指しますでしょうか。
質問の意味がわかりません
コード自体は$retにSQL文をした戻り値が配列として返ってきていて
その1行目を$dataに代入しているだけです。

>「$data['READONLY_magazine_id'] = 'readonly';」
そもそもそんな記載がないのでなんとも言えません。
筆者がなんらかの意図をもってreadonly属性をつけているのでしょう

⑧コード
>質問:こちらの処理は「エラーはvalidate_magazine.phpを通して、もし1個以上ありましたら
>validate_magazine.phpで設定しましたエラーメッセージを出す」という意味でしょうか。
これも意味不明
おそらくライブラリ「lib/validate_magazine.php」にエラー処理がかいてあって
f_validate_magazine_confirm()でエラーを$err配列に代入しているのでしょう
f_err_exit()はおそらくデバッグでエラーを表示して終了するというコードが書いてあるのかと
    • good
    • 0
この回答へのお礼

長々の質問で本当に失礼しました。
ものすごくわかりやすく、かつ丁寧に教えて頂き、本当にありがとうございます。

お礼日時:2016/04/01 13:35

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!