PHPについて質問です。

現在ショッピングカートを作成しており、セッションに連想配列で管理番号と購入個数のデータを保存しています。
確認画面で商品個数を変更すると確認画面を自動更新して個数の変更が反映されるようにしたいと考えています。
処理としては
★ 個数を変更した時点でページが更新される。
★ $_SESSION[cart]の$_SESSION[cart][kanri_no]に入っている個数のデータを管理番号を元に照合して上書き変更したいと考えています。
わかるかたおりましたらご回答いただければと考えております。
大変お手数をおかけしますがよろしくお願いいたします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2010/04/04 19:40:18
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351

ポイント100pt

JavaScriptを使用して、個数を選択した時に画面に(金額と合計金額が)反映されるようにしてみました。

変更点が多いのと、コメントも多くなっていた事から、不要なコードを削除したものを以下にそのまま記載します。

主な変更点は、

1.JavaScriptによる個数選択変更時の画面への反映

2.PHPによる個数変更の適用(コメントに記載したコードと同じ)

3.SQLクエリ発行回数を1回に変更(コメントに記載したコードと同じ)

4.不要なコメント等の削除

変更点の細かい解説は省略させていただきます。m(__)m

※解説が必要な部分がありましたら、返信でお願いします。

「kakunin.php」

<?

session_start();

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>カート確認・変更</title>
<script type="text/javascript">
<!--
function selChange(sel, ptxt, sum){
	var element = document.getElementById(sel);
	var num = element.selectedIndex;
	var price = document.getElementById(ptxt);
	var sumtxt = num * price.innerHTML;
	var sumprice = document.getElementById(sum);
	sumprice.innerHTML = sumtxt;
	var sumnum = document.getElementsByName("sumtxt");
	var allsum = 0;
	for (var n=0;n<sumnum.length;n++) {
		var goukei = new Array();
		goukei[n] = sumnum[n].innerHTML;
		allsum += parseInt(goukei[n]);
	}
	var allsumprice = document.getElementById("sougoukei");
	allsumprice.innerHTML = allsum;
}
//-->
</script>
</head>
<body>
<div>
<?php
echo "<table border=\"1\" bordercolor=\"black\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tbody>\r\n";
echo "<tr>\r\n<td bgcolor=\"yellow\">写真</td>\r\n<td bgcolor=\"yellow\">タイトル</td>\r\n<td bgcolor=\"yellow\">値段</td>\r\n
<td bgcolor=\"yellow\">個数</td>\r\n<td bgcolor=\"yellow\">金額</td>\r\n<td bgcolor=\"yellow\">削除</td>\r\n</tr>\r\n";

require "database_connect.php";

$kanri_no = $_POST["kanri_no"];
$_SESSION["cart"]["$kanri_no"] = $_POST["kosuu"];

if($_POST["kosuu"] == "0" || $_POST["delete"]){
	unset($_SESSION["cart"][$kanri_no]);
}

$fnum = 0;
$n = 0; // 追加

foreach ($_SESSION["cart"] as $kanri_no => $kosuu){

	if($kosuu != 0) {
		$fnum++;
		$fname = 'myForm'.$fnum;
		$selname = 'mySel'.$fnum;
		$ptxtname = 'myPrice'.$fnum;
		$sumname = 'mySum'.$fnum;
		$n++;

		echo "<tr>\r\n<td><form id=\"$fname\" name=\"$fname\" action=\"kakunin.php\" method=\"POST\">";

		$sql = "select * from products_table WHERE PRODUCT_NAME = '".$kanri_no."'";
		$result = mysql_query($sql);

		while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
		// 写真
		// 価格もここで変数に入れておきます。
			echo $picture = $row["PICTURE"];
			$price = $row["PRICE"];
		}
		// 合計を配列に代入。
		$sum[$n] = $price * $kosuu ;

		//タイトル
		echo "</td>\r\n<td>".$kanri_no."</td>\r\n";
		//値段
		echo "<td><span id=\"$ptxtname\">$price</span><input type=\"hidden\" name=\"kanri_no\" value=\"$kanri_no\"></td>\r\n";
		//個数
		$html = "<td><select name=\"kosuu\" id=\"$selname\" onchange='selChange(\"$selname\", \"$ptxtname\", \"$sumname\")'>\r\n";
		$html .= "<option selected>$kosuu</option>\r\n";
		$html .= "<option value=\"1\">1</option>\r\n";
		$html .= "<option value=\"2\">2</option>\r\n";
		$html .= "<option value=\"3\">3</option>\r\n";
		$html .= "<option value=\"4\">4</option>\r\n";
		$html .= "<option value=\"5\">5</option>\r\n";
		$html .= "<option value=\"6\">6</option>\r\n";
		$html .= "<option value=\"7\">7</option>\r\n";
		$html .= "<option value=\"8\">8</option>\r\n";
		$html .= "<option value=\"9\">9</option>\r\n";
		$html .= "</select>\r\n</td>\r\n";
		echo $html;
		//金額
		echo "<td><span id=\"$sumname\" name=\"sumtxt\">$sum[$n]</span></td>\r\n";
		//削除ボタン
		echo "<td><input type=\"submit\" name=\"delete\" value=\"削除する\"><br>\r\n";
		echo "<input type=\"submit\" name=\"submit\" value=\"変更する\"></form></td>\r\n</tr>\r\n";
	}
}

// 総合計金額の計算
if($sum) {
	foreach($sum as $value) {
		$goukei += $value; 
	}
}

echo "<tr>\r\n<td align=\"right\" colspan=\"6\"><b>合計金額:<font color=\"red\" size=\"+2\"><span id=\"sougoukei\">$goukei</span></font><font size=\"+2\">円</font></b></td>\r\n";
echo "</tr>\r\n</tbody>\r\n</table>\r\n";

$html = "<div>\r\n";
$html .= "<table height=\"40\" border=\"0\" valign=\"center\">\r\n";
$html .= "<tr>\r\n";
$html .= "<td valign=\"center\"><a href=\"http://www.aiomock2008.sakura.ne.jp/TEST/test2.php\">引き続き商品を購入する</a></td>\r\n";
$html .= "<td valign=\"center\"><form method=\"POST\" action=\"kakunin2.php\">  <input type=\"submit\" name=\"kara\" value=\"カートを空にする\"></form></td>\r\n";
$html .= "<td valign=\"center\"><form method=\"POST\" action=\"kakunin3.php\">  <input type=\"submit\" name=\"kounyuu\" value=\"購入する\" onClick=\"return confirm('本当にボタンを押しますか?')\"></form></td>\r\n";
$html .= "</tr>\r\n</table>\r\n</div>\r\n";
$html .= "</div>\r\n</body>\r\n</html>\r\n";
echo $html;

?>

個数の選択変更ごとにその都度セッションデータを変更するのではなく、変更ボタンで確定した時にPHPで変更するようにしてあります。

なお、コメントに記載したコードと同じように、フォームの送信先は「kakunin.php」自身にしてあります。

もし元のコードのように、一旦「kakunin4.php」に飛ばしたい場合は、フォームの送信先を「action=\"kakunin.php\"」から「 action=\"kakunin4.php\"」にして、kakunin4.phpを以下のように変更する事で動作するはずです。

<?php

session_start();

$kanri_no = $_POST["kanri_no"];
$_SESSION["cart"]["$kanri_no"] = $_POST["kosuu"];

if(isset($_POST["delete"])) {

	unset( $_SESSION["cart"]["$kanri_no"] );

}

header('Location:kakunin.php');

?>

||>
id:aiomock

ご回答ありがとうございます。

コードを実行してみたところ写真と値段が表示されず、また金額が表示されませんでした。。

個数を変えても自動的に切り替わるということができなかったです。。。

どのように対処すればよろしいでしょうか。お手数おかけします。。。

コード自体が実行できてどのような流れでできているかということが把握でき、その後の機能の追加に問題がなければ私の場合問題ありません。まず機能が充実してつかえるということを一番大事に考えています。プログラムは、その後勉強していければと考えています。。。

今回のrouge_2008さんの回答誠にありがとうございます。

2010/04/03 21:33:54

その他の回答2件)

id:GreenStar No.1

回答回数192ベストアンサー獲得回数46

ポイント100pt

セッションの値($_SESSION[cart]の中身)はサーバの方に保管されてますから、

ページ遷移を伴わずに画面に見えない所でサーバとやりとりしなければならなくなります。

(Ajaxと呼ばれる非同期通信を用いる方法です。)


ページ遷移を伴ったサイトを一人で作れない段階でAjaxはハードルが高すぎます。

お望みの方式は今のところはあきらめておくほうが良いでしょう。

楽天ですら、ページ遷移させているのだからと言えば納得できませんか?

id:aiomock

ご回答ありがとうございます。

2010/04/02 00:55:38
id:rouge_2008 No.2

回答回数595ベストアンサー獲得回数351ここでベストアンサー

ポイント100pt

JavaScriptを使用して、個数を選択した時に画面に(金額と合計金額が)反映されるようにしてみました。

変更点が多いのと、コメントも多くなっていた事から、不要なコードを削除したものを以下にそのまま記載します。

主な変更点は、

1.JavaScriptによる個数選択変更時の画面への反映

2.PHPによる個数変更の適用(コメントに記載したコードと同じ)

3.SQLクエリ発行回数を1回に変更(コメントに記載したコードと同じ)

4.不要なコメント等の削除

変更点の細かい解説は省略させていただきます。m(__)m

※解説が必要な部分がありましたら、返信でお願いします。

「kakunin.php」

<?

session_start();

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>カート確認・変更</title>
<script type="text/javascript">
<!--
function selChange(sel, ptxt, sum){
	var element = document.getElementById(sel);
	var num = element.selectedIndex;
	var price = document.getElementById(ptxt);
	var sumtxt = num * price.innerHTML;
	var sumprice = document.getElementById(sum);
	sumprice.innerHTML = sumtxt;
	var sumnum = document.getElementsByName("sumtxt");
	var allsum = 0;
	for (var n=0;n<sumnum.length;n++) {
		var goukei = new Array();
		goukei[n] = sumnum[n].innerHTML;
		allsum += parseInt(goukei[n]);
	}
	var allsumprice = document.getElementById("sougoukei");
	allsumprice.innerHTML = allsum;
}
//-->
</script>
</head>
<body>
<div>
<?php
echo "<table border=\"1\" bordercolor=\"black\" cellspacing=\"0\" cellpadding=\"3\">\r\n<tbody>\r\n";
echo "<tr>\r\n<td bgcolor=\"yellow\">写真</td>\r\n<td bgcolor=\"yellow\">タイトル</td>\r\n<td bgcolor=\"yellow\">値段</td>\r\n
<td bgcolor=\"yellow\">個数</td>\r\n<td bgcolor=\"yellow\">金額</td>\r\n<td bgcolor=\"yellow\">削除</td>\r\n</tr>\r\n";

require "database_connect.php";

$kanri_no = $_POST["kanri_no"];
$_SESSION["cart"]["$kanri_no"] = $_POST["kosuu"];

if($_POST["kosuu"] == "0" || $_POST["delete"]){
	unset($_SESSION["cart"][$kanri_no]);
}

$fnum = 0;
$n = 0; // 追加

foreach ($_SESSION["cart"] as $kanri_no => $kosuu){

	if($kosuu != 0) {
		$fnum++;
		$fname = 'myForm'.$fnum;
		$selname = 'mySel'.$fnum;
		$ptxtname = 'myPrice'.$fnum;
		$sumname = 'mySum'.$fnum;
		$n++;

		echo "<tr>\r\n<td><form id=\"$fname\" name=\"$fname\" action=\"kakunin.php\" method=\"POST\">";

		$sql = "select * from products_table WHERE PRODUCT_NAME = '".$kanri_no."'";
		$result = mysql_query($sql);

		while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
		// 写真
		// 価格もここで変数に入れておきます。
			echo $picture = $row["PICTURE"];
			$price = $row["PRICE"];
		}
		// 合計を配列に代入。
		$sum[$n] = $price * $kosuu ;

		//タイトル
		echo "</td>\r\n<td>".$kanri_no."</td>\r\n";
		//値段
		echo "<td><span id=\"$ptxtname\">$price</span><input type=\"hidden\" name=\"kanri_no\" value=\"$kanri_no\"></td>\r\n";
		//個数
		$html = "<td><select name=\"kosuu\" id=\"$selname\" onchange='selChange(\"$selname\", \"$ptxtname\", \"$sumname\")'>\r\n";
		$html .= "<option selected>$kosuu</option>\r\n";
		$html .= "<option value=\"1\">1</option>\r\n";
		$html .= "<option value=\"2\">2</option>\r\n";
		$html .= "<option value=\"3\">3</option>\r\n";
		$html .= "<option value=\"4\">4</option>\r\n";
		$html .= "<option value=\"5\">5</option>\r\n";
		$html .= "<option value=\"6\">6</option>\r\n";
		$html .= "<option value=\"7\">7</option>\r\n";
		$html .= "<option value=\"8\">8</option>\r\n";
		$html .= "<option value=\"9\">9</option>\r\n";
		$html .= "</select>\r\n</td>\r\n";
		echo $html;
		//金額
		echo "<td><span id=\"$sumname\" name=\"sumtxt\">$sum[$n]</span></td>\r\n";
		//削除ボタン
		echo "<td><input type=\"submit\" name=\"delete\" value=\"削除する\"><br>\r\n";
		echo "<input type=\"submit\" name=\"submit\" value=\"変更する\"></form></td>\r\n</tr>\r\n";
	}
}

// 総合計金額の計算
if($sum) {
	foreach($sum as $value) {
		$goukei += $value; 
	}
}

echo "<tr>\r\n<td align=\"right\" colspan=\"6\"><b>合計金額:<font color=\"red\" size=\"+2\"><span id=\"sougoukei\">$goukei</span></font><font size=\"+2\">円</font></b></td>\r\n";
echo "</tr>\r\n</tbody>\r\n</table>\r\n";

$html = "<div>\r\n";
$html .= "<table height=\"40\" border=\"0\" valign=\"center\">\r\n";
$html .= "<tr>\r\n";
$html .= "<td valign=\"center\"><a href=\"http://www.aiomock2008.sakura.ne.jp/TEST/test2.php\">引き続き商品を購入する</a></td>\r\n";
$html .= "<td valign=\"center\"><form method=\"POST\" action=\"kakunin2.php\">  <input type=\"submit\" name=\"kara\" value=\"カートを空にする\"></form></td>\r\n";
$html .= "<td valign=\"center\"><form method=\"POST\" action=\"kakunin3.php\">  <input type=\"submit\" name=\"kounyuu\" value=\"購入する\" onClick=\"return confirm('本当にボタンを押しますか?')\"></form></td>\r\n";
$html .= "</tr>\r\n</table>\r\n</div>\r\n";
$html .= "</div>\r\n</body>\r\n</html>\r\n";
echo $html;

?>

個数の選択変更ごとにその都度セッションデータを変更するのではなく、変更ボタンで確定した時にPHPで変更するようにしてあります。

なお、コメントに記載したコードと同じように、フォームの送信先は「kakunin.php」自身にしてあります。

もし元のコードのように、一旦「kakunin4.php」に飛ばしたい場合は、フォームの送信先を「action=\"kakunin.php\"」から「 action=\"kakunin4.php\"」にして、kakunin4.phpを以下のように変更する事で動作するはずです。

<?php

session_start();

$kanri_no = $_POST["kanri_no"];
$_SESSION["cart"]["$kanri_no"] = $_POST["kosuu"];

if(isset($_POST["delete"])) {

	unset( $_SESSION["cart"]["$kanri_no"] );

}

header('Location:kakunin.php');

?>

||>
id:aiomock

ご回答ありがとうございます。

コードを実行してみたところ写真と値段が表示されず、また金額が表示されませんでした。。

個数を変えても自動的に切り替わるということができなかったです。。。

どのように対処すればよろしいでしょうか。お手数おかけします。。。

コード自体が実行できてどのような流れでできているかということが把握でき、その後の機能の追加に問題がなければ私の場合問題ありません。まず機能が充実してつかえるということを一番大事に考えています。プログラムは、その後勉強していければと考えています。。。

今回のrouge_2008さんの回答誠にありがとうございます。

2010/04/03 21:33:54
id:GreenStar No.3

回答回数192ベストアンサー獲得回数46

ポイント26pt

用意していたものですが、動作確認は適当です。

javascriptで送信するという手を使っているので「カートを空にする」という事も、この中に入れ込む事なども可能になるでしょう。

<?php
session_start();
// ***** POST受け取りとセッション格納 *****
// このような処理は最初のほうにまとめておくと見通しが良くなります。
// 追加が行われること無くカートの中身確認に来たときのため$_POST['kanri_no']の存在チェックは追加してます。
if(isset($_POST["delete"])) {
    unset($_SESSION["cart"][$_POST["delete"]]);
} elseif(isset($_POST['kanri_no']) && isset($_POST['kosuu'])) {
    $_SESSION['cart'][$_POST['kanri_no']] = $_POST['kosuu'];
}
// ***** スタイルシート *****
// コードを短く見やすくするためにはスタイルシートを覚えるのは必須。これは記述例です。
// echoではなくヒアドキュメントを使って、そのままの形で出力というのも覚えておくと便利です。
print <<<endMark
<style>
    th { background-color:yellow; }
</style>

endMark;
// ***** javascript *****
print <<<endMark
<script type="text/javascript">
<!--
function kosuu(k, c){
    if(confirm(k + "の個数を変更します")) {
        document.forms[0].kanri_no.value = k;
        document.forms[0].kosuu.value = c;
        document.forms[0].submit;
    }
}
function sakujyo(k){
    if(confirm(k + "を削除します")) {
        document.forms[0].sakujyo.value = k;
        document.forms[0].submit;
    }
}

//-->
</script>

endMark;
// ***** TABLEヘッダ *****
print <<<endMark
<form method="POST" action="kakunin4.php">
<input type="hidden" name="sakujyo" value="">
<input type="hidden" name="kanri_no" value="">
<input type="hidden" name="kosuu" value="">
<table border="1" bordercolor="black" cellspacing="0" cellpadding="3">
<thead>
<tr><th>写真</th><th>タイトル</th><th>値段</th><th>個数</th><th>金額</th><th>削除</th></tr>
</thead>
<tbody>

endMark;
// ***** SQLの発行準備 *****
// データベースへの接続はコード内では一度行っておけば良いです。
require "database_connect.php";
// ***** TABLEボディ *****
// 並び順にこだわらないのであればSQLは一回で済ます事も可能だけど今回は既存の方式で。
$goukei = 0;
foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){
    $sql = "SELECT * FROM TEST WHERE PRODUCT_NAME = '" . $kanri_no . "'";
    $res = mysql_query($sql);
    while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
        $kingaku = $row['PRICE'] * $kosuu;
        $goukei += $kingaku;
        echo '<tr>'
           . '<td>' . $row['PICTURE'] . '</td>'
           . '<td>' . $row['PRODUCT_NAME'] . '</td>'
           . '<td>' . $row['PRICE'] . '</td>'
           . '<td><select onChange="kosuu(\'' . $row['PRODUCT_NAME'] . '\',this.options[this.selectedIndex].value)">'
           . '<option value="' . $kosuu . '" selected="selected">' . $kosuu . '</option>'
           . '<option value="1">1</option>'
           . '<option value="2">2</option>'
           . '<option value="3">3</option>'
           . '<option value="4">4</option>'
           . '<option value="5">5</option>'
           . '<option value="6">6</option>'
           . '<option value="7">7</option>'
           . '<option value="8">8</option>'
           . '<option value="9">9</option></select>'
           . '</td>'
           . '<td>' . $kingaku . '</td>'
           . '<td><input type="button" value="削除する" onClick="sakujyo(\'' . $row['PRODUCT_NAME'] . '\')"></td>'
           . "</tr>\n";
    }
}
// ***** TABLEボディ最終行 *****
echo '<tr>'
   . '<td align="right" colspan="6">'
   . '<b>合計金額:<font id="goukei" color="red" size="+2">' . $goukei . '</font><font size="+2">円</font></b></td>'
   . "</tr>\n";
// ***** TABLEフッタ *****
print <<<endMark
</tbody>
</table>
</form>
endMark;
// ***** 操作ボタン表示 *****
print <<<endMark
<br /><br />
<table height="40" border="0" valign="center">
<tr>
<td valign="center">
<a href="test2.html"> 引き続き商品を購入する</a>
</td>
<td valign="center">
<form method="POST" action="kakunin2.php"><br>  <input type="submit" name="kara" value="カートを空にする"></form>
</td>
<td valign="center">
  <input type="submit" name="kounyuu" value="購入する" onClick="return confirm('本当にボタンを押しますか?')"></form>
</td>
</tr>
</table>
endMark;
?>
id:aiomock

ご回答ありがとうございます。非常に短くシンプルになっており感動しました。

ありがとうございます。

2010/04/03 21:42:54
  • id:aiomock
    確認ページのコードですが現在以下のようになっております。

    <?


    session_start();




    echo '<table border="1" bordercolor="black" cellspacing="0" cellpadding="3"><tbody>';
    echo '<tr><td bgcolor="yellow">写真</td><td bgcolor="yellow">タイトル</td><td bgcolor="yellow">値段</td>
    <td bgcolor="yellow">個数</td><td bgcolor="yellow">金額</td><td bgcolor="yellow">削除</td>';


    require "database_connect.php";


    $kanri_no = $_POST["kanri_no"];

    $_SESSION["cart"]["$kanri_no"] = $_POST["kosuu"];


    foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){

    echo '<tr><td><FORM method="POST" action="kakunin4.php">';

    //写真
    require "database_connect.php";

    $sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { echo $row["PICTURE"]; }

    //タイトル

    echo '</td><td>'.$kanri_no.'</td>';

    //値段

    echo '<td><input type="hidden" name="kanri" value="'.$kanri_no.'">';

    require "database_connect.php";

    $sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { echo $row["PRICE"]; $price=$row["PRICE"]; }



    echo '</td>';

    //個数
    echo '<td><select name="kosuu">
    <option selected>'.$kosuu.'</option>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option></select>
    </td>';

    //金額

    echo '<td>';

    echo $price*$kosuu;

    echo '</td>';

    //削除ボタン

    echo '<td><input type="submit" name="delete" value="削除する"></td></form>';


    echo '</tr>';}
    echo '<tr><td align="right" colspan="6"><b>合計金額:<font color="red" size="+2">';

    $goukei="";

    foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){



    $sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { $kingaku=$row["PRICE"]; }

    $goukei=$goukei+$kingaku*$kosuu;


    }

    echo $goukei;

    echo '</font><font size="+2">円</font></b></td></tr></tbody></table><br><br>

    <table height="40" border="0" valign="center"><tr><td valign="center">  
    <a href="http://www.aiomock2008.sakura.ne.jp/TEST/test2.php">引き続き商品を購入する</a></td><td valign="center"><FORM method="POST" action="kakunin2.php"><br>  <input type="submit" name="kara" value="カートを空にする"></form></td><td valign="center"><FORM method="POST" action="kakunin3.php"><br>  <input type="submit" name="kounyuu" value="購入する" onClick="return confirm(\'本当にボタンを押しますか?\')"></form></td></tr></table>';


    ?>
  • id:aiomock
    個数を表示しているところは以下の部分です。

    //個数
    echo '<td><select name="kosuu">
    <option selected>'.$kosuu.'</option>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option></select>
    </td>';
  • id:aiomock
    作成しているページは以下になります。。

    http://www.aiomock2008.sakura.ne.jp/TEST/test2.php
  • id:rouge_2008
    削除ボタンの代わりに変更ボタンを用意するのでは駄目なのでしょうか?
    もちろん自動ではなく、ボタンを押した時に更新される事になりますが・・・
  • id:aiomock
    ご回答ありがとうございます。

    変更ボタンについてお聞きしたいのですが、

    Selectで個数が選択された後、指定したボタンを自動的に押すというようなことはJavaScriptで出来ますでしょうか?。

    確認画面の各行にボタンをおいて処理できるようにしたいと考えているのですが、そのような事は可能でしょうか?。

  • id:rouge_2008
    > Selectで個数が選択された後、指定したボタンを自動的に押すというようなことはJavaScriptで出来ますでしょうか?

    出来るはずですが、選択された後自動的に送信する方が簡単だと思います。
    その為の記述も用意されています。
    http://www.tohoho-web.com/js/form.htm
    ※「window.document.form.submit()」を参照してください。

    http://q.hatena.ne.jp/1180417250

    ただ、テスト用に用意した簡単なHTMLやPHPで試した場合は、大丈夫でしたが、残念ながら私の方では、aiomockさんに提示していただいたソースでは実行させる事が出来ませんでした。
    ※フォームの名前など必要箇所の出力は正常に出来ているはずなのですが・・・
    ※selectタグ内に直接記述する方法と、functionを呼び出す方法の両方で試してみましたがどちらも駄目でした。

    PHPを使用する方法では駄目でしょうか?
    変更ボタンの追加と一部修正だけで動作します。
    ※削除ボタンをそのまま残しておいても大丈夫です。

    kakunin.phpの変更後のソースをそのまま貼り付けます。
    ※変更点にコメントをつけてあります。

    ------------- ここから ---------------------

    <?php

    session_start();

    ?>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>カート確認・変更</title>
    <script type="text/javascript">
    <!--
    function selectChange(frm) {
    document.forms[frm].submit();
    }
    //-->
    </script>
    </head>
    <body>
    <div>
    <?php
    echo '<table border="1" bordercolor="black" cellspacing="0" cellpadding="3"><tbody>';
    echo '<tr><td bgcolor="yellow">写真</td><td bgcolor="yellow">タイトル</td><td bgcolor="yellow">値段</td>
    <td bgcolor="yellow">個数</td><td bgcolor="yellow">金額</td><td bgcolor="yellow">削除</td>';


    require "database_connect.php";

    $kanri_no = $_POST["kanri_no"];

    $_SESSION["cart"]["$kanri_no"] = $_POST["kosuu"];

    // セッション削除処理(※「kakunin4.php」からそのままコピー)
    if(isset($_POST["delete"])) {
    unset( $_SESSION["cart"][$_POST["kanri_no"]] );
    }

    // 商品ごとに違うフォーム名にする為に追加
    $fnum = 0;

    foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){

    if($kosuu != 0) { // 0個以外のみ出力処理を行います。
    $fnum++;
    $fname = "frm".$fnum;
    echo "<tr><td><FORM method=\"POST\" name=\"$fname\" action=\"kakunin.php\">"; // フォーム送信先PHPをこのPHPファイル自身に変更してあります。

    //写真
    require "database_connect.php";

    $sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    //while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { echo $row["PICTURE"]; }
    // SQLクエリ発行が一回で済むように上記をコメントアウトして、以下を追加(※画像だけでなく、金額もここで変数に格納しています。)
    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {
    echo $picture = $row["PICTURE"];
    $price = $row["PRICE"];
    }

    //タイトル

    echo '</td><td>'.$kanri_no.'</td>';

    //値段

    echo '<td><input type="hidden" name="kanri_no" value="'.$kanri_no.'">'; // name値を「kanri_no」に変更

    require "database_connect.php";

    // 以下コメントアウト
    // $sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    // 以下コメントアウト
    //while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { echo $row["PRICE"]; $price=$row["PRICE"]; }
    echo $price; // 格納済みの変数で出力

    echo '</td>';

    //個数
    // JavaScript用に変更(このままでもPHPでの動作に影響はありませんが、「onchange='~'」の部分は削除しても大丈夫です。)
    //echo "<td><select name=\"kosuu\" onchange='document.forms[\"$fname\"].submit()'>";
    echo "<td><select name=\"kosuu\" onchange='selectChange(\"$fname\")'>";
    echo '<option selected>'.$kosuu.'</option>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option></select>
    </td>';

    //金額

    echo '<td>';

    echo $price*$kosuu;

    echo '</td>';

    //削除ボタン

    echo '<td><input type="submit" name="delete" value="削除する"><br>'."\r\n";
    echo '<input type="submit" name="submit" value="変更する"></form></td>'."\r\n"; // 変更用ボタンを追加


    echo '</tr>';}
    } // 0個以外の出力処理終了

    echo '<tr><td align="right" colspan="6"><b>合計金額:<font color="red" size="+2">';

    $goukei="";

    foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){

    // コメントアウト
    //$sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");
    // コメントアウト
    //while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { $kingaku=$row["PRICE"]; }

    // 価格(単価)の変数を初回のクエリ発行後に格納済みの$priceに統一する為コメントアウトして、代わりの処理を追加
    //$goukei=$goukei+$kingaku*$kosuu;
    $goukei = $goukei + $price * $kosuu;

    }

    echo $goukei;

    echo '</font><font size="+2">円</font></b></td></tr></tbody></table><br><br>

    <table height="40" border="0" valign="center"><tr><td valign="center">  
    <a href="http://www.aiomock2008.sakura.ne.jp/TEST/test2.php">引き続き商品を購入する</a></td><td valign="center"><FORM method="POST" action="kakunin2.php"><br>  <input type="submit" name="kara" value="カートを空にする"></form></td><td valign="center"><FORM method="POST" action="kakunin3.php"><br>  <input type="submit" name="kounyuu" value="購入する" onClick="return confirm(\'本当にボタンを押しますか?\')"></form></td></tr></table>'."\r\n";
    echo "<div>\r\n</body>\r\n</html>\r\n";
    ?>

    --------------- ここまで -----------------------

    ※一応JavaScriptでの動作テストに使用した記述も残してありますが、邪魔だと思いますので削除しても大丈夫です。

    ※JavaScriptで動作させたい場合は、詳しい方の回答を待ってみてください。
  • id:rouge_2008
    一部変更忘れがありました。m(__)m

    1.データベースの接続用ファイルは一回呼び出せばいいので、最初の記述だけ残してその他の「require "database_connect.php";」は削除するかコメントアウトしてください。

    2.ファイルの文字コード「UTF-8」用の記述にしてあります。
    その他の文字コードの場合は、以下の部分を変更してください。
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
  • id:rouge_2008
    すみません。
    合計金額の表示処理に間違いがありました。
    次のように変更してください。

    ・1箇所目
    (~略~)37行目くらい
    // 商品ごとに違うフォーム名にする為に追加
    $fnum = 0;
    $n = 0; // 追加

    foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){

    if($kosuu != 0) {
    $fnum++;
    $fname = "frm".$fnum;
    $n++; // 追加
    (~略~)


    ・2箇所目
    (~略~)60行目くらい
    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {
    echo $picture = $row["PICTURE"];
    $price = $row["PRICE"];
    }

    $sum[$n] = $price * $kosuu ; // 追加
    (~略~)


    ・3箇所目
    (~略~)100行目くらい
    //金額

    echo '<td>';

    //echo $price*$kosuu; // 次に変更
    echo $sum[$n];
    (~略~)


    ・4箇所目
    (~略~)120行目くらい
    // 次行から変更(コメントアウトか削除)
    //foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){

    //$sql=mysql_query("select * from products_table WHERE PRODUCT_NAME = '".$kanri_no."' ");

    //while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { $kingaku=$row["PRICE"]; }

    //$goukei=$goukei+$kingaku*$kosuu;
    //$goukei = $goukei + $price * $kosuu;

    //}

    // 上記の代わりに追加
    foreach($sum as $value) {
    $goukei += $value;
    }

    echo $goukei; // ここは変更なし
    (~略~)

    以上で正常に動作するはずです。
    大変失礼しました。

    ※結局「document.forms["~"].submit()」では動作させる事が出来ませんでしたが、正常に動作した場合はフォームの送信になります。
    画面の更新か、あるいは遷移してもいいのでしたら、PHPだけで処理してもいいのではないかと思います。
  • id:GreenStar
    id:rouge_2008さん>残念ながら私の方では、aiomockさんに提示していただいたソースでは実行させる事が出来ませんでした。
    私はrouge_2008さんのコードは動かしてませんがコメントが沢山飛んできたので、どうしようかと思いました。
    id:aiomockさんは下記で動かしておられますので、失礼ながら、根本的にどこか思い違いか行き違いがあるのかもしれませんね。
    http://www.aiomock2008.sakura.ne.jp/TEST/test2.php


    id:aiomockさん>確認画面の各行にボタンをおいて処理できるようにしたいと考えているのですが、そのような事は可能でしょうか?。
    可能ですが、利用者としては面倒で煩わしい処理になるので避けて欲しいですね。
    (個数を触る度に確認画面が出たりするのは面倒ですよね。)
    まずはシンプルに、「変更のあった箇所のみ文字色や背景色を変え」て「個数の変更がありました。赤色で示されています。」などの文章を「購入するボタン」のそばに目立つように表示するなどが判りやすいとは思います。
    (小計、合計金額もjavascript側で再計算するようにしたほうがいいですが、一度にやらないほうがいいかもしれないですね。)
    色を変えるだけであればjavascriptの中でも比較的簡単な処理で対応できますしコードの変更も少なくて済みます。

    id:aiomockさんはphpのコードを示しておられますが継ぎ接ぎだらけで無駄が多く、この先、機能を充実していくにしても問題がおきそうです。以前コメントで書いた(質問とは離れた話だったので消しましたがコメントの通知メールで残ってませんか?)ように、もう少しシンプルになりますので、ご希望であれば、javascript組み込みに合わせて kakunin.php を全面的に整理しなおして回答しましょうか?


    本来は別質問にすべき事かもしれませんが、成り行きですね。rouge_2008さん軽く恨みますw
  • id:GreenStar
    >全面的に整理しなおして

    軽く考えてみたけど整理しないとjavascriptから扱いづらいから整理必須ですね。返事待ってから作りだすので返答は遅れますよ。
  • id:rouge_2008
    > aiomockさん

    何回もすみません。
    項目表示行の閉じタグが足りませんでしたので、追加して置いてください。
    echo '<tr><td bgcolor="yellow">写真</td><td bgcolor="yellow">タイトル</td><td bgcolor="yellow">値段</td>
    <td bgcolor="yellow">個数</td><td bgcolor="yellow">金額</td><td bgcolor="yellow">削除</td></tr>';

    それから、訂正箇所4箇所目に一部間違いがありました。
    正しくは以下になります。
    (※「products_table」テーブルは、私が動作テストで使用していました。)

    ・4箇所目
    (~略~)120行目くらい
    // 次行から変更(コメントアウトか削除)
    //foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){

    //$sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    //while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { $kingaku=$row["PRICE"]; }

    //$goukei=$goukei+$kingaku*$kosuu;
    //$goukei = $goukei + $price * $kosuu;

    //}

    // 上記の代わりに追加
    foreach($sum as $value) {
    $goukei += $value;
    }

    echo $goukei; // ここは変更なし
    (~略~)


    GreenStarさんが書かれたように、ソースに不要な部分が混じって読み難くなっていますね・・・
    動作確認が済んだら、コメントアウト部分は削除してしまってください。



    > GreenStarさん

    > id:aiomockさんは下記で動かしておられますので、失礼ながら、根本的にどこか思い違いか行き違いがあるのかもしれませんね。

    aiomockさんのテストでもまだ動作していない(させていない?)ようですが、何か勘違いされているのでしょうか?
    私が言いたかったのは、選択項目の変更時にJavaScriptでフォームを自動送信するように変更出来なかったという事です。
    上記JavaScriptによる実装は私には実現できなかったので、個数選択後に変更ボタンを押す事によりフォームを送信して、個数変更が適用されるようにしたコードを提示しました。


    > 本来は別質問にすべき事かもしれませんが、成り行きですね。rouge_2008さん軽く恨みますw

    心外です。
    私とは関係ないはずです。
  • id:rouge_2008
    『確認画面で商品個数を変更すると確認画面を自動更新して個数の変更が反映される』に対応した物を回答させていただきました。
    上記の部分にはJavaScriptを使用しています。
    セッションについては、変更ボタンを確定した時に反映した方が良いと思いましたので、その点についてはコメントに記載したコードと変更がありません。
    ご確認よろしくお願いします。
  • id:aiomock
    ご連絡遅れ誠に申し訳ありません。回答大変ありがとうございます。

    rouge_2008 さん

    ご回答ありがとうございます。無事に変更ができるようになりました。
    度重なるご回答本当にありがとうございます。

    GreenStar さん

    スクリプトを書いていただけるとのことでありがとうございます。
    スクリプトの状況ですが、どんどん機能を追加するにあたって長くなってきました。
    継ぎ接ぎだらけ の言葉に代表されるように、これまで質問に回答いただいたものを自分で消化しながら作成してきたので非常に長く無駄が多いものになっているのは事実です。
    現在のスクリプトを短くシンプルにできるのであれば大変うれしいです。
    大変お手数をおかけしますが、スクリプトをシンプルにできるようでしたらお願いいたします。

  • id:aiomock
    現在のコードですが rouge_2008 さん の回答を参考にして以下のようになっております。 やや長いかもしれません。。


    <?php

    session_start();

    ?>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=SJIS">
    <title>カート確認・変更</title>
    <script type="text/javascript">
    <!--
    function selectChange(frm) {
    document.forms[frm].submit();
    }
    //-->
    </script>
    </head>
    <body>
    <div>
    <?php
    echo '<table border="1" bordercolor="black" cellspacing="0" cellpadding="3"><tbody>';
    echo '<tr><td bgcolor="yellow">写真</td><td bgcolor="yellow">タイトル</td><td bgcolor="yellow">値段</td>
    <td bgcolor="yellow">個数</td><td bgcolor="yellow">金額</td><td bgcolor="yellow">削除</td>';


    require "database_connect.php";

    $kanri_no = $_POST["kanri_no"];

    $_SESSION["cart"]["$kanri_no"] = $_POST["kosuu"];

    // セッション削除処理(※「kakunin4.php」からそのままコピー)
    if(isset($_POST["delete"])) {
    unset( $_SESSION["cart"][$_POST["kanri_no"]] );
    }

    // 商品ごとに違うフォーム名にする為に追加
    $fnum = 0;
    $n = 0;

    foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){

    if($kosuu != 0) { // 0個以外のみ出力処理を行います。
    $fnum++;
    $fname = "frm".$fnum;
    $n++;
    echo "<tr><td><FORM method=\"POST\" name=\"$fname\" action=\"kakunin.php\">"; // フォーム送信先PHPをこのPHPファイル自身に変更してあります。

    //写真
    require "database_connect.php";

    $sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    //while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { echo $row["PICTURE"]; }
    // SQLクエリ発行が一回で済むように上記をコメントアウトして、以下を追加(※画像だけでなく、金額もここで変数に格納しています。)
    while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) {
    echo $picture = $row["PICTURE"];
    $price = $row["PRICE"];
    }

    $sum[$n] = $price * $kosuu ;

    //タイトル

    echo '</td><td>'.$kanri_no.'</td>';

    //値段

    echo '<td><input type="hidden" name="kanri_no" value="'.$kanri_no.'">'; // name値を「kanri_no」に変更

    require "database_connect.php";

    // 以下コメントアウト
    // $sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");

    // 以下コメントアウト
    //while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { echo $row["PRICE"]; $price=$row["PRICE"]; }
    echo $price; // 格納済みの変数で出力

    echo '</td>';

    //個数
    // JavaScript用に変更(このままでもPHPでの動作に影響はありませんが、「onchange='~'」の部分は削除しても大丈夫です。)
    //echo "<td><select name=\"kosuu\" onchange='document.forms[\"$fname\"].submit()'>";
    echo "<td><select name=\"kosuu\" onchange='selectChange(\"$fname\")'>";
    echo '<option selected>'.$kosuu.'</option>
    <option>1</option>
    <option>2</option>
    <option>3</option>
    <option>4</option>
    <option>5</option>
    <option>6</option>
    <option>7</option>
    <option>8</option>
    <option>9</option></select>
    </td>';

    //金額

    echo '<td>';

    //echo $price*$kosuu;
    echo $sum[$n];

    echo '</td>';

    //削除ボタン

    echo '<td><input type="submit" name="delete" value="削除する"><br>'."\r\n";
    echo '<input type="submit" name="submit" value="変更する"></form></td>'."\r\n"; // 変更用ボタンを追加


    echo '</tr>';}
    } // 0個以外の出力処理終了

    echo '<tr><td align="right" colspan="6"><b>合計金額:<font color="red" size="+2">';

    $goukei="";

    //foreach ($_SESSION["cart"] as $kanri_no=>$kosuu){

    // コメントアウト
    //$sql=mysql_query("select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."' ");
    // コメントアウト
    //while ($row = mysql_fetch_array($sql, MYSQL_ASSOC)) { $kingaku=$row["PRICE"]; }

    // 価格(単価)の変数を初回のクエリ発行後に格納済みの$priceに統一する為コメントアウトして、代わりの処理を追加
    //$goukei=$goukei+$kingaku*$kosuu;
    //$goukei = $goukei + $price * $kosuu;

    //}

    foreach($sum as $value) {
    $goukei += $value;
    }

    echo $goukei;

    echo '</font><font size="+2">円</font></b></td></tr></tbody></table><br><br>

    <table height="40" border="0" valign="center"><tr><td valign="center">  
    <a href="http://www.aiomock2008.sakura.ne.jp/TEST/test2.php">引き続き商品を購入する</a></td><td valign="center"><FORM method="POST" action="kakunin2.php"><br>  <input type="submit" name="kara" value="カートを空にする"></form></td><td valign="center"><FORM method="POST" action="kakunin3.php"><br>  <input type="submit" name="kounyuu" value="購入する" onClick="return confirm(\'本当にボタンを押しますか?\')"></form></td></tr></table>'."\r\n";
    echo "<div>\r\n</body>\r\n</html>\r\n";
    ?>
  • id:rouge_2008
    IEで合計金額の表示がされませんでした。
    複数ブラウザでの確認を忘れていました。
    申し訳ありません。m(__)m
    原因は分かっていますので、対処できましたらコメントにて修正させていただきます。
    ※Win上のFirefox3.6.xとSafari4では正常に動作します。
  • id:rouge_2008
    63行目付近でSQLを作成していますが、テーブル名がテストした時のままになっていました。

    $sql = "select * from products_table WHERE PRODUCT_NAME = '".$kanri_no."'";

    上記をaiomockさんの環境に合わせて次のように変更してください。

    $sql = "select * from TEST WHERE PRODUCT_NAME = '".$kanri_no."'";


    IEでの合計金額表示についてはもう少しお待ちください。
    大変申し訳ありませんでした。
  • id:rouge_2008
    お待たせして申し訳ありません。
    少し手こずっていました。(^^;
    変更箇所は次のとおりになります。

    1.headタグ内のJavaScriptの記述を次の通りに変更してください。

    <script type="text/javascript">
    <!--
    function selChange(sel, ptxt, sum){
    var element = document.getElementById(sel);
    var num = element.selectedIndex;
    var price = document.getElementById(ptxt);
    var sumtxt = num * price.innerHTML;
    var sumprice = document.getElementById(sum);
    sumprice.innerHTML = sumtxt;
    var subt = document.getElementsByName("sumval");
    var allsum = 0;
    for (var n=0;n<subt.length;n++) {
    var goukei = new Array();
    var selname = 'mySum'+(n+1);
    var elm = document.getElementById(selname);
    goukei[n] = elm.innerHTML;
    allsum += parseInt(goukei[n]);
    }
    var allsumprice = document.getElementById("sougoukei");
    allsumprice.innerHTML = allsum;
    }
    //-->
    </script>


    2.94行目(※上記の変更後は97行目)くらいにある次のタグを

    echo "<td><span id=\"$sumname\" name=\"sumtxt\">$sum[$n]</span></td>\r\n";

    ここを以下のように変更してください。

    echo "<td><input type=\"hidden\" name=\"sumval\" value=\"$sum[$n]\"><span id=\"$sumname\" name=\"sumtxt\">$sum[$n]</span></td>\r\n";


    これから変更後の「kakunin.php」を日記の方に投稿しておきます。
    トラックバックしますので、必要でしたらそちらをご確認ください。
    いろいろお手間を取らせて申し訳ありませんでした。m(__)m
  • id:rouge_2008
    上記修正項目の2つ目について、さらに訂正させていただきます。
    正しくは以下のように直してください。

    echo "<td><input type=\"hidden\" name=\"sumval\" value=\"$sum[$n]\"><span id=\"$sumname\">$sum[$n]</span></td>\r\n";


    現状でも動作に支障はありませんが、W3Cの仕様ではspanタグにname属性は認められておらず、今回のコードの動作上も必要ないため「name=\"$sumname\"」は削除して大丈夫です。(日記の方も修正してあります。)
    度々申し訳ありませんでした。
  • id:aiomock
    rouge_2008 さん

    ご回答ありがとうございます。
    無事実現したいと思っていたことが実現できました。
    誠にありがとうございます。
  • id:rouge_2008
    ご希望に沿えて良かったです。(^^)
    前回と今回の質問でたくさんのポイントといるかをありがとうございました。
  • id:rouge_2008
    先ほどテストページを確認しましたが、まだ作成途中なのでしょうか?
    少し気がついた事がありますのでアドバイスします。
    Selectボックスで在庫数の分だけ選択肢が表示されるようになっていますが、確認ページではカートに入れた個数分しか表示されるようになっていません。
    変更する時に現在カートに入れている個数以下にしか変更できませんので、表示箇所を以下のように変更してみてください。
    ※for文を使用している場合の記述です。
    for($o=1; $o<$zaiko,$o<=10; $o++) {
    echo "<option value=\"$o\">$o</option>\r\n";
    }

    ※ユーザーの操作性を考えて、在庫数以下でなおかつ10以下を選択できるような条件にしましたが、もう少し表示する必要がありましたら、「$o<=10」の数値を変更してください。(選択しにくいので、あまり大きな数値にしない方がいいと思います。)

    ※$zaikoにはSQL発行後の結果の取得処理の所で在庫数を格納しておきます。
    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    (~ 略 ~)
    $zaiko = $row["KOSUU"];
    }

    ※まだ変更ボタンが追加されていないようですが、変更ボタンを押さないと個数変更が適用されない仕組みですのでご注意ください。
  • id:aiomock
    ご回答ありがとうございます。そして連絡遅れ申し訳ありません^^;。

    コード試させていただきました。
    実行したところ在庫数が10以下の時も選択で1~10まで選択できるようになってしまっているのですが
    以下のコードが誤っているのでしょうか。。大変お手数をおかけしますがもしよろしければご回答お待ちしております。。


    while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {
    $zaiko = $row["KOSUU"];
    }

    echo '<td><select name=\"kosuu\" id=\"$selname\" onchange=\'selChange(\"$selname\", \"$ptxtname\", \"$sumname\")\'>\r\n"';

    for($o=1; $o<$zaiko,$o<=10; $o++) {
    echo "<option value=\"$o\">$o</option>\r\n";
    }

    echo "</select>\r\n</td>\r\n";
  • id:aiomock
    変更ボタンは自動で値段が切り替わるようにしたかったので、背景の1px×1pxの画像を作成しそれを変更ボタンに変えました。とても小さいのでボタンがないように見えます。
  • id:rouge_2008
    お返事が遅くなって申し訳ありません。
    「,」ではなく「&&」で2つ目の条件を指定してください。
    「,」だと「or」を指定した場合と同じで、どちらかに合致すれば良くなるようです。
    すみませんでした。

    echo '<td><select name="kosuu" id="$selname" onchange=\'selChange("$selname", "$ptxtname", "$sumname")\'>\r\n"';
    "<option selected>$kosuu</option>\r\n"; //この記述も元に戻して置いてください。この行をつけない場合、javascriptの方を少し変更する必要があります。
    for($o=1; $o<=$zaiko && $o<=10; $o++) {
    echo "<option value=\"$o\">$o</option>\r\n";
    }

    echo "</select>\r\n</td>\r\n";

    ※また、echoで出力する文字列を「"」から「'」
    で囲むように変更したのでしたら、「"」の前の「\」は削除してください。(上記は変更・削除してあります。)
    (現在、この変更が原因で、javascriptがエラーになっているようでした。)

    変更ボタンに関してですが、自動で切り替えるためという事ですが、どのタイミングで反映させるつもりなのでしょうか?
    現状では、ボタンを押さない限りフォームは送信されないコードになっています。
  • id:rouge_2008
    個数の選択変更時に、JavaScriptでフォームが自動送信されるようにしてみました。
    以前は出来ませんでしたが今度はOKでした。

    1.JavaScriptの記述を以下に変更してください。

    <script type="text/javascript">
    <!--
    function selChange(frm){

    document.forms[frm].submit();
    }
    //-->
    </script>


    2.Selectタグの記述を以下のように変更します。

    echo "<td><select name=\"kosuu\" id=\"$selname\" onchange='selChange(\"$fname\")'>\r\n";


    3.変更ボタンは必要ありませんので、削除してください。


    変更点は以上の3つです。お試しください。

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません