質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

2回答

4518閲覧

phpでarray_push() expects parameter 1 to be array, null given inのエラーが出て困っています。

e_shop_nagoya_2

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/10/11 21:22

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
(例)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>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/10/11 21:37 編集

エラーで調べられましたか? それもですが、実装が古すぎるのも気になります。 フッターのコピーライトの年は書籍のものでしょうか。でしたら、さすがに今参考にすべき書籍ではないと思います。URLも既に移転されているようですし、移転先のコピーライトも2014で止まってます。
guest

回答2

0

php

1Warning: 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

メッセージのままです。

例えば、以下の行であれば、$_SESSION["goods_number"]nullなのでしょう。

php

1array_push($_SESSION["goods_number"], $sGoodsNumber);

全体的におかしいのでデバッグ環境を整えて、変数の変化を確認するところから始めると良いです。
意図する変化を起こしていない箇所が多くあると思います。

投稿2020/10/11 22:09

編集2020/10/11 23:22
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

e_shop_nagoya_2

2020/10/11 23:07

以下のソースはどちらにソースを追加又は変更をすると宜しいでしょうか? array_push($_SESSION["goods_number"], $sGoodsNumber); お忙しいところ宜しくお願い致します。
退会済みユーザー

退会済みユーザー

2020/10/11 23:22

> 全体的におかしいのでデバッグ環境を整えて、変数の変化を確認するところから始めると良いです。 意図する変化を起こしていない箇所が多くあると思います。
e_shop_nagoya_2

2020/10/11 23:26

何かおすすめのショッピングカートのphpのフリーのダウンロードファイルがございましたら、幸いです。
guest

0

for($i = 0; $i < isset($_POST["chk"]); $i++){

isset()
isset ( mixed $var [, mixed $... ] ) : bool

var が存在して NULL 以外の値をとれば TRUE、 そうでなければ FALSE を返します。

issetではforはtrueが返るときに1周くらいしか回らないのでは。

php

1<?php 2echo "true".PHP_EOL; 3for($i = 0; $i < true; $i++){ 4 echo $i.PHP_EOL; 5} 6echo "false".PHP_EOL; 7for($i = 0; $i < false; $i++){ 8 echo $i.PHP_EOL; 9}
true 0 false

あとは目的や意図不明の実装ばかりなのですが、やりたいことは全く表現できてないとは思います。

ただ、そもそも参考にしている書籍?が古すぎるのは確かです。コピーライトが2005年。
URLも移転済みで、その移転先も2014年でコピーライトが止まっている。
「Keiji Terada PHP」で調べたら同じものを参考にしたであろう「ショッピングサイト」が多数見つかります。他人のコピーライト入れたままWebに公開するのは如何なものかと思いますが、コピーライトの意味や役割を理解してないのかなと思いました。

参考先を変えるところからでしょうね。

最低でもPHP7対応。
そしてPHPマニュアルをきちんと活用できるようになるのが望ましいです。

初めのころに出くわす問題は下記ができればほとんど解決できます。

投稿2020/10/11 22:39

編集2020/10/11 23:09
m.ts10806

総合スコア80852

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

e_shop_nagoya_2

2020/10/11 23:26

何かおすすめのショッピングカートのphpのフリーのダウンロードファイルがございましたら、幸いです。
m.ts10806

2020/10/11 23:29 編集

自分で作らないと意味なくないですか? それに、探して出てくるようなものは大抵実装が古いか、そのままでは自身が作りたいものは実現できないものです。 まだWordPressのプラグイン使うか、ECサイト前提のCMS使ったほうが良いでしょう。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問