🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

1415閲覧

FORMで入力した内容を配列にして受け渡す方法

ej-ack

総合スコア6

PHP

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

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

DB2

DB2(IBM Database2)は、IBMのリレーショナルデータベース管理システム製品です。 UNIXとWindows、IBM社のメインフレームOS用が用意されており、 幅広いプラットフォームに対応しています。

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2019/10/23 04:09

編集2019/10/23 05:37

前提・実現したいこと

初めて質問させていただきます。書き方不十分だったら申し訳ございません。
教えていただけたら補足いたします。

<やりたいこと>
phpでデータベース(DB2)にODBCで接続してSQLで得た結果を表示→
表示項目(商品コード・FLG1・FLG2)のうちFLG1・FLG2の内容をfromで書き換えして結果をデータベースに戻したい。
*FLG1・FLG2は書き換えずそのままの場合もある
<現状>
a.phpでSQLの結果を表示。チェックボックスをつける。チェックした値をb.phpに受け渡し。
input type="checkbox" name="chk[]" value="$ROW[0]">$ROW[0]

b.phpで受け取った値をSQLの条件に入れて絞った状態で表示、変更したい項目をinput type="text"で書き換え可能にする 。
(FLG1・FLG2には1かブランクが入っています)
a.phpからのチェックボックスの受け取りはうまくいってます。
$checkbox = $_REQUEST["chk"];

商品コード・FLG1・FLG2の内容をひとまとめ(配列)にして
c.phpに受け渡して uapdate でデータベース書き換える。
この
b.phpからc.phpへの受けわたしがうまくいかないです。
b.phpは以下の通りです。
ご教示いただきますようお願い致します。

該当のソースコード

php

1b.php 2<?php 3$checkbox = $_REQUEST["chk"]; 4?> 5 6<?php 7// ODBC接続パラメータ 8$DATA_SOURCE = "odbc:DB2" ; 9$USERNAME = "***" ; 10$PASSWD = "***" ; 11// DBの接続 12$DBH = new PDO("$DATA_SOURCE", "$USERNAME", "$PASSWD" ); 13$DBH->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 14// レコードの取得 15 $SQL = " select PRCD,FLGS,FLGL". 16 " from PRI". 17 " where PRCD in('$checkbox[0]','$checkbox[1]','$checkbox[2]','$checkbox[3]','$checkbox[4]')". 18 " order by PRCD"; 19 20 21$STH = $DBH->prepare($SQL); 22$STH->execute(); 23 24print"<form action="c.php" method="post">"; 25 26print"<table border="1" cellspacing="1" width="750">"; 27print"<tr><th>商品コード</th><th>FLG1</th><th>FLG2</th></tr>"; 28$count=0; 29while ($ROW = $STH->fetch(PDO::FETCH_NUM)) { 30print"<tr><td>$ROW[0]&nbsp;</td>"; 31 32print "<td><input type="text" name="flgs" value="$ROW[1]"></td>"; 33print "<td><input type="text" name="flgl" value="$ROW[2]"></td>"; 34 35 36//代入 37$a[$count]=array($ROW[0],$ROW[1],$ROW[2]); 38 39 40} 41 ++$count; 42 43print"</table>"; 44print "<input type="submit" value=" 実 行 ">"; 45 print "<input type="hidden" name="a" value="$a">"; 46 47print "</form>"; 48 49 // DB接続の終了 50unset($DBH) ; 51?> 52</from> 53</table> 54</html>

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

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

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

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

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

Orlofsky

2019/10/23 04:14

同じSQLでもデータベースやそのバージョンによって方言が大きいですから、どのデータベースを使うのかを質問のタグで示したり、バージョンも明記した方が適切なコメントが付き易いです。
ej-ack

2019/10/23 04:37

Orlofsky様 教えていただきありがとうございます。修正して更新しなおしました。
m.ts10806

2019/10/23 04:46

タイトルと内容が沿ってないように見えます
ej-ack

2019/10/23 05:45

m.ts10806 様 ご指摘ありがとうございます。 やりたいことはFORMに入力された複数項目の値を配列にいれて次のphpファイルに受け渡したいのでこのタイトルにしました。 うまくタイトルにまとめられずすみません。
ej-ack

2019/10/23 05:47

Orlofsky 様 色々教えて頂きありがとうございます。タグ追加しました。
guest

回答1

0

ベストアンサー

入力システムは

  • 入力ページ
  • 確認ページ
  • 修正・再入力ページ
  • 登録ページ
  • 登録完了ページ

の流れで処理をします。
その際、確認ページはインタフェースとしては省略できますが
再入力ページと確認ページは機能を共有してはいけません。

本件ですとおそらくaで入力してbに飛ぶという流れだと
bが確認ページになります。
したがってbでは再入力してはいけません。
要件が不足もしくはエラーの際は別途ページcに飛んで再入力させてください

sample

ざっと流れだけ

PHP

1<?PHP 2session_start(); 3$chk=filter_input(INPUT_GET,"chk",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 4if(is_null($chk) and isset($_SESSION["chk"])){ 5 $chk=$_SESSION["chk"]; 6} 7$action=filter_input(INPUT_GET,"action"); 8if(is_null($chk)){ 9print <<<eof 10<form method="get"> 11<input type="hidden" name="action" value="confirm"> 12<label><input type="checkbox" name="chk[0]" value="A">A</label> 13<label><input type="checkbox" name="chk[1]" value="B">B</label> 14<label><input type="checkbox" name="chk[2]" value="C">C</label> 15<input type="submit" value="send"> 16</form> 17eof; 18}elseif($action=="confirm"){ 19 $_SESSION["chk"]=$chk; 20 $h_chk=htmlspecialchars(implode(",",$chk)); 21print <<<eof 22<form method="get"> 23<input type="hidden" name="action" value="modify"> 24<div>chk:{$h_chk}</div> 25<input type="submit" value="send"> 26<input type="submit" name="action" value="change"> 27</form> 28eof; 29}elseif($action=="change"){ 30 $checked=array_fill(0,3,""); 31 foreach(array_keys($_SESSION["chk"]) as $val){ 32 $checked[$val]=" checked"; 33 } 34 $_SESSION["chk"]=null; 35 36print <<<eof 37<form method="get"> 38<input type="hidden" name="action" value="confirm"> 39<label><input type="checkbox" name="chk[0]" value="A"{$checked[0]}>A</label> 40<label><input type="checkbox" name="chk[1]" value="B"{$checked[1]}>B</label> 41<label><input type="checkbox" name="chk[2]" value="C"{$checked[2]}>C</label> 42<input type="submit" value="send"> 43</form> 44eof; 45}elseif($action=="modify"){ 46 /* SESSIONを利用して更新処理 */ 47 header('Location:'.$_SERVER["SCRIPT_NAME"].'?action=complete'); 48 exit; 49}elseif($action=="complete"){ 50 $_SESSION["chk"]=null; 51 print<<<eof 52更新しました<br> 53[ <a href="{$_SERVER["SCRIPT_NAME"]}">戻る</a> ] 54eof; 55}else{ 56 $_SESSION["chk"]=null; 57print<<<eof 58不正処理<br> 59[ <a href="{$_SERVER["SCRIPT_NAME"]}">戻る</a> ] 60eof; 61} 62

投稿2019/10/23 04:22

編集2019/10/23 10:34
yambejp

総合スコア116661

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

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

ej-ack

2019/10/23 09:54

yambejp様 早速のご回答ありがとうございました。 気づくのがおくれてしまい遅くなってすみません。 aで入力対象をしぼり、bで入力、cでuodateしようと思っています。 aをなくしてbの画面に全商品データを表示させ、修正したものだけをcに受け渡す方法だと入力が一回なので大丈夫でしょうか。その際、全データ中のどれを修正したか判別する方法ってありますか。 修正したレコードの商品コード、FLG1、FLG2をまとめてcに受け渡したいです。 修正レコードは複数行あります。 いい方法があればご教示のほどよろしくお願い致します。
yambejp

2019/10/23 10:33

確認、修正画面がある更新の流れを書いておきました
ej-ack

2019/10/23 11:19

yambejp様 早速にsampleコードありがとうございます!こんな高度なソースを書いたことがなくてとても参考になります! array_fillがまとめて配列に入れる部分ですね。初めて知りました。今から一つづつ読み解いていきます。少し時間かかりそうですのでとりあえずお礼まで。
ej-ack

2019/10/24 09:51

yambejp様 いただいたsampleソースを見ながら自分のソースにあてはめてみました。 SQL結果を表示させてそこにチェックボックスをつけチェックをつけた値のみとることができました。まだ完成ではありませんががんばれそうです。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問