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

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

詳細はこちら
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

Q&A

解決済

1回答

1292閲覧

PHPでxmlを読み込んで、1列毎データベースに書き込みたい

退会済みユーザー

退会済みユーザー

総合スコア0

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

PHP

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

0グッド

0クリップ

投稿2019/12/16 13:18

編集2019/12/17 06:59

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に書き込み後から参照できるカタチにしたいです。
質問ばかりかつ、情報等が不足しているかもしれませんが、宜しくお願い致します。

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

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

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

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

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

m.ts10806

2019/12/16 20:24 編集

(質問は編集できます)URL,コードはマークダウンでご対応ください。 https://teratail.com/help#about-markdown ※質問投稿前にプレビュー確認して調整してください あと、出ているエラーの意味は調べましたか? 提示のコードが全てであれば書かれた通りの結果と思いますけども・・
退会済みユーザー

退会済みユーザー

2019/12/17 04:18

すいません、このサイト自体はじめてで少々不慣れな点があり記載方法に誤りがあったようで、申し訳ありません。 出ているエラーは記載したモノ以外にも、試行錯誤している中で1つに対して2つの以上の引数があるといった内容のエラーが出ました。
退会済みユーザー

退会済みユーザー

2019/12/17 04:24

SQL追記部分 $sql = $pdo->prepare( "INSERT INTO ogaki VALUES( 0, ?, ?, ?, ?, ?, ?, ? )" ); $sql->execute( $sql, array($workday, $workgroup, $personal, $contents, $product, $worktime, $breaktime) ); エラー文 PDOStatement::execute() expects at most 1 parameter, 2 given in 補足情報です。
退会済みユーザー

退会済みユーザー

2019/12/17 07:47

$stmt = $pdo->prepare( "INSERT INTO ogaki (id,workday, workgroup, personal, contents, product, worktime, breaktime) Values(:0,:workday, :workgroup, :personal, :contents, :product, :worktime, :breaktime)"); $stmt -> bindParam(':workday',$workday,PDO::PARAM_STR); $stmt -> bindParam(':workgroup',$workgroup,PDO::PARAM_STR); $stmt -> bindParam(':personal',$personal,PDO::PARAM_STR); $stmt -> bindParam(':contents',$contents,PDO::PARAM_STR); $stmt -> bindParam(':product',$product,PDO::PARAM_STR); $stmt -> bindParam(':worktime',$breaktime,PDO::PARAM_STR); これもデータベースに書き込まれていません、エラーは起きていない状況です。
guest

回答1

0

ベストアンサー

値の参照数が違っており、エラーがでていました。初歩的なミスで申し訳ありません。

投稿2019/12/19 02:56

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問