ショッピングカートを作成しようと思い、以下を書いたんですが、
送り先入力確認画面へ進むと、
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件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
> よく調べてみると他にも質問があるようで、プログラム自体に
> 欠陥があるのでしょうか?;
用意されている関数を使うのであれば、includeする必要が
あるんじゃないでしょうか?
使用する関数群毎にincludeするファイル名が決まっている
ような気がします。そのようなものは使ったことはありませ
んが、一般的にはそう考えるかなあ。
この回答への補足
今まで試行錯誤でやってきたので、深く理解できる知識が
ありませんが、そのようにも思えてきますので、
includeというものも理解してみたいと思います。
No.3
- 回答日時:
そうですね。
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」という関数を集めたライブラリもこの
カートプログラムには必須とされているのですが、そこに問題がある
可能性は無いでしょうか?
よろしくお願いします。
No.2
- 回答日時:
cart_detailとはなんでしょうか?
list関数は、右辺の配列の要素を一連の変数に代入する事が出来るとリファレンスにあります。
cart_detail($code[1])とは、どんな配列でしょうか?
この回答への補足
一応参考にしたサイトには、
cart_detail関数の処理
該当部分のhtmlコードを$codeで受け取り
セッション変数に、購入記録があればループで書き出し
購入履歴があるかどうかのフラグ変数と、合計金額をreturn
と記載されています。
ttp://php.frogstone.jp/cart/program7.html
おそらく、cart_detailを定義しないといけないんでしょうか?
No.1
- 回答日時:
ソースの全てを見てる訳じゃないので何ともいえませんが、
エラーメッセージを素直に読めば、cart_detail関数がま
だ定義されていない、ということでしょうけど。
この回答への補足
すいません。
テキストファイルも添付出来ると思っていたらそうじゃ
ないみたいで。。
おっしゃるとうりエラーメッセージを素直に読めば
cart_detail関数がまだ定義されていないようなんですが。。。
参考にしたサイトは、PHPプログラム ショッピングカートで
ぐぐると出てくるphp.frogstone.jpというサイトなんです。
よく調べてみると他にも質問があるようで、プログラム自体に
欠陥があるのでしょうか?;
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- Visual Basic(VBA) Selenium.ChromeDriverの使い方について 7 2022/09/22 06:43
- HTML・CSS CSSが効かずどのように指定すれば良いか分からないのでアドバイスお願い致します 2 2023/06/07 12:25
- PHP htmlで複数の個数入力欄を表示させるには 1 2022/09/20 03:11
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript jQueryで同じクラス名のものを別物として扱いたい 1 2022/06/17 14:14
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プルダウンで選択すると、DBの...
-
javascriptで質問です。 displa...
-
一覧から選択した行の行番号を...
-
jsで質問です。 displayプロパ...
-
クリックされた罫表セルの行番...
-
特定<table>内の<td>の色を変える
-
至急!GetElementById でtdの...
-
ハイパーリンクを別ウインドウ...
-
data-hrefでのcolorbox設定方法
-
スクロールバーの表示位置を変...
-
sed を使って文字列削除
-
td:nth-childを使ってa要素を取...
-
ラジオボタンでテーブルの背景...
-
dataTablesのテーブルの内容が...
-
PC情報の調べ方教えてください。
-
「オブジェクトは、このプロパ...
-
javascriptでボタンを押すたび...
-
Tablesorteを2行一組でソートする
-
テーブルの変数について
-
tableの任意行にfocusをあてる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
特定<table>内の<td>の色を変える
-
プルダウンで選択すると、DBの...
-
一覧から選択した行の行番号を...
-
tableの任意行にfocusをあてる
-
ハイパーリンクを別ウインドウ...
-
JavaScriptで特定のtdタグにcla...
-
JavaScriptでテーブルをクリッ...
-
【UWSC】HTML内のある部分を抽...
-
至急!GetElementById でtdの...
-
チェックボックスにチェックが...
-
JavaScriptでテーブルの行入れ替え
-
動的なtableの値を取得したい
-
Selenium.ChromeDriverの使い方...
-
二次元配列に数字をランダムに...
-
Excelで作ったhtmlファイルのサ...
-
スクロールバーの表示位置を変...
-
テーブルの変数について
-
マウスをブラウザの外に出した...
-
テーブル行のクリックでチェッ...
-
jquery datatablesを使用 イン...
おすすめ情報