0

PHPコーディングを行ってから長い時間が経ったので、本当に振り出しに戻りました。本当に明らかな/些細なことを見逃している場合は、事前に謝罪してください。

データを処理して送信し、XML ファイルの特定のセクションにコードを追加するフォームを作成しようとしています。

これは私が持っているものです

<? $title = $_POST['title'] ;  
$author = $_POST['author'];
$filesize = $_POST['filesize'];
$pubdate = $_POST['pubdate']; 
$duration = $_POST['duration']; 
$summary = $_POST['summary']; 



$key = '<itunes:category text="Business"></itunes:category>';
$newline = '<item>
<title>$title</title>
<link>http://example.com/CS/podcast/<? php echo($target_path);?></link>
<itunes:author>$author</itunes:author>
<itunes:summary><?php echo($summary); ?></itunes:summary>

<enclosure url="http://example.com/CS/$targetpath" length="$filesize" type="audio/mpeg"/>

<guid>http://www.example.com/CS/podcast/<? php echo($target_path);?></guid>
<pubDate><?php echo($pubdate);?></pubDate>
<itunes:duration><?php echo($duration);?></itunes:duration>
<itunes:keywords>My Podcast</itunes:keywords>
<category>Podcasts</category>
<itunes:explicit>no</itunes:explicit>
</item>';


//copy file to prevent double entry
$file = "list.xml";
$newfile = "listtemp.xml";
copy($file, $newfile) or exit("failed to copy $file");

//load file into $lines array
 $fc = fopen ($file, "r");
 while (!feof ($fc)) 
 {
$buffer = fgets($fc, 4096);
$lines[] = $buffer;}

fclose ($fc);

//open same file and use "w" to clear file 
$f=fopen($newfile,"w") or die("couldn't open $file");

/* uncomment to debug
print_r($lines);
print "<br>\n";
*/

//loop through array using foreach
foreach($lines as $line){
   fwrite($f,$line); //place $line back in file    
if (strstr($line,$key)){ //look for $key in each line
fwrite($f,$newline."\n");
} //place $line back in file }

fclose($f);

copy($newfile, $file) or exit("failed to copy $newfile");
echo "done";
echo "$newline";?> 

私が抱えていると思われる問題は、コードを適切な場所に完全に追加することですが、入力されたタイトルの代わりに $title を表示することです。

問題は、別の変数内に変数を含めることができないことだと思います。誰かがコードをフォームに入力するだけで危険になる可能性があるためです。これを回避する方法はありますか? これは内部使用のみに限定されるため、厳密なセキュリティは必要ありません。

見つかった

http://uk3.php.net/manual/en/function.eval.php しかし、うまく活用できていません。

ありがとうございました

4

5 に答える 5

1

試す:

$newline = '<item>
<title>'.$title.'</title>
<link>http://example.com/CS/podcast/'.$target_path.'</link>
<itunes:author>'.$author.'</itunes:author>
<itunes:summary>'.$summary.'</itunes:summary>

<enclosure url="http://example.com/CS/'.$targetpath.'" length="'.$filesize.'" type="audio/mpeg"/>

<guid>http://www.example.com/CS/podcast/'.$target_path.'</guid>
<pubDate>'.$pubdate.'</pubDate>
<itunes:duration>'.$duration.'</itunes:duration>
<itunes:keywords>My Podcast</itunes:keywords>
<category>Podcasts</category>
<itunes:explicit>no</itunes:explicit>
</item>';
于 2013-08-27T09:06:03.263 に答える
0

PHP フォールドへようこそ。他の 2 つの回答で問題は解決しますが、忘れていたことがわかるように、これを追加します。

PHP では、一重引用符と二重引用符の動作が若干異なります。

変数を二重引用符で囲むと、その変数が展開されますが、一重引用符では展開されません。そう :-

$title = 'Hello';

$text = "$title World";   // $text = 'Hello World'

$text = '$title World';   // $text = '$title World'
于 2013-08-27T09:18:22.110 に答える
0

それらをドットでくっつけたくない場合 ('my var '.$myvar.' はクールです')、単に ' を " に変更できます。

したがって、次のようになります。

<?php

    $inlineVar = "even this";
    $content = "This is a weird string! And look: '$inlineVar' works.";
    $content .= "Stick an additonal string or something to it.";

?>

事前に: PHP 文字列にプレーンな HTML または XML を記述しないようにしてください。ロールアウト (*.html、*.xml、または *.phtml)

于 2013-08-27T09:18:40.137 に答える
0
$newline = '<item>
<title>' . $title . '</title>
<link>http://example.com/CS/podcast/' . $target_path . '</link>
<itunes:author>' . $author . '</itunes:author>
<itunes:summary>' . $summary . '</itunes:summary>';

などなど - 私はあなたが絵を描くと思います。あなたが書いた方法では、 $title は文字列であると伝えていますが、これは変数です。そして、php タグと echo 関数を文字列として配置します。これは本当に意味がありません。

于 2013-08-27T09:08:28.610 に答える
0

XML ドキュメントを編集する最善の方法は、XML パーサーを使用してすべての書式設定を行うことです。画像をバイナリではなく、画像処理ソフトウェア パッケージで編集するのと同じように。

幸運なことに、非常に強力な xml ライブラリがいくつかあります。PHP で HTML/XML をどのように解析および処理しますか?

ここには、「最高のものは何か」という質問に答える別のスレッドもあります: Best XML Parser for PHP

今あなたの問題に。PHP には、2 つの異なる String 宣言があります。'表記と表記があり"ます。違いは、PHP が " を使用すると、文字列を解析してすべての変数を評価するのに対し、' は文字列の解析を行わないことです。例:

$string = 'foo';
'my' . $string === 'myfoo';
'my$string' === 'my$string' !== 'myfoo';
"my$string" === 'myfoo';

これが明確であることを願っていますか?

于 2013-08-27T09:12:07.587 に答える