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

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

詳細はこちら
PHP

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

Q&A

解決済

3回答

2029閲覧

PHPで2ページに跨る値の受け渡しについて

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

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

0グッド

1クリップ

投稿2019/12/19 02:55

編集2019/12/19 04:04

現在、2ページに跨るページ遷移について詰まっており相談させて頂きました。
下記に現在の流れを記載しましたが、indexからimportには値が渡せていますが、importからinsertには値を渡せていません。これは何故でしょうか?

ページ遷移 index.php(選択) →import.php(確認) →insert.php(登録)

index.php

1<form enctype="multipart/form-data" action="import.php" method="post"> 2<select name="location"> 3<option value="test">テスト</option>

import.php

1<head> 2 <link rel="stylesheet" href="css/import.css" type="text/css"> 3 <link href="https://fonts.googleapis.com/css?family=M+PLUS+1p&display=swap" rel="stylesheet"> 4 <title>インポート確認</title> 5 <script type="text/javascript"> 6 function submitChk () { 7 /* 確認ダイアログ表示 */ 8 var flag = confirm ("この内容で登録して宜しいですか?\n\n登録したくない場合は[キャンセル]ボタンを押して下さい"); 9 /* send_flg が TRUEなら送信、FALSEなら送信しない */ 10 return flag; 11 } 12 function set2fig(num) { 13 // 桁数が1桁だったら先頭に0を加えて2桁に調整する 14 var ret; 15 if( num < 10 ) { ret = "0" + num; } 16 else { ret = num; } 17 return ret; 18 }//時計 19 function showClock2() { 20 var nowTime = new Date(); 21 var nowHour = set2fig( nowTime.getHours() ); 22 var nowMin = set2fig( nowTime.getMinutes() ); 23 var nowSec = set2fig( nowTime.getSeconds() ); 24 var msg = nowHour + ":" + nowMin + ":" + nowSec; 25 document.getElementById("RealtimeClockArea").innerHTML = msg; 26 }//時計 27 setInterval('showClock2()',1000); 28 </script> 29</head> 30<?php 31try{ 32$pdo = new PDO('mysql:host=localhost;dbname=workinfo;charset=utf8', 'root','root', 33array(PDO::ATTR_EMULATE_PREPARES => false)); 34} catch (PDOException $e) { 35 exit('データベース接続失敗。'.$e->getMessage()); 36} 37 38//工場を取得 39$location = $_REQUEST['location']; 40//理念を取得' 41$philosophy = $_REQUEST['philosophy']; 42//変数に配列を代入 43$data = array(); 44function add_person($workday, $workgroup, $personal, $product, $create, $unit, $exp, $remarks, $worktime, $breaktime) 45{ 46global $data; 47 48//配列にヘッダーの列名を代入 49$data []= array( 50'workday' => $workday, 51'workgroup' => $workgroup, 52'personal' => $personal, 53'product' => $product, 54'create' => $create, 55'unit' => $unit, 56'exp' => $exp, 57'remarks' => $remarks, 58'worktime' => $worktime, 59'breaktime' => $breaktime 60); 61} 62//ファイルの読み込み 63if ( $_FILES['file']['tmp_name'] ) 64{ 65$dom = DOMDocument::load( $_FILES['file']['tmp_name'] ); 66$rows = $dom->getElementsByTagName( 'Row' ); 67//日付に項目がある場合の処理(基本) 68$workday_row = true; 69//繰り返し 70foreach ($rows as $row){ 71if ( !$workday_row ){ 72 $workday = ""; 73 $workgroup = ""; 74 $personal = ""; 75 $product = ""; 76 $create = ""; 77 $unit = ""; 78 $exp = ""; 79 $remarks = ""; 80 $worktime = ""; 81 $breaktime = ""; 82 83$index = 1; 84$cells = $row->getElementsByTagName( 'Cell' ); 85foreach( $cells as $cell ){ 86$ind = $cell->getAttribute( 'Index' ); 87if ( $ind != null ) $index = $ind; 88 89if ( $index == 1 ) $workday = $cell->nodeValue; 90if ( $index == 2 ) $workgroup = $cell->nodeValue; 91if ( $index == 3 ) $personal = $cell->nodeValue; 92if ( $index == 4 ) $product = $cell->nodeValue; 93if ( $index == 5 ) $create = $cell->nodeValue; 94if ( $index == 6 ) $unit = $cell->nodeValue; 95if ( $index == 7 ) $exp = $cell->nodeValue; 96if ( $index == 8 ) $remarks = $cell->nodeValue; 97if ( $index == 9 ) $worktime= $cell->nodeValue; 98if ( $index == 10) $breaktime = $cell->nodeValue; 99 100$index += 1; 101}/* 102//SQL文 103$sql = "INSERT INTO $location (workday, workgroup, personal, contents, product, worktime, breaktime) Values(:workday, :workgroup, :personal, :contents, :product, :worktime, :breaktime)"; 104$stmt = $pdo -> prepare($sql); 105$workday = substr($workday,0,10); 106//$stmt -> bindParam(':location',$location,PDO::PARAM_STR); 107$stmt -> bindParam(':workday',$workday,PDO::PARAM_STR); 108$stmt -> bindParam(':workgroup',$workgroup,PDO::PARAM_STR); 109$stmt -> bindParam(':personal',$personal,PDO::PARAM_STR); 110$stmt -> bindParam(':contents',$contents,PDO::PARAM_STR); 111$stmt -> bindParam(':product',$product,PDO::PARAM_STR); 112$stmt -> bindParam(':worktime',$worktime,PDO::PARAM_STR); 113$stmt -> bindParam(':breaktime',$breaktime,PDO::PARAM_STR); 114 115$stmt->execute(); 116*/ 117//var_dump($sql); 118add_person($workday, $workgroup, $personal, $product, $create, $unit, $exp, $remarks, $worktime, $breaktime); 119//var_dump($workday, $workgroup, $personal, $contents, $product, $worktime, $breaktime); 120} 121$workday_row = false; 122} 123} 124?> 125<html> 126<body> 127<!-- 128<ul class="link"> 129 <li><a href="index.php">業務内容アップロード</a></li> 130 <li><a href="ogaki.php">大垣工場</a></li> 131 <li><a href="iga.php">伊賀工場</a></li> 132 </ul> 133--> 134<div id="header"> 135 <img src="img/text-logo-new.png"class="titlelogo"> 136 <img src="img/logo-new.png" class="logo"> 137<h1 class="title">生産計画表 製造場所:( 138 <?php if($location == 'ogaki'){ 139 echo '大垣'; 140 }else { 141 echo '伊賀'; 142 } 143 ; ?>) 144</h1> 145<!--日付+曜日+時計--> 146<?php 147$week = array( "日曜日", "月曜日", "火曜日", "水曜日", "木曜日", "金曜日", "土曜日" ); 148?> 149<h2>本日の日付:<?php echo date("Y/m/d").' '.'('.$week[date("w")].')';?> 150<div class="clock"> 151<h2 style="display:inline" id="RealtimeClockArea"></h2> 152</div> 153<hr> 154</div> 155<marquee><h2 class="philosophy"><?php echo $philosophy; ?></h2></marquee> 156<table border ="1" class="table"> 157<hr> 158<tr> 159<th>グループ</th> 160<th>担当者</th> 161<th>製造製品</th> 162<th>生産量</th><!--単位も含める--> 163<th>賞味期限</th> 164<th>備考</th> 165<th>就業時間</th> 166<th>休憩時間</th> 167</tr> 168<?php foreach( $data as $row ) { ?> 169<tr> 170<td><?php echo( $row['workgroup'] ); ?></td> 171<td><?php echo( $row['personal'] ); ?></td> 172<td><?php echo( $row['product'] ); ?></td> 173<td><?php echo( $row['create'].$row['unit'] ); ?></td> 174<td><?php echo( $row['exp'] ); ?></td> 175<td><?php echo( $row['remarks'] ); ?></td> 176<td><?php echo( $row['worktime'] ); ?></td> 177<td><?php echo( $row['breaktime'] ); ?></td> 178</tr> 179<?php } ?> 180</table> 181<form enctype="multipart/form-data" action="insert.php" method="post" onsubmit="return submitChk()"> 182<input type="hidden" name="workgroup" value=<?php echo $workgroup ?>> 183<input type="hidden" name="personal" value=<?php echo $personal ?>> 184<input type="submit" value="登録" /> 185</body> 186</html> 187

insert.php

1省略/// 2$location = $_REQUEST['location']; 3var_dump($location); →null 4省略////

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

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

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

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

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

yoorwm

2019/12/19 02:58

省略しすぎです。
azuapricot

2019/12/19 03:00

import.php で locationを保存するタグがないから リクエスト情報が消えてるんじゃないでしょうか?
azuapricot

2019/12/19 03:01 編集

<input type="hidden" name="location" value="$_REQUEST['location']"> 動くかどうかはしらないですがこんな感じで値を保持しておくとかでしょうかね
退会済みユーザー

退会済みユーザー

2019/12/19 03:04

yoorrwmさん あえて見やすいように、不要なコードははずしたつもりなのですが。 azuapricotさん import.phpでindex.phpから値を受け取れてはいるけど、渡せていないという事でしょうか? index.phpからimportとinsert2つに予め送ってしまえばいいのかなと思いましたが、それだと確認を挟む意味が無くなってしまいます。
azuapricot

2019/12/19 03:05

確認画面を一つ挟むことによって、リクエスト情報が消えているといえば伝わりますか?
azuapricot

2019/12/19 03:06

一つ挟むなら、セッションやCookieに値を保存するか、 <input type="hidden"> で値を保持しておくかなどしないといけません
退会済みユーザー

退会済みユーザー

2019/12/19 03:12

azuapricotさん 理解致しました。 <input type="hidden" name="location" value=<?php $_REQUEST['location']?>> <input type="hidden" name="location" value=<?php $location ?>> のどちらでも、insert.phpに飛んだ時に値がNULLになってしまうのですが。。。。
退会済みユーザー

退会済みユーザー

2019/12/19 03:15

すいません、echoをいれる事により取得できるようになりました。
m.ts10806

2019/12/19 03:39

質問は編集できるので。
guest

回答3

0

コードが省略されているので適当に妄想で回答します

php で画面遷移を伴う情報の伝達手段は限られており、
・session を使用する
・POST/GET を使用する
・cookie を使用する
といった方法が一般的です。

本件では多分、POST/GET を使用した方法を模索しているのだと思うので hidden を調べてみてください。

投稿2019/12/19 02:59

編集2019/12/19 03:01
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2019/12/21 02:37

ありがとうございます、色々な方法があるのですね。php奥が深いです。
guest

0

PHP

1<form enctype="multipart/form-data" action="import.php" method="post"> 2<select name="location"> 3<option value="test">テスト</option>

送信時にはこの [name="location"] 部分を元に値が次のところに渡されます

PHP

1<form enctype="multipart/form-data" action="insert.php" method="post">

これだけだと nameがついているタグが一つもないですし、
formタグとしても「いや次何渡せばいいのかわかんないから何もわたさんよ?」ってなるわけですね

PHP

1<form enctype="multipart/form-data" action="insert.php" method="post"> 2<input type="hidden" name="location" value="渡したい値">

だからこんな感じで hiddenにでも値を保持しておけば次の画面にも渡せると思いますよ

投稿2019/12/19 03:04

azuapricot

総合スコア2341

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

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

退会済みユーザー

退会済みユーザー

2019/12/19 04:09

import.phpの内容を全公開しました。 ここで、$data()にいれた各変数をそのまま渡したく下記の通り試しましたが、うまくいきません。 送信側 <input type="hidden" name="data" value=<?php echo $data ?>> 受信側 $data1= array(); $data1= $_REQUEST['data']; 配列をそのまま値渡しで受け取りたいのですが、これでは不可能ですよね? 値をひとつずつ渡しても、var_dumpで表示すると最後の行しか表示されていないようです。 配列をそのままフォームを跨いで渡す方法はあるのでしょうか?
azuapricot

2019/12/19 04:14

JSON形式に変換してはいかがでしょうか?
退会済みユーザー

退会済みユーザー

2019/12/19 04:17

azuapricotさん わかりました、調べて挑戦してみます。
退会済みユーザー

退会済みユーザー

2019/12/19 04:27

とりあえずこれで文字化けせずに変換する事ができました。 $json = json_encode( $data ,JSON_UNESCAPED_UNICODE);
azuapricot

2019/12/19 04:27

JSON形式ならhiddenでそのまま次の画面に保持できてやりたいこともできるような気がします。 頑張ってください~
退会済みユーザー

退会済みユーザー

2019/12/19 04:38

<input type="hidden" name="json" value=<?php echo $json ?>>                 ↓ 表示される $json= $_REQUEST['json']; var_dump($json); NULLになる $json= $_REQUEST['json']; var_dump(json_decode($json)); これは何故ですか?
azuapricot

2019/12/19 04:46

表示される = 何が表示されてますか?
退会済みユーザー

退会済みユーザー

2019/12/19 05:25

string(952) "[{"workday":"2019-12-19T10:04:35.370","workgroup":"製造",~といった感じで配列の内容が出てきていますが、全体の半分くらいで文が終わってしまっています。
azuapricot

2019/12/19 05:31

json形式で受け取れてるみたいですねー var_dump(json_decode($json, true)); でも結果は変わりませんか?
退会済みユーザー

退会済みユーザー

2019/12/19 08:13

$json= $_REQUEST['json']; var_dump(json_decode($json,true)); これだとNULLになってしまいますね、素のjsonだと半分ぐらいは表示されますが、decodeで取り出すとNULLになります。半分で見切れてしまうのは、保存しておける文字量に限界があるのでしょうか?
退会済みユーザー

退会済みユーザー

2019/12/19 08:25

UNESCAPED_UNICODEを省いてみても、結果は変わりませんね。2バイト文字が悪さをしているのでしょうか?
退会済みユーザー

退会済みユーザー

2019/12/19 08:30

そもそもの話が変わってしまうんですが、SQL実行文の所をクリックボタンのif文で分けてしまってもいいような気がしてきました。
azuapricot

2019/12/19 08:31

実装方法に関しては質問者さんしかわからないのでそうしたほうが良いと思うならそうで良いんじゃないでしょうか。
退会済みユーザー

退会済みユーザー

2019/12/19 08:32

Control character error, possibly incorrectly encoded やはり2バイト文字がエラーの原因のようです。むむむ https://teratail.com/questions/51312
azuapricot

2019/12/19 08:35

JSON化に関しては今回の質問とは別なので、新しく質問を立てて JSON化する前の配列、JSON化後の文字列、現象を質問文に記載したほうが もっと詳しい人の回答が得られるかと思います(私じゃ多分答えだせません....)
退会済みユーザー

退会済みユーザー

2019/12/19 08:42

azuapricotさん 何を言いますか、あなたのおかげで少しずつ進んでいます。現在、エラーの内容が分かりました。 半角スペースがあるせいでエラーが表示されていましたので、replace関数をかけて、半角はすべて全角に直すようにします。
guest

0

ベストアンサー

<input type="hidden" name="location1" value=<?php echo $location ?>>
これで値の受け渡しが出来るようになりました。効率のいいコードかどうかは別として、実装できそうです。

投稿2019/12/19 03:16

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問