PHPのCMS機能を応用してフォームの内容を指定した場所に追記するシステムの作り方

このQ&Aのポイント
  • PHPのCMS機能を使い、既存のPHPファイルにフォームの内容を追記したい場合、以下の手順が必要です。
  • まず、フォームの内容を受け取るnew.phpファイルを作成します。このファイルには<form>タグを使い、<textarea>要素を用意し、送信ボタンを設置します。
  • 次に、makefile.phpというファイルを作成し、このファイルにはフォームの内容を受け取り、指定した場所に追記するプログラムを記述します。追記したい場所はindex.phpファイル内の{{次からここに追記したい}}の部分です。
回答を見る
  • ベストアンサー

PHPについて質問です。

PHPのCMS機能を応用して既存のPHPファイル(例ではindex.php)の指定した場所にフォームの内容を追記していくシステムを作りたいのですがよくわかりません。 文字だけだとわかりにくいため簡単な例を 参考サイト→http://php.muzin.org/miniblog/ [[index.php (追記したいファイル)]] <html><head> </head> <body> <div></div> //テンプレート {{次からここに追記したい}} </body></html> [[template.php (テンプレート)]] <div><%PAGECONTENTS></div> [[new.php(フォーム)]] <html><head> <form action="makefile.php" method="POST"> <textarea name="honbun" rows="5" cols="50"></textarea><br /> <input type="submit" value="送信" /> </form> </head> </html> [[makefile.php(追記するためのプログラム)]] <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> </head> <body> <?php if ($_POST{"honbun"}) { //フォームに記入されていればファイル生成開始 $honbun = $_POST{"honbun"}; //文字コードをEUCに変換 $honbun = mb_convert_encoding($honbun, "EUC-JP","AUTO"); //クオーテーションマークを変換 if(get_magic_quotes_gpc()) { $honbun = stripslashes($honbun); } // index.phpに追記 $filename = "index.php"; // ファイル生成&書き込み $handle = fopen( $filename, 'w'); fwrite( $handle, $honbun); fclose( $handle ); // メッセージ表示 echo $filename. "に追記しました"; } else { echo "フォームから記事の内容を送信してください。"; } ?> </body> </html> 以上です。 このままだとお察しの通りindex.phpの</html>の後に<div></div>が記入されてしまいます(多分)。 これのどこを変えればindex.phpの{{次からここに追記したい}}の場所に追記することができますか? わかりにくい場合は言ってもらえれば追記します。 回答よろしくお願いします。

  • PHP
  • 回答数3
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.3

>ここでは乱数を用いたファイル作成が書かれています。 >それを<html>~</html>間への追記に変更したいのです。 まず、『<html>~</html>間』という表現が乱暴です。 ファイルの場所(今回はなくても可)、ファイル名、該当箇所 を全て説明して、指定している箇所が一意になるように表現することは重要です。 システムでは一意でないものには動作しませんので、曖昧なものは全て取り去るようにして下さい。 とりあえず、index.phpでの事だとして、単なる書き込みから、追記になってしまうのも飛躍しすぎです。 ファイルを作成して書き込むことが出来るとして、次にやろうとすることは、同じファイルに書き込んだらどうなるか? 追記とは何か? fopenはどんな機能なのか? この時点で追記の認識が間違っていることに気がつきます。 追加して記す。 だから、追記した場合は必ず最後に増えます。 ~と~の間に追記という時点で矛盾しています。 また、index.phpがphpファイルである必要性が全く感じられません。 参考リンクの例はhtmlファイルにを作成して書き込んでいるのに、なぜわざわざphpファイルに変更してしまったのでしょう。 自分で考えるべきところな気もしますが、index.phpは新規作成したり追記したりしたファイルを読み込んで出力したら、本当に追記するだけで目的のことが出来そうです。 phpがはじめて学ぶ言語なら仕方ないのかもしれませんが、 どんな言語でも下記が重要です。 表示の方法 結果が見れないと何もわからないので話になりません。 ファイルに関してなら、 読込 作成 編集 削除 この4つしか基本的には出来ることがないので、それぞれの方法を確認すべき。 phpマニュアルでfopenを確認しろと言ってませんでしたっけ? 確認してませんよね? 確認してもわからなくて放置しましたよね? すみません。中途半端な感じにはなりましたが、回答しても、その後の行動が生きてこないと言うのが見えてきてしまいました。 回答した内容に対して、まずは一つ一つ確認しようとしたと思える内容の話をして下さい。

その他の回答 (2)

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.2

>折角参考サイトを書いてくれたので、そちらのどの項目を実装したいのか、 参考サイトの項目名書いてませんよね? 参考サイトの全てを確認しないと今の情報だけだとあなたがどの箇所を見ながらやっているのか確認できないから、それがわかるように説明してくださいって言っているんですよ。 参考リンク先には番号も書いてあるわけですから、ここの何番と言えば良いだけですよね? 回答者の立場からすると、読む必要がないかもしれないテキストを読むのは萎えます。 該当の項目を見ただけで理解が難しそうであれば勝手に確認するので、どの項目かを聞いているわけです。

matusera
質問者

補足

なるほど、理解しました。 番号で言うと2番です。 ここでは乱数を用いたファイル作成が書かれています。 それを<html>~</html>間への追記に変更したいのです。

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.1

phpで作られたCMSはありますが、phpにCMS機能もありませんし、CMSはシステムであって機能ではありません。 リンク先でそのように使っているのはCMSの機能と言いたいのでしょう。 文字だけだとわかりにくいと言うよりは、わかっていないから文章で説明することは出来ないというところでしょうか。 折角参考サイトを書いてくれたので、そちらのどの項目を実装したいのか、何をしたいのかだけでもしっかり説明してもらえると、回答できると思います。 質問のソースコードを実行してもエラーしか出ないと思います。 まずは動くコードをコピペで掲載して頂くか、コードを確認できるURLを掲載していただければと思います。 わからないものは、なんとなくの記載をされるのではなく、調べたものを使ってもらうか、わかる言葉を使って説明してもらえれば誤解は少ないと思います。 因みに、他に気になったところを抜粋すると <div></div> //テンプレート →なんのことやらわからない。htmlのタグが始まって閉じたなぁくらいな認識。 // index.phpに追記 →ファイル名を指定しているだけで追記はしていない。 fopen( $filename, 'w') →常に上書きされるが、追記したいんじゃないですか?phpマニュアルで関数の説明を必ず読むようにした方がいいです。 他にもありそうですが、コピペしたら解決するのかもしれません。

matusera
質問者

補足

まずCMS機能の誤用申し訳ございません。 今回の目的は、参考サイトでは乱数を用いてファイル名を決めフォームの内容とテンプレートを使いファイル作成しているという手順ですが、僕の場合乱数を用いずindex.phpの<html>~</html>間にフォームとテンプレートの内容を追記したい、ということです。 わかりにくかったら再び指摘お願いします。

関連するQ&A

  • PHPに関して質問です

    簡単な問い合わせフォームを作っていますが HTMLページで入力した文章がPHP画面で表示できません。 ソースは <html> <head> <meta http-equiv="Content-Type" content="text/html; charset_JIS"> <tittle>お問い合わせフォーム</tittle> </head> <body> ■お問い合わせ内容を入力してください。 <br> <form action="check_inquiry.php" method="POST"> お問い合わせタイトル: <br> <input type="text" name="tittle" size="50"> <br> <br> <input type="submit" value="お問い合わせ内容の確認"> </form> </body> </html> と <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <tittle>お問い合わせフォーム</tittle> </head> <body> ■お問い合わせ内容の確認をしてみてください。 <br> お問い合わせタイトル: <br> <?php echo $_POST["tittle"]; ?> </body> </html> どこが問題なのでしょうか?

    • 締切済み
    • PHP
  • 【PHP】index.phpの実行エラー

    themeという関数エラーと思いますが、どのようにしたらindex.phpを正常に実行できるでしょうか。 この(ダミー?)関数の意味と、宣言はどうすればよいでしょうか。 今日初めてPHPを触り、何もわからず恐縮です。よろしくお願いします。 状況: 1)WinXPに、PHP phpdevで、Apache/PHP(Version 4.2.3)/MySQLをインストール。 2)Apache、PHP、MySQLはRun状態。 3)以下のソースのindex.phpを C:\phpdev\www\MagPress というフォルダに配置 4)http://localhost/MagPress を実行すると、以下のエラーが出る。 Fatal error: Call to undefined function: get_header() in c:\phpdev\www\magpress\index.php on line 1 index.phpのソース: ------------------------------------ <?php global $theme; get_header(); ?> <div id="main"> <?php $theme->hook('main_before'); ?> <div id="content"> <?php $theme->hook('content_before'); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); /** * The default post formatting from the post.php template file will be used. * If you want to customize the post formatting for your homepage: * * - Create a new file: post-homepage.php * - Copy/Paste the content of post.php to post-homepage.php * - Edit and customize the post-homepage.php file for your needs. * * Learn more about the get_template_part() function: http://codex.wordpress.org/Function_Reference/get_template_part */ get_template_part('post', 'homepage'); endwhile; else : get_template_part('post', 'noresults'); endif; get_template_part('navigation'); ?> <?php $theme->hook('content_after'); ?> </div><!-- #content --> <?php get_sidebars(); ?> <?php $theme->hook('main_after'); ?> </div><!-- #main --> <?php get_footer(); ?>

  • PHPでHTMLファイル置換 プログラムについて

    以下のプログラムを書きました。 あるHTMLファイルをテンプレートとし、 中に記述している置換文字列を動的に 表示させるというものです。 しかしなかなか表示されません。 どこがおかしいのでしょうか? --template.html-- <html><head><title>test</title></head> <body> 表題 他いろいろ <!-- data replace --> フッター いろいろ </body></html> --index.php-- $page_lines = File("template.html"); $all_lines=''; foreach( $page_lines as $line ){  $all_lines .= $line; } $str = "<div>出力用データいろいろ</div>"; print preg_replace(/<!-- data replace -->/,$str, $all_lines); 以上です。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHPのフォームとAjaxを組み合わせたいのですが

    簡潔にコードを書かせて頂きますが、PHPとjQueryによるAjaxを連携させたいと考えています。 まずform.phpのフォームをsubmitし、その内容をpost.phpへ送り、リダイレクトにてres.phpへ送るという、PHPの基本的な動きをさせますが、 その結果はres.phpという新しいページではなく、Ajaxにてform.phpの<div id="text1">部に元々書かれている<form>ではなく、res.phpの出力内容を出力したいと考えております。 この場合、どのようにjQueryコードを記述すればいいのでしょうか? 色々考えて試してみたのですが、上手くいきませんでした。 自分はform.php、post.php、res.phpという3つのファイルを用意していますが、もしかしたらori.phpという出力用のファイルを用意し、その<div>空間内にform.phpのフォームやres.phpの結果をAjaxによって出力するのかなとも思いましたが、良く分かりませんでした。 アドバイス頂けないでしょうか? 宜しくお願い致しします。 (( form.php )) <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text1"> <h2>その1</h2> <form action="post.php" method="POST" id="form" name="form" > <input type="checkbox" id="news" name="news" value="news" /> ニュース <br /> <input type="submit" name="submit" value="submit" /> <input type="reset" name="reset" value="reset" /> </form> </div> </body> </html> (( post.php )) <?php session_start(); session_regenerate_id(TRUE); $_SESSION["news"] = "news 表示"; $host = $_SERVER['HTTP_HOST']; $uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\'); $extra = 'res.php'; header("Location: http://$host$uri/$extra"); (( res.php )) <?php session_start(); session_regenerate_id(TRUE); ?> <html> <head> <script type="text/javascript" src="./js/jQuery-1.4.4.js"></script> </head> <body> <div id="text2"> <h2>その2</h2> <?php $_SESSION["news"]; ?> </div> </body> </html> <?php session_destroy(); $_SESSION = ''; ?>

    • ベストアンサー
    • PHP
  • PHPでファイルアップ

    はじめまして。 PHPを勉強し始めたとこなのですが、いきなり分かりません。 ファイルの中身を見ないで単純なアップが目的です。 ファイルの名前をファイルの名前: html :uploader.html PHP:p141php としています。 アップしたいフォルダは./upフォルダです。 本を見て作っているのですが、何処が間違えているのかもわかません。 何方か教えて下さい。 ソースは uploader.htmlが <!-- saved from url=(0022)http://internet.e-mail --> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>アップロード</title> </head><body> <form method="post" enctype="multipart/form-data" action="p141.php"> <input type="file" name="upfile"> <input type="submit" value="uploadする"> </form> </body> </html> で p141.phpが <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP"> <title>練習</title> </head> <body> <p> file uploader </p> <?php $updir = "./up/"; $filename = $_FILES['upfile']['name']; if (move_uploaded_file($_FILES['upfile']['tmp_name'], $filename) == FALSE){ print("Upload failed..."); print($_FILES['upfile']['error']); } else { print("<b>" .$filename. "</b> uploaded!"); } ?> </body> </html> です。 PHPがいけるところのサーバーを借りているので細かい設定や 何のソフトを使っているかは分かりません。 OSはLIUNXです。 開発環境はOSがWin2kで秀丸を使って記述しています。

    • ベストアンサー
    • PHP
  • phpのメール送信での質問になります

    メールとお問い合わせ内容は届くのですが、名前とアドレスが届かないので間違っている箇所を教えていただけるとありがたいです。 以下コードになります。 html <body> <main> <section> <h2>お問合せ内容の確認</h2> <form action="mailto.php" method="post"> <div class="contant-area"> <div class="label-container"> <label class="item intem-name">名前</label> <label class="item item-email">メールアドレス</label> <label class="item item-message">問い合わせ内容</label> </div> <div class="text"> <p class="item-post" name="name"><?php echo $_POST["name"]; ?></p> <p class="item-post" name="email"><?php echo $_POST["email"]; ?></p> <textarea class="item-post item-textarea" name="message"><?php echo $_POST["message"]; ?></textarea> </div> </div> <div class="button-area"> <input type="submit" value="送信"> </div> </form> </section> </main> </body> php <?php // フォームデータの取得 $name = $_POST[&#039;name&#039;]; $email = $_POST[&#039;email&#039;]; $message = $_POST[&#039;message&#039;]; // 送信先のメールアドレス $to = &#039;*****@gmail.com&#039;; // 件名 $subject = &#039;お問い合わせがありました&#039;; // メール本文 $body = "名前: $name\n"; $body .= "メールアドレス: $email\n"; $body .= "問い合わせ内容:\n$message"; // 送信元のメールアドレスと名前 $from = &#039;*****1690.xsrv.jp&#039;; $fromName = &#039;お問い合わせフォーム&#039;; // ヘッダー $headers = "From: $fromName <$from>"; // メール送信 $mailResult = mail($to, $subject, $body, $headers); ?>

    • ベストアンサー
    • PHP
  • PHPのPHP_SELFに絡む設定を教えてください

    PHPを勉強中なのですが、以下のソースをSubmit(value=更新)処理すると 結果がURLが見つからない「ページを表示できません」がでます。 恐らく、「PHP_SELF」に絡む設定か、「localhost」のPathに問題があると思うのです。 何かの設定が抜けていると思うのですが、色々調べても分かりません。 どこの設定を直せばいいか教えてください。(^^ 【書籍】 ホンキで学ぼう!PHPのキホン 【環境】 OS:WindowsXPHomeEdition Apapche:1.3.26 PHP:4.2.3 【URL結果】 最初にPHPにアクセスしたときのURL:http://localhost/tmp/php/fileedit.php SubmitしたときのURL:http://tmp/php/fileedit.php 【ソース】書籍の抜粋 <? $filename = "todo01.txt"; if ( $submit ) { $backupfile = $filename.".bak"; echo $backupfile; if ( copy($filename, $backupfile) ) { $fp = fopen($filename, "w"); if(flock($fp, 2)){ fputs($fp, $contents); flock($fp, 3); }else{ echo "ERROR: file lock is failed.<BR>\n"; exit; } fclose($fp); }else{ echo "ERROR: backup failed.<BR>"; exit; } } // ファイル書き換え部終わり ?> <HTML> <HEAD> <TITLE> <? echo $filename ?> </TITLE> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;CHARSET=euc-jp"> </HEAD> <BODY> <FORM ACTION="<? echo $PHP_SELF; ?>" METHOD="POST"> <TEXTAREA NAME="contents" ROWS="25" COLS="100"> <? require ( $filename ); phpinfo(); ?> </TEXTAREA> <INPUT TYPE="submit" NAME="submit" VALUE="更新"> </FORM> </BODY> </HTML>

    • ベストアンサー
    • PHP
  • PHPについて(初心者)

    はじめまして、PHPの初心者の者です。xamppをインストールしたあと、様々な設定をしました。その後、お問い合わせフォームというプログラムのために2つファイルを作りました。 一つ目は、inquiery.htmlというファイルで、ソースコードは <html> <head> <meta http-equiv="Content-Type" content="text/html;charset=Shift_JIS"> <title>お問い合わせフォーム</title> </head> <body> ■お問い合わせ内容を入力してください。 <br> <form action="check_inquiry.php" method="POST"> お問い合わせタイトル: <br> <input type="text" name="title" size="50"> <br> <br> <input type="submit" value="お問い合わせ内容の確認"> </form> </body> </html> というHTMLファイルで、入力した内容を、下の「check_inquiry.php」に飛ばします。その後、 <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>お問い合わせフォーム</title> </head> <body> ■お問い合わせ内容を確認してください。 <br> お問い合わせタイトル: <br> <?php echo $_POST['title']; ?> </body> </html> check_inquiry.phpファイルでinquiry.htmlファイルの内容を受け取ります。 うまくいけば、$_POST['title' ]: でinquiry.htmlの内容を受け取るはずなのですが、うまくいきません。 inquiry.htmlの送信ボタンをクリックすると、check_inquiry.phpのソースコード全体が表示されてしまいます。 何が間違っているのかわかりません。もし、詳しい方がいましたら、アドバイスいただけないでしょうか?よろしくお願いします。

    • 締切済み
    • PHP
  • PHPのエラーメッセージ

    HTML文書からPHPに送ったファイル名のついたファイルをunlink()関数で削除しようとしているのですが、添付したスクリーンショットのようなエアーメッセージが出てきて進めません。 PHPのコードは下のようなものです。 <!doctype html public "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title> QAdeleteFile.php</title> </head> <body> <?php $FileName=$_POST["deleteFileName"]; $FileName="C:\\xampp\\htdocs\\".$FileName; echo $FileName ; unlink($FileName); echo "<form id='next' method='POST' action='QAgmeOver.php' >"; echo "<input type='submit' value='call QAgameOver' >"; echo "</form>"; ?> <!-- <script type="text/JavaScript"> window.document.getElementById("next").submit(); </script> --> </body> </html> エラーメッセージで言っているQAgameOver.phpというのは上に挙げたコードのプログラムです。このメッセージでは、PHP はそのファイルをこのプログラムの中で探そうとしているように見えますが、そのファイルは当然ローカルサーバーのルートであるhtdocs の中に置いてあります。 なぜこうなるのでしょうか?詳しい方、どうか教えてください。

    • ベストアンサー
    • PHP
  • インクルードファイル内にPHPコードを挿入してecho表示

    処理が異なる2つのPHPファイルを一つのテンプレートファイルから index.phpファイルへ表示させたいのですが、テンプレートファイル内に css_echo.phpをインクルードさせたコードを書くとそのままソース上に表示されてしまいます。 どのような方法をとればいいかアドバイス下さい。 ■条件としては、 ・css.php/css_echo.phpの処理ファイルはそれぞれ別ファイルとしたい ・index.phpファイルは <html> <head> <?php require_once('./css_echo.php');//ブラウザを判別してCSSファイルを出力 ?> </head> <body> <?php $temp = "./temp.html"; //このページのテンプレートファイル名パス require_once('./echo.php'); ?> </body> </html> には書かない方法で対応したいです。 ファイルは以下です。 ---------------------------------------------------------------------- テンプレートファイル(temp.html) <html> <head> <!--問題はここです。 --> <?php require_once('./css_echo.php');//ブラウザを判別してCSSファイルを出力 ?> </head> <body> サンプル表示{この中はブラウザ判別して表示・非表示にする} </body> </html> 処理PHPファイル(echo.php) <?php $htm = file_get_contents($temp); echo preg_replace('/[{}]/', '', $htm);// {}内を削除して表示 ?> ブラウザ判別用ファイル(css_echo.php) <?php //実際にはこの前にブラウザ判別し処理コード(省略) echo "<link rel=\"stylesheet\" href=\"$dir$pc\" type=\"text/css\">\n"; ?> メイン表示用PHPファイル(index.php) <?php $temp = "./temp.html"; //このページのテンプレートファイル名パス require_once('./echo.php'); ?> ------------------------------------------------------------------------

    • 締切済み
    • PHP

専門家に質問してみよう