PHPでxmlを読込、DBに書込(デジタルサイネージ用)社員の作業内容などを表示
★参考にしているURL★(DB書き込みについては、pureDBは古いためPDOで書き込みたいです。)
DBについては、作成済で全てTEXT形式で、AIでidがあります。
https://www.ibm.com/developerworks/jp/opensource/library/os-phpexcel/index.html
xmlファイルから下記のように必要な情報を取得して表示させています。
|workgroup|personal|content|product|worktime|breaktime|
|製造Aライン|高橋茂| 包装 |ライチ飴|8:00-17:00|12:00-13:00
|製造Bライン|高橋茂| 成型 |イチゴ飴|8:00-17:00|12:00-13:00
表示させるだけではなく、DBに書き込んだ実績を表示させたりできるので便利だと思い、SQLで1列ずつ書き込む機能を実装中に以下のエラーメッセージが発生しました。
発生している問題・エラーメッセージ
DBに書き込めない
Undefined variable: workgroup in C:\xampp\htdocs\new\import.php on line 10
DBにforeachで書き込む前に、テストで作成してみましたがエラーです。(ソースコード9から12)
該当のソースコード
<head> <link rel="stylesheet" href="import.css" type="text/css"> <link href="https://fonts.googleapis.com/css?family=M+PLUS+1p&display=swap" rel="stylesheet"> <title></title> </head> <?php //DB接続 $db = new PDO('mysql:host=localhost;dbname=workinfo;charset=utf8', 'root', ''); $sql =$db ->prepare("insert into ogaki product (workgroup,personal,contents,product,)values(?,?,?,?)"); $sql -> execute($db,array($workgroup, $personal, $contents, $product)); //工場を取得 $location = $_REQUEST['location']; //理念を取得' $philosophy = $_REQUEST['philosophy']; //変数に配列を代入 $data = array(); //変数の宣言 function add_person($workday, $workgroup, $personal, $contents, $product, $worktime, $breaktime) { global $data; //配列にヘッダーの列名を代入 $data []= array( 'workday' => $workday, 'workgroup' => $workgroup, 'personal' => $personal, 'contents' => $contents, 'product' => $product, 'worktime' => $worktime, 'breaktime' => $breaktime ); } //ファイルの読み込み if ( $_FILES['file']['tmp_name'] ) { $dom = DOMDocument::load( $_FILES['file']['tmp_name'] ); $rows = $dom->getElementsByTagName( 'Row' ); //日付に項目がある場合の処理(基本) $workday_row = true; //繰り返し foreach ($rows as $row) { if ( !$workday_row ) { $workday = ""; $workgroup = ""; $personal = ""; $contents = ""; $product = ""; $worktime = ""; $breaktime = ""; $index = 1; $cells = $row->getElementsByTagName( 'Cell' ); foreach( $cells as $cell ){ //毎回SQLに書き込む /* $sql=$pdo ->prepare('insert into ogaki values(0,?,?,?,?,?,?,?)'); $sql ->execute($pdo,[htmlspecialchars(array($workday, $workgroup, $personal, $contents, $product, $worktime, $breaktime))]); */ $ind = $cell->getAttribute( 'Index' ); if ( $ind != null ) $index = $ind; if ( $index == 1 ) $workday = $cell->nodeValue; if ( $index == 2 ) $workgroup = $cell->nodeValue; if ( $index == 3 ) $personal = $cell->nodeValue; if ( $index == 4 ) $contents = $cell->nodeValue; if ( $index == 5 ) $product = $cell->nodeValue; if ( $index == 6 ) $worktime = $cell->nodeValue; if ( $index == 7 ) $breaktime = $cell->nodeValue; $index += 1; } add_person($workday, $workgroup, $personal, $contents, $product, $worktime, $breaktime); } $workday_row = false; } //DB書き込み } //無くなり次第、HTMLとして出力する処理 ?> <html> <body> <div id="header"> <img src="img/text-logo-new.png"class="titlelogo"> <img src="img/logo-new.png" class="logo"> <h1 class="title">生産計画表</h1> <h2 class="title">製造場所:(<?php echo $location; ?>)</h2> </div> <marquee><h2 class="philosophy"><?php echo $philosophy; ?></h2></marquee> <table border ="1" class="table"> <hr> <tr> <th>作業日</th> <th>作業グループ</th> <th>作業者</th> <th>作業内容</th> <th>製造製品</th> <th>就業時間</th> <th>休憩時間</th> </tr> <?php foreach( $data as $row ) { ?> <tr> <!--時間も入る為、10文字で切り出し--> <td><?php echo( substr($row['workday'],0,10)); ?></td> <td><?php echo( $row['workgroup'] ); ?></td> <td><?php echo( $row['personal'] ); ?></td> <td><?php echo( $row['contents'] ); ?></td> <td><?php echo( $row['product'] ); ?></td> <td><?php echo( $row['worktime'] ); ?></td> <td><?php echo( $row['breaktime'] ); ?></td> </tr> <?php } ?> </table> <div id="nav"> <ul> <li><a href="index.php">TOP</a></li> <li><a href="import.php">大垣工場</a></li> <li><a href="">伊賀工場</a></li> </ul> </div> </body> </html>
試したこと
単純に文字列だけをかきこんだり、cellから取り出しているforeach文の中にsql文を入れたりしてみました。
補足情報(FW/ツールのバージョンなど)
列毎にSQL文で、DBに書き込み後から参照できるカタチにしたいです。
質問ばかりかつ、情報等が不足しているかもしれませんが、宜しくお願い致します。
回答1件
あなたの回答
tips
プレビュー