前提・実現したいこと
ここに質問の内容を詳しく書いてください。
(例)PHPでショッピングカートシステムを作っています。
index.phpからcart.phpでのエラーメッセージが発生しました。
発生している問題・エラーメッセージ
Warning: array_push() expects parameter 1 to be array, null given in /home/eshopnagoya2/eshopnagoya2.starfree.jp/public_html/zaima/cart/php/cart.php on line 102 Warning: array_push() expects parameter 1 to be array, null given in /home/eshopnagoya2/eshopnagoya2.starfree.jp/public_html/zaima/cart/php/cart.php on line 103 Warning: array_push() expects parameter 1 to be array, null given in /home/eshopnagoya2/eshopnagoya2.starfree.jp/public_html/zaima/cart/php/cart.php on line 104 Warning: array_push() expects parameter 1 to be array, null given in /home/eshopnagoya2/eshopnagoya2.starfree.jp/public_html/zaima/cart/php/cart.php on line 105
該当のソースコード
<<<<<cart.phpのソースコード>>>>> <?php session_start(); //https://tools.m-bsys.com/ex/html-mojibake.phpを参照 header("Content-Type: text/html;charset=UTF-8"); require_once("../inc/Const.php"); ////////////////////////////// // カート処理 ////////////////////////////// if(isset($_POST["delete"])){ // 商品情報削除 // 削除する個所に空文字をセット // for($i = 0; $i < sizeof($_POST["chk"]); $i++){ // sizeofをcountに変更 // for($i = 0; $i < count($_POST["chk"]); $i++){ // sizeofをissetに変更 for($i = 0; $i < isset($_POST["chk"]); $i++){ $_SESSION["goods_number"][$_POST["chk"][$i]] = ""; $_SESSION["goods_name"][$_POST["chk"][$i]] = ""; $_SESSION["price"][$_POST["chk"][$i]] = ""; $_SESSION["order_num"][$_POST["chk"][$i]] = ""; } }elseif(isset($_POST["update"])){ // 数量変更 // for($i = 1, $j = 0; $i < sizeof($_SESSION["goods_number"]); $i++){ for($i = 1, $j = 0; $i < isset($_SESSION["goods_number"]); $i++){ if($_SESSION["goods_number"][$i] != ""){ $_SESSION["order_num"][$i] = $_POST["order_num"][$j]; $j++; } } }elseif(isset($_POST["decide"])){ // レジへ header("Location: ./register.php"); }else{ // 商品情報受け取り if($_GET["goods_number"] != ""){ $sGoodsNumber = $_GET["goods_number"]; // 商品番号 $sGoodsName = $_GET["goods_name"]; // 商品名 $lPrice = $_GET["price"]; // 単価 $iOrderNum = $_GET["order_num"]; // 数量 }elseif($_POST["goods_number"] != ""){ $sGoodsNumber = $_POST["goods_number"]; // 商品番号 $sGoodsName = $_POST["goods_name"]; // 商品名 $lPrice = $_POST["price"]; // 単価 $iOrderNum = $_POST["order_num"]; // 数量 } // カート登録/一覧表示判定 if($sGoodsNumber != "0" && $sGoodsNumber != "-1" && $sGoodsNumber != ""){ // 商品をカートへ登録 // セッション変数登録確認 // http://funkyboys7.com/blog7/2015/11/24/php-session_registerは非推奨になったとな。/ // を参照 // if (session_is_registered("sesuserid")) { // if ($_SESSION['sesuserid']) { // if(!session_is_registered("goods_number")){ // 商品番号がセッションに登録されていない // ↓↓↓改良 if ($_SESSION['goods_number']) { // 商品番号がセッションに登録されていない session_register("goods_number", "goods_name", "price", "order_num"); // 配列作成 $_SESSION["goods_number"] = array(""); $_SESSION["goods_name"] = array(""); $_SESSION["price"] = array(""); $_SESSION["order_num"] = array(""); } // 商品情報をカートへ登録 //-- 既に同一商品がカートにあるか確認 $sPushFlg = "1"; //https://php-beginner.com/function/array/sizeof.html参照 // for($i = 0; $i < sizeof($_SESSION["goods_number"]); $i++){ // for($i = 0; $i < count($_SESSION["goods_number"]); $i++){ //https://qiita.com/masaki-ogawa/items/1671d110b2286ececd09参照 for($i = 0; $i < isset($_SESSION["goods_number"]); $i++){ if($_SESSION["goods_number"][$i] == $sGoodsNumber){ // 数量のみ足し込み $_SESSION["order_num"][$i] += $iOrderNum; $sPushFlg = "0"; break; } } //-- カートへ新規登録 if($sPushFlg == "1"){ array_push($_SESSION["goods_number"], $sGoodsNumber); array_push($_SESSION["goods_name"], $sGoodsName); array_push($_SESSION["price"], $lPrice); array_push($_SESSION["order_num"], $iOrderNum); // 配列初期化が必要なのかな??? // $_SESSION["goods_number"] = array(""); // $_SESSION["goods_name"] = array(""); // $_SESSION["price"] = array(""); // $_SESSION["order_num"] = array(""); } }elseif($sGoodsNumber == "-1") // 全商品をカートから削除 session_unset(); } ?> <HTML> <HEAD> <TITLE>ショッピングカート</TITLE> <SCRIPT TYPE="text/javascript" SRC="../js/CheckData.js"></SCRIPT> <SCRIPT TYPE="text/javascript"> <!-- ////////////////////////////// // 半角数値チェック ////////////////////////////// function CheckNum(parts){ if(!CheckNumData(parts)){ alert("半角数値を入力してください。"); parts.focus(); parts.select(); }else if(parts.value <= 0){ alert("1以上を入力してください。"); parts.focus(); parts.select(); } } //--> </SCRIPT> </HEAD> <BODY> <CENTER> <BR> <FORM METHOD="post"> <TABLE BORDER="1"> <TR ALIGN="center" BGCOLOR="<?= HEADING_COLOR ?>"><TD COLSPAN="6"><FONT SIZE="2">ご注文内容</TD></TR> <TR ALIGN="center" BGCOLOR="<?= SUBHEADING_COLOR ?>"> <TD><FONT SIZE="2">削除</TD> <TD WIDTH="95"><FONT SIZE="2">商品番号</FONT></TD> <TD WIDTH="200"><FONT SIZE="2">商品名</FONT></TD> <TD WIDTH="60"><FONT SIZE="2">単価</FONT></TD> <TD WIDTH="40"><FONT SIZE="2">数量</FONT></TD> <TD WIDTH="60"><FONT SIZE="2">小計</FONT></TD> </TR> <?php $lTotal = 0; $iCnt = 0; for($i = 1; $i < isset($_SESSION["goods_number"]); $i++){ if($_SESSION["goods_number"][$i] != ""){ $lSubTotal = 0; print("<TR BGCOLOR=\"" . GOODSLIST_COLOR . "\"><TD ALIGN=\"center\"><INPUT TYPE=\"checkbox\" NAME=\"chk[]\" VALUE=\"$i\"></TD>"); print("<TD><FONT SIZE=\"2\">" . $_SESSION["goods_number"][$i] . "</FONT></TD>"); print("<TD><FONT SIZE=\"2\">" . $_SESSION["goods_name"][$i] . "</FONT></TD>"); print("<TD ALIGN=\"right\"><FONT SIZE=\"2\">\" . number_format($_SESSION["price"][$i]) . "</FONT></TD>"); print("<TD ALIGN=\"center\">"); print("<INPUT TYPE=\"text\" NAME=\"order_num[]\" SIZE=\"3\" MAXLENGTH=\"3\" VALUE=\"" . $_SESSION["order_num"][$i] . "\" style=\"ime-mode: disabled\" onBlur=\"CheckNum(this)\">"); print("</TD>"); $lSubTotal = $_SESSION["price"][$i] * $_SESSION["order_num"][$i]; print("<TD ALIGN=\"right\"><FONT SIZE=\"2\">\" . number_format($lSubTotal) . "</FONT></TD></TR>"); $lTotal = $lTotal + $lSubTotal; $iCnt++; } } if($iCnt >= 1){ print("<TR><TD COLSPAN=\"5\" ALIGN=\"right\" BGCOLOR=\"" . SUBHEADING_COLOR . "\"><FONT SIZE=\"2\">合 計</FONT></TD>"); print("<TD ALIGN=\"right\" BGCOLOR=\"" . GOODSLIST_COLOR . "\"><FONT SIZE=\"2\">\" . number_format($lTotal). "</FONT></TD></TR>"); print("<TR ALIGN=\"center\"><TD COLSPAN=\"6\"><INPUT TYPE=\"submit\" NAME=\"delete\" VALUE=\"削 除\">"); print("<INPUT TYPE=\"submit\" NAME=\"update\" VALUE=\"数量変更\">"); print("<INPUT TYPE=\"submit\" NAME=\"decide\" VALUE=\"レジへ\"></TD></TR>"); }else print("<TR><TD COLSPAN=\"6\" ALIGN=\"center\"><FONT SIZE=\"2\">カートには何も入っていません。</FONT></TD></TR>"); ?> </TABLE> </FORM> <FONT SIZE="2"><A HREF="./cart.php?goods_number=-1">カートを空にする</A> <A HREF="<?= SHOPPING_URL ?>">お買い物を続ける</A></FONT> <BR><BR><BR><BR> <A HREF="http://www5f.biglobe.ne.jp/~terada/"> <FONT SIZE="1">Copyright (C) 2005 Keiji Terada All rights reserved.</FONT> </A> </CENTER> </BODY> </HTML>
エラーで調べられましたか?
それもですが、実装が古すぎるのも気になります。
フッターのコピーライトの年は書籍のものでしょうか。でしたら、さすがに今参考にすべき書籍ではないと思います。URLも既に移転されているようですし、移転先のコピーライトも2014で止まってます。