dポイントプレゼントキャンペーン実施中!

ショッピングカートを作成しようと思い、以下を書いたんですが、
送り先入力確認画面へ進むと、
Fatal error: Call to undefined function cart_detail() in /usr/local/www/htdocs/○○○○/public_html/cart.php on line 472
と出てセッションに保存されたデータもなにも表示されません。
472は、★を付けた部分です。
何度も書き直しはしましたので、スペルミスは無いと思います。

どこが悪いのでしょうか?
本気で悩んでます・・よろしくお願いします。


●      メインプログラムの一部      ●

// 送り先入力確認画面
//--------------------------------------------------------------

function orderCfm() {

global $CONF,$ITEM,$FORM;

$flgErr = false;
$tagErr = "";

//入力エラーチェック

-------------省略---------------

//エラーがあれば
if($flgErr) {

$tagErr = '<p><img src="○○○.gif" /></p><ul class="caution mark0n">'.$tagErr.'</ul>';
orderForm($tagErr);

//エラーがなければ
} else {

//セッションに保存
$_SESSION["user"]["name"] = $FORM["name"];
$_SESSION["user"]["pref"] = $FORM["pref"];
$_SESSION["user"]["address"] = $FORM["address"];
$_SESSION["user"]["tel"] = $FORM["tel"];
$_SESSION["user"]["mail"] = $FORM["mail"];
$_SESSION["user"]["bikou"] = $FORM["bikou"];

$code = openFile("_tmp_orderCfm.html");
$code = implode("",$code);
$code = explode("<!--section-->",$code);
print $code[0];

//カートの中身を表示
list($flg,$goukei) = cart_detail($code[1]);  ★472

$line = $code[2];
$line = str_replace("#name#",$FORM["name"],$line);
$line = str_replace("#pref#",$FORM["pref"],$line);
$line = str_replace("#address#",$FORM["address"],$line);
$line = str_replace("#tel#",$FORM["tel"],$line);
$line = str_replace("#mail#",$FORM["mail"],$line);
$line = str_replace("#bikou#",chgForRec($FORM["bikou"]),$line);
$line = str_replace("#goukei#",number_format($goukei),$line);
print $line;
exit;

}
}


●       _tmp_orderCfm.html       ●

<body id="cart" class="twinColum">
<div id="wrapper">
<div id="contents">
<div id="primary">
<script type="text/javascript">resizePage()</script>
<!-- InstanceBeginEditable name="primary" -->
<p>下記の内容で送信されますか?</p>
<table class="type1">
<tr>
<th></th>
<th>品名</th>
<th>価格</th>
<th>数量</th>
<th>小計</th>
</tr>
<!--section-->
<tr>
<td><img src="images/pict#itemID#S.jpg" alt="#itemName#" /></td>
<td>#itemName#</td>
<td>#priceF#円</td>
<td>#orderNum#個</td>
<td>#syoukei#円</td>
</tr>
<!--section-->
<tr>
<td colspan="4" class="alR">合計</td>
<td>#goukei#円</td>
</tr>
</table>
<table class="type1">
<tr>
<th>お名前</th>
<td>#name#</td>
</tr>

-------------省略---------------

<tr>
<th>備考</th>
<td>#bikou#</td>
</tr>
<tr>
<td colspan="2" class="alC">
<form action="cart.php" method="post">
<input type="hidden" name="mode" value="orderEnd" />
<button type="submit"><img src="○○○.gif" alt="" width="205" height="55" /></button>
</form>
</td>
</tr>
</table>
<!-- InstanceEndEditable -->
<p class="pageTop noLM"><a href="javascript:go_top();">ページトップへ</a></p>
</div>
<div id="secondary">
<div id="sideNavi">
<!-- InstanceBeginEditable name="sideNavi" -->
<h2 class="imgRep cart-flow first">ご注文のフロー</h2>
<ul id="subNavi">
<li>カートの内容確認</li>
<li>送り先住所の入力</li>
<li>ご注文内容の確認</li>
<li>ご注文完了</li>
</ul>
<!-- InstanceEndEditable -->
</div>
</div>
</div>
</body>

メインプログラムは文字制限を考えて、一部省略していますが、
一応メインプログラムを添付しておこうと思います。

A 回答 (4件)

> よく調べてみると他にも質問があるようで、プログラム自体に


> 欠陥があるのでしょうか?;

用意されている関数を使うのであれば、includeする必要が
あるんじゃないでしょうか?
使用する関数群毎にincludeするファイル名が決まっている
ような気がします。そのようなものは使ったことはありませ
んが、一般的にはそう考えるかなあ。

この回答への補足

今まで試行錯誤でやってきたので、深く理解できる知識が
ありませんが、そのようにも思えてきますので、
includeというものも理解してみたいと思います。

補足日時:2009/08/20 18:04
    • good
    • 0

そうですね。


cart_detail関数を定義しないといけません。
参考にされているホームページを見ましたが、本来、cart_detail関数のソースコードが表示されるべきところに、同ページの上にあるorderCfm関数のソースコードと同じものが表示されています。
これはホームページ管理者のミスだと思います。
ソースコードは画像で code-cart-pg7-1.gif と言うものでしたので、もしかしたらと思って code-cart-pg7-2.gif にアクセスしてみましたが、期待したものは得られませんでした。
「detail」から、カートの明細あるいは行明細の処理だとは想像しますが、どんな処理なのかはわかりません。
list()で代入しているところをみると、Array型のものを返すのだと考えられます。
他の処理についてはよく見ていませんが、$code[1]に関係するデータのうち、$flgと$goukeiに代入されるであろうデータの参照あるいは加工の処理を質問者様の方で作成してみてはいかがでしょうか。

この回答への補足

やっぱりミスありましたか、ただ疑問なのが、ミスだとすると
同じプログラム内に全く同じエラーが出る部分が最後にあるんです。
以下、

//orderEnd関数
//--------------------------------------

function orderEnd() {

global $CONF,$ITEM,$FORM;


//注文マスターに保存
if(isset($_SESSION["cart"])) {

$flg = false;

$list_for_file = "";
$list_for_mail = "";
$goukei = 0;

//セッションデータを読み出し
for($i=0,$n=count($_SESSION["cart"]);$i<$n;$i++) {
if($_SESSION["cart"][$i]["orderNum"] > 0) {
$flg = true;
$orderNum = $_SESSION["cart"][$i]["orderNum"];
$itemName = $_SESSION["cart"][$i]["itemName"];
$itemID = $_SESSION["cart"][$i]["itemID"];
$price = $_SESSION["cart"][$i]["price"];

$goukei += $price * $orderNum;
$line = $itemName." : \\ ".number_format($price)." × ".$orderNum."個 ";
$list_for_file .= "[".$line."]";
$list_for_mail .= $line."\n";
}
}

if($flg) {

//ファイル保存用に変換
$hush = array();
foreach($_SESSION["user"] as $key => $value) {
$value = str_replace("\0","",$value);
$value = str_replace("\t","",$value);
$value = str_replace("\r\n","",$value);
$value = str_replace("\r","",$value);
$value = str_replace("\n","",$value);
$hush[$key] = $value;
}

//注文マスターに保存
$time = getTime();
fileLock("order_master");
$array = openFile($CONF["order_master"]);
$data = array();
$data[] = $time["code"];
$data[] = $time["str"];
$data[] = $hush["name"];
$data[] = $hush["pref"];
$data[] = $hush["address"];
$data[] = $hush["tel"];
$data[] = $hush["mail"];
$data[] = $hush["bikou"];
$data[] = $list_for_file;
$line = implode("\t",$data)."\n";
$array[] = $line;
writeFile($CONF["order_master"],$array);
fileUnlock("order_master");

//メール送信
$array = openFile("_mail_orderEnd.txt");
$mailBody = implode("",$array);
$mailBody = str_replace("#name#",$hush["name"],$mailBody);
$mailBody = str_replace("#pref#",$hush["pref"],$mailBody);
$mailBody = str_replace("#address#",$hush["address"],$mailBody);
$mailBody = str_replace("#tel#",$hush["tel"],$mailBody);
$mailBody = str_replace("#mail#",$hush["mail"],$mailBody);
$mailBody = str_replace("#bikou#",$hush["bikou"],$mailBody);
$mailBody = str_replace("#itemList#",$list_for_mail,$mailBody);
$mailBody = str_replace("#goukei#",number_format($goukei),$mailBody);
mb_language('Japanese');
mb_internal_encoding( "shift_jis");
$title = "ご注文内容の確認";
mb_send_mail($CONF["adminMail"],$title,$mailBody,"From:".$CONF["adminMail"]);
}
}

$code = openFile("_tmp_orderEnd.html");
$code = implode("",$code);
$code = explode("<!--section-->",$code);
print $code[0];

#カートの中身を表示
list($flg,$goukei) = cart_detail($code[1]); ★ここがその場所
$line = $code[2];
$line = str_replace("#name#",$hush["name"],$line);
$line = str_replace("#pref#",$hush["pref"],$line);
$line = str_replace("#address#",$hush["address"],$line);
$line = str_replace("#tel#",$hush["tel"],$line);
$line = str_replace("#mail#",$hush["mail"],$line);
$line = str_replace("#bikou#",chgForRec($hush["bikou"]),$line);
$line = str_replace("#goukei#",number_format($goukei),$line);
print $line;
//セッションを削除
session_unregister("cart");
session_unregister("user");
exit;
}

?>

となると、ここも同じように管理者が書き忘れているのでしょうか?
別の「lb_globalMethod.php」という関数を集めたライブラリもこの
カートプログラムには必須とされているのですが、そこに問題がある
可能性は無いでしょうか?
よろしくお願いします。

補足日時:2009/08/20 17:06
    • good
    • 0

cart_detailとはなんでしょうか?


list関数は、右辺の配列の要素を一連の変数に代入する事が出来るとリファレンスにあります。
cart_detail($code[1])とは、どんな配列でしょうか?

この回答への補足

一応参考にしたサイトには、

cart_detail関数の処理
該当部分のhtmlコードを$codeで受け取り
セッション変数に、購入記録があればループで書き出し
購入履歴があるかどうかのフラグ変数と、合計金額をreturn

と記載されています。
ttp://php.frogstone.jp/cart/program7.html

おそらく、cart_detailを定義しないといけないんでしょうか?

補足日時:2009/08/20 04:11
    • good
    • 0

ソースの全てを見てる訳じゃないので何ともいえませんが、


エラーメッセージを素直に読めば、cart_detail関数がま
だ定義されていない、ということでしょうけど。

この回答への補足

すいません。
テキストファイルも添付出来ると思っていたらそうじゃ
ないみたいで。。

おっしゃるとうりエラーメッセージを素直に読めば
cart_detail関数がまだ定義されていないようなんですが。。。

参考にしたサイトは、PHPプログラム ショッピングカートで
ぐぐると出てくるphp.frogstone.jpというサイトなんです。

よく調べてみると他にも質問があるようで、プログラム自体に
欠陥があるのでしょうか?;

補足日時:2009/08/20 03:51
    • good
    • 0

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