質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.50%
XML

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

PHP

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

Q&A

解決済

3回答

905閲覧

phpでXMLの内容を修正

hatimaki

総合スコア27

XML

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

PHP

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

0グッド

0クリップ

投稿2017/08/26 07:38

編集2017/08/30 08:01

PHPを使い、入力フォームから商品情報を入力してXMLに入れ、そのXMLの内容を別ページで修正し、修正ボタンを押すと「修正しました」というページに行くというものを以下のように作ったのですが、

入力ページ(nyuryoku.html)

<!DOCTYPE html> <html lang="ja"> <meta charset=utf-8> <body> <form method="post" action="kakunin.php" enctype="multipart/form-data"> <p>商品<input type="text" name="a" size="8"></p> <p>単価<input type="text" name="b" size="8"></p> <p>画像<input type="file" name="c" ></p> <p><input type="submit" value="登録"></p> </form> <form type="post" action="sakujyo.php"> <input type="submit" value="削除画面へ"> </form> <form type="post" action="syusei.php"> <input type="submit" value="修正画面へ"> </form> </body> </html> ```修正入力ページ(syusei.php) ```ここに言語を入力 <!DOCTYPE html> <html lang="ja"> <meta charset=utf-8> <body> <h1>修正画面</h1> <form method='post' action='syusei-kakunin.php'> 商品名:<select name='all'> <?php $item=""; $xml=new SimpleXMLElement("shohin-list.xml",0,true); $item_all=$xml->item; $cnt=0; foreach($item_all as $dl){ print("<option value=$dl->name>$dl->name</option>"); $cnt++; } ?> </select> <p>単価:<input type="text" name="syusei"></p> <input type='hidden' name='no' value='$cnt'> <input type="submit" value="修正"> </form> </body> </html>

(この上記のページの内容は、XMLから読み込んだ内容を「商品名」に表示させ商品を選択して、単価の項目に修正の値を入力し「修正」ボタンを押し修正するというものです。)

「修正しました」のページ('syusei-kakunin.php')

<?php $syusei=$_POST["syusei"]; $no=$_POST["no"]; $items=Simplexml_load_file("shohin-list.xml"); $items->item[$no+""]->tanka=$syusei; echo $items->asXML('shohin-list.xml'); print("修正しました"); ?>

XML(shohin-list.xml)

<?xml version="1.0" encoding="UTF-8"?> -<shohin-list> -<item> <name>ブドウ</name> <tanka>500</tanka> <img>budou2.jpg</img> </item> -<item> <name>イチゴ</name> <tanka>300</tanka> <img>itigo2.jpg</img> </item> </shohin-list>

修正したい商品を選択して、値段を再入力して修正ボタンを押し「修正しました」というページに行くのですが、そのあとでXMLの内容を確認したら、リストの一番上の商品の単価が修正されていて選択した商品の単価が修正されていませんでした。

自分での調べてみたのですが原因がわかりません。

どの部分を修正すれば改善されるのでしょうか?

どうかよろしくお願いします。

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

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

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

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

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

kei344

2017/08/26 07:43

過去の質問について、「解決済」になっていないものが多数見受けられます。解決したものは「ベストアンサー」を選び、自力で解決した場合はその方法を解答欄に書き、もし万が一解決していないのであれば質問を編集するなどしてみてください。
hatimaki

2017/08/26 09:28

ご指摘ありがとうございます。ご指摘の通りに過去のものを対処しました。
guest

回答3

0

入力ページ・修正入力ページのところでnovalueが良くないですね。
$cntの値が出力されていません。

PHP

1<input type='hidden' name='no' value='$cnt'> 23<input type='hidden' name='no' value='<?php echo $cnt?>'>

投稿2017/08/26 09:26

ttyp03

総合スコア16996

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

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

0

自己解決

以下のように

修正入力ページ(syusei.php)

<!DOCTYPE html> <html lang="ja"> <meta charset=utf-8> <body> <h1>修正画面</h1> <form method='post' action='syusei-kakunin.php'> 商品名:<select name='all'> <?php $item=""; $xml=new SimpleXMLElement("shohin-list.xml",0,true); $item_all=$xml->item; // $cnt=0; 削除 foreach($item_all as $dl){ print("<option value=$dl->name>$dl->name</option>"); // $cnt++; 削除 } ?> </select> <p>単価:<input type="text" name="syusei"></p> // <input type='hidden' name='no' value='$cnt'> 削除 <input type="submit" value="修正"> </form> </body> </html>

「修正しました」のページ('syusei-kakunin.php')

<?php   $syusei=$_POST["syusei"]; $sentaku=$_POST["all"]; // 追加 // $no=$_POST["no"]; 削除 $items=Simplexml_load_file("shohin-list.xml"); // $items->item[$no+""]->tanka=$syusei; 削除 $i=0; foreach($items as $value){ if($sentaku==$value->name){ $items->item[$i]->tanka=$syusei; break; } $i++; } //追加 echo $items->asXML('shohin-list.xml'); print("修正しました"); ?>

ソースを修正することで改善されました。

ありがとうございました。

投稿2017/08/30 08:14

編集2017/08/30 08:27
hatimaki

総合スコア27

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

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

0

とりあえず結合演算子が違います。

PHP

1// $items->item[$no+""]->tanka=$syusei; 2// ↓ 3 $items->item[$no.""]->tanka=$syusei;

【PHPの基本構文 - 結合演算子 - 文字列の連結 - PHP入門 - Webkaru】
https://webkaru.net/php/string-concatenation-dot/


あと、$no=$_POST["no"];$items->item[$no+""] となるのであれば、そもそもPOSTの値に問題が有る場合にエラーになります。

【変数が存在するかどうかの判別(isset) - 変数操作関数 - PHP関数】
http://www.phpbook.jp/func/var/index4.html

投稿2017/08/26 14:18

kei344

総合スコア69364

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

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

hatimaki

2017/08/26 14:47

[$no+""]は何番目のitemという意味で記述したのですが・・・。
kei344

2017/08/26 14:52

どこについてのコメントでしょうか。 結合演算子についてであれば構文がそもそも間違っているという話です。 後半についてであれば、POSTの値を信用しすぎないコードを書くべき、ということを書いています。
kei344

2017/08/30 08:07

$no+""ではエラーが出るということは理解されていますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問