スレッド表示 | フラット表示〕 全トピック 920 件中 294 番目 次≫ ≪前

値の受け渡し

created: 2006-01-13 16:17 | modified: 2006-01-21 23:04 | reply: 8

[2856] 値の受け渡し

user: しげっち | created: 2006-01-13 16:17
お世話になってます、しげっちです。
単純な事なんでしょうがアドバイスをお願いします。

1、解らないこと

値の受け渡し方法

2、内容

オラクルからマスタデータを取得し表示させ(コード、名称、荷姿)そのコードをいくつ発注するか、数量を入力させる為のテキスト入力の列も追加表示させる。

ユーザーがその数量入力テキストを入力し(全部のコードに対して入力は発生しない)INPUT TYPE=SUBMIT にて次の画面でその入力内容を表示(コード、名称、荷姿、数量)の上、
CSVの生成を行う。

3、出来ていること
オラクルからのデータ表示と数量入力テキストの表示

INPUT TYPE=SUBMIT にて次の画面でその入力内容を表示のところでその受け渡し方法が解りません。

4、考えたこと

○配列にデータを収める?
 収めれることは出来たがそれをどうやって渡す?

○print "<INPUT TYPE=TEXT name=su".$i.">;
 でループし変数suに一意な名前を与えPOSTで渡す?
 受け取って次のページでの処理方法が思いつきません。

○セッションの使用?
 セッション自体がよく理解できておらず、イメージが沸き ません。

どうかアドバイスお願いします。

環境
Win2K
PHP5.03
Apache2.0.53
reply: 2857 返信 編集 削除

[2857] Re: 値の受け渡し

user: ぱぴよん | created: 2006-01-14 08:55
しげっちさんはじめまして、ぱぴよんと申します。


> ○配列にデータを収める?
> 収めれることは出来たがそれをどうやって渡す?

これは具体的にはどのようなものでしょうか。
<input type="text" name="arr[]">
のような形でしょうか。
受け取り側としては以下のようになります。
foreach($_POST['arr'] as $key => $value) {
print $value;
}




> ○print "<INPUT TYPE=TEXT name=su".$i.">;
> でループし変数suに一意な名前を与えPOSTで渡す?
> 受け取って次のページでの処理方法が思いつきません。

こちらの場合ですと受け取り側では
$i = 0;
while(isset($_POST["su{$i}"])) {
print $_POST["su{$i}"];
$i++;
}
というような形になるかと思います。
これはisset()により変数が定義されているかを判断(ループでどこまで作られたかの判断)し、
存在している間は値を受け取るという処理です。
Parent: 2856  reply: 2858 返信 編集 削除

[2858] Re.Re: 値の受け渡し

user: しげっち | created: 2006-01-14 19:37
ぱぴよんさん はじめまして、しげっちと申します。
お返事ありがとうございます。

結果配列として渡す事に成功しました、ありがとうございます。

そこでまた分らないことにぶつかりました・・・・

○わからないこと
 配列として受け取ったデータ(コード、名称、数量)のうち
 数量が入力されているものだけ表示したいのだが、その考え  方、及び書き方が思いつきません。

○考えたこと
 IFで判断させる。数量がNULLならそれに関連付けてるCODE、名 称も配列から削除を行う。
 しかしその考え方書き方が分りません

あつかましいですがアドバイスお願いします。


---以下ソース主要部分です

<?php	

if (!$conn = odbc_connect("○○","○○","○○")) {
die ("データベース接続エラー");
} else {
$conn = odbc_connect("○○","○○","○○");
}

$sql = "データ抽出SELECT文";
?>
<table border="1">
<tr>
<th>H_NO</th>
<th>CODE</th>
<th>名称</th>
<th>荷姿</th>
<th>数量</th>
</tr>
<?php
$res = odbc_exec($conn,$sql);

//$i は意味なし
$i = 1;
$r = 0;
$r1 = 0;
$r2 = 0;
$r3 = 0;

while ( $row = odbc_fetch_array($res)) {

?>
<tr>
<td align="center">
<?php
$r = $row["H_NO"];
print "<input type=text size=4 name=arr[] value=".$r.">";
?>
</td>
<td align="center">
<?php
$r1 = $row["CODE"];
print "<input type=text size=5 name=arr[] value=".$r1.">";
?>
</td>
<td align="left">
<?php
$r2 = $row["MEISHOU"];
print "<input type=text size=50 name=arr[] value=".$r2.">";
?>
</td>
<td align="left" size="small">
<?php
$r3 = $row["NISUGATA"];
print "<input type=text size=10 name=arr[] value=".$r3.">";
?>
</td>
<td align="right">
<?php
print "<input type=text size=4 name=arr[]>";

?>
</td>
</tr>
<?php
$i++;
}
print "</table>";
odbc_free_result($res);
odbc_close($conn);
?>
<input type="submit" value="確 認">


----ここまで

何回も申し訳ありませんがご教授お願い致します。
Parent: 2857  reply: 2859 2862 返信 編集 削除

[2859] データベースでの型によりますが・・・

user: ぱぴよん | created: 2006-01-15 12:00
数値型であれば
while ( $row = odbc_fetch_array($res)) {
if($row["数量のフィールド名"] === 0) continue;
  ・
  [ここで表示]
  ・
}
※数値の初期値で0が入っているかなぁ?という憶測です^^;


文字列型であれば
while ( $row = odbc_fetch_array($res)) {
if($row["数量のフィールド名"] == "") continue;
  ・
  ・
  ・
}
というのはどうでしょうか。


もしくは
while ( $row = odbc_fetch_array($res)) {
if($row["数量のフィールド名"] < 1) continue;
  ・
  ・
  ・
}
としてもいいかもしれません。
Parent: 2858  返信 編集 削除

[2862] SQL

user: ごいんきょ。 | created: 2006-01-18 03:24
単純に、SQLクエリのSELECT文を打つ時点で絞れば、簡単だと思います。
select * from table
where column > 0
のように。

もちろん、表示しないレコードも取得する必要がある場合は、ぱぴよんさんの提案されているやり方が、スタンダードだと思います。
Parent: 2858  reply: 2864 返信 編集 削除

[2864] ありがとうございます

user: しげっち | created: 2006-01-18 09:41
ぱぴよんさん ごいんきょさん お返事ありがとうございます。

私の質問の仕方が悪かったです。申し訳ありません。

CODEと名称はテーブルから取得するのですが、ユーザーが入力する数量の列はwhile loop の中で<INPUT TYPE=TEXT >してるだけなのです。ですのでdefaultでNULLであり、そしてユーザーが入力した値が存在する行のみをSUBMITして入力内容確認表示ページへ遷移させたいのです。

そこでつまづいております。

何度も質問魔で申し訳ありませんが・・・
よろしくご教授下さいます様お願い致します。
Parent: 2862  reply: 2865 返信 編集 削除

[2865] 少し気になったのですが・・・

user: ぱぴよん | created: 2006-01-18 10:58
全てのテキストに name=arr[] という風に名前を振っていますが、
サブミットされた確認画面ではどのようにどのデータであるかを判断されているのでしょうか。
全てが $_POST['arr']にごちゃごちゃに入ってしまうので少しデータの持たせ方を考えた方がよい気がします^^;

例えば、
1)
H_NO: <name="arr[H_NO][]">
CODE: <name="arr[CODE][]">
MEISHOU: <name="arr[MEISHOU][]">
NISUGATA: <name="arr[NISUGATA][]">
数量名: <name="arr[数量名][]">
としたり、

2)
H_NO: <name="arr[{$row['H_NO']}][H_NO]">
CODE: <name="arr[{$row['H_NO']}][CODE]">
MEISHOU: <name="arr[{$row['H_NO']}][MEISHOU]">
NISUGATA: <name="arr[{$row['H_NO']}][NISUGATA]">
数量名: <name="arr[{$row['H_NO']}][数量名]">
など


数量の入力がTEXTとなっているので、何も入力されていなくても
サブミットはされます。
ですので、サブミット先の確認画面で表示/非表示の判断となります。

「何も入力されていない」という判断は空データ(文字列型)でいいと思います。
ただし、入力が本当に数値なのかという判断は必要です。


2のようにしたとして・・・
-------------------------------------------------------
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<table border="1">
<tr><th>H_NO</th><th>CODE</th><th>MEISHOU</th><th>NISUGATA</th><th>SUU</th></tr>
<?php
for($i = 1; $i < 10; $i++) {
print "<tr>".
"<td><input type=\"text\" name=\"arr[$i][H_NO]\" value=\"$i\"></td>".
"<td><input type=\"text\" name=\"arr[$i][CODE]\" value=\"a{$i}\"></td>".
"<td><input type=\"text\" name=\"arr[$i][MEISHOU]\" value=\"b{$i}\"></td>".
"<td><input type=\"text\" name=\"arr[$i][NISUGATA]\" value=\"c{$i}\"></td>".
"<td><input type=\"text\" name=\"arr[$i][SUU]\" value=\"\"></td>".
"</tr>";
}
?>
</table>
<input type="submit" name="submit" value=" 送信 ">
</form>
<?php
if(isset($_POST['submit'])) {
foreach($_POST['arr'] as $key => $value) {
if($value['SUU'] == '') continue;
print "H_NO:{$value['H_NO']}, CODE:{$value['CODE']}, MEISHOU:{$value['MEISHOU']}, ".
"NISUGATA:{$value['NISUGATA']}, SUU:{$value['SUU']}<br>";
}
print "全データ<pre>";
var_dump($_POST["arr"]);
print "</pre>";
}
?>
------------------------------------------------------
といったイメージです。
Parent: 2864  reply: 2866 返信 編集 削除

[2866] 次のようにしてもいいかもしれません。

user: ぱぴよん | created: 2006-01-18 11:03
> if($value['SUU'] == '') continue;

if((int)$value['SUU'] == 0) continue;

または、

if((int)$value['SUU'] < 1) continue;

など
Parent: 2865  reply: 2872 返信 編集 削除

[2872] ありがとうございました

user: しげっち | created: 2006-01-21 23:04
期待通りの動作が出来ました。

質問ばかりで申し訳ありませんでした。

ありがとうございました。
Parent: 2866  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 294 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑