OCN光で最大124,800円おトク!

過去に同じような質問もありましたが、いろいろ検索してこちらの過去ログを拝見しても解決できなかったので質問させてください。

掲示板で確認画面を作り確認して書込みをさせる掲示板を作っています。

掲示板にタイトルと名前とメッセージを同時に書き込みたいのですが、同時に書き込む方法がわかりません。

下がソースです。(エラーが出る状態です)

<?php
$title = $_REQUEST["title"];
$title = $title."\n";

$namae = $_REQUEST["namae"];
$namae = $namae."\n";

$body = $_REQUEST["body"];
$body = $body."\n";
?><html>
<head>
<title>Sample01</title>
</head>
<body>
<?php
$fp = fopen("../php/test1.txt","a");
fwritefwrite($fp,$title,$namae,$body);//ここを変えてみました
fclose($fp);
echo "書込み確認画面",
"<a href=\"./form.php\"></a>";
?>

わかる方おりましたらご教授お願いします。

このQ&Aに関連する最新のQ&A

A 回答 (4件)

よく使われる方法は各文字列を特定の区切り文字で連結して1個の文字列にする方法です


区切り文字が , の場合は特別にCSVと呼ばれます
他にもタブなどが使われます。
ただ各文字列に区切り文字と同じ文字がある場合に不都合が出ますのでいろいろな工夫が必要になります。(" "で囲む、大文字のコンマに変換する、タブをスペースに変換する等)
<?php
$title = $_REQUEST["title"];
$title = str_replace("\t", " ", $title);

$namae = $_REQUEST["namae"];
$namae = str_replace("\t", " ", $namae);

$body = $_REQUEST["body"];
$body = str_replace("\t", " ", $body);

$log = $title . "\t" . $namae . "\t" . $body . "\n";

fwrite($fp, $log);

読み込む場合は
$log = fgets($fp);
list($title, $namae, $body) = explode("\t", $log);
等で取り出します。
    • good
    • 0
この回答へのお礼

大変わかりやすい説明ありがとうございました。
CSVについての知識が乏しくよくわかっていませんでした。
無事に解決することが出来ました。

お礼日時:2007/06/19 15:32

fwritefwrite($fp,$title,$namae,$body);




fwrite($fp,$title.$namae.$body);
とすればとりあえず動くでしょう。
$fpと$titleの間は「,」のままで、その後ろのカンマは「.」に
    • good
    • 0
この回答へのお礼

大変失礼致しました。
投稿する前に確認を怠ってました。
urlencodeで変数を渡すことも出来るのですね。
大変勉強になりましたありがとうございます。

お礼日時:2007/06/19 15:36

fwritefwrite()関数ってあるのですか?



$arg = $title . "," . $namae . "," . $body;
fwrite($fp,$arg);

したいの?

この場合、$titleと$namaeと$bodyには","は使えませんよね。
予め、それぞれurl_encodeしておくのですかね。
    • good
    • 0
この回答へのお礼

大変失礼致しました。
投稿する前に確認を怠ってました。
urlencodeで変数を渡すことも出来るのですね。
大変勉強になりましたありがとうございます。

お礼日時:2007/06/19 15:42

質問なのですがそれはtxtファイルにcsvファイル形式で書き込んで


読み込む際にsplitで区切って表示するようにするのではだめなんですか?
    • good
    • 0
この回答へのお礼

CSVについての知識がなく、当初まったく意味がわかりませんでした。ご意見参考にさせていただきます。
ありがとうございました。

お礼日時:2007/06/19 15:41

このQ&Aに関連する人気のQ&A

php 大文字」に関するQ&A: FALSEの読みは?

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q配列をファイルに書き込む方法

下記($dataに入ってる)配列をファイルに書き込みたいのですが、書き込み方法が分かりません、教えていただけませんでしょうか・・・。
$dataの中身は
Array
(
[0] => あいうえお
[1] => かきくけこ
[2] => さしすせそ
[3] => たちつてと
)
これを
$fp=fopen("1.txt","w");
fputs($fp,$data);
fclose($fp);
にするとArrayとだけ表示されます。
あいうえお\n
かきくけこ\n
さしすせそ\n
たちつてと\n
と書き込みたいのですが・・・、お願いします。

Aベストアンサー

<?php
$data = Array(
0 => 'あいうえお',
1 => 'かきくけこ',
2 => 'さしすせそ',
3 => 'たちつてと'
);
$fp=fopen("1.txt","w");
foreach ($data as $a){
fputs($fp,$a."\n");
}
fclose($fp);
?>

↑これでいかがでしょうか?

Qファイル書込みで一行もしくは部分的に上書きする

教えて下さい。
下のようなテキストデータがあります(sample01.txtとします)
(内容)
1111000000000000
1111000000000000
1111000000000000
これを
1111000000000000
1111001111110000
1111000000000000
と言うふうに2行目もしくは部分的に上書きして保存したいです。
よろしくお願いします。

Aベストアンサー

この問題に対するよくある解決策です。下に行くほど手間ですが大きなデータが扱えるようになります。

1.ファイルが小さければ、全部配列に読み込んで、必要な操作を行ったあと同じファイル名で書き出す

2.ファイル名を変更してバックアップファイルとする作る。
バックアップを読み込み専用で開き、元のファイル名で新しいファイルを書き込みモードwで開く。

1行ずつfgetsで読み込み、ファイルにfputsで書き出す。
操作したい行が来たらその操作を行って同様にファイルに書き出す。
残りを全部書き出しす。
全部成功したらバックアップを削除する。エラーが起きたら編集中のファイルは削除してバックアップを元のファイル名にする

3.1行の長さを決まった長さにして(いわゆる固定長レコード)r+モードでfopenし、レコード長xレコード数で目的の場所にfseekして特定のレコードをfread/fwriteで上書きする。レコードの修正かレコードの末尾の追加の操作は効率がいい。レコードの挿入・削除が発生するときは全部fread/fwriteする。

4.ファイルが巨大で全部fread/fwriteするが重い処理になるなら、別途索引ファイル(インデックス)をつくり、レコードの追加はファイル末尾に追記し、インデックスファイルに検索キーとレコードの番号かファイルポインタの位置を記録する。これで目的のレコードがファイル中のどこにあるかを知ることができる。レコードの削除はインデックスに目印をつけるだけにして、実際にディスクから消去するのは負荷の低いときにガベージコレクションで行う。

5.4までやるくらいなら出来合いのデータベースを使うほうがよい。MySQLとかPostgresqlなど。

この問題に対するよくある解決策です。下に行くほど手間ですが大きなデータが扱えるようになります。

1.ファイルが小さければ、全部配列に読み込んで、必要な操作を行ったあと同じファイル名で書き出す

2.ファイル名を変更してバックアップファイルとする作る。
バックアップを読み込み専用で開き、元のファイル名で新しいファイルを書き込みモードwで開く。

1行ずつfgetsで読み込み、ファイルにfputsで書き出す。
操作したい行が来たらその操作を行って同様にファイルに書き出す。
残りを全部書き出しす...続きを読む

Qなぜ、unexpected T_VARIABLEになるのでしょうか? 

WindowsXP機に、PHP5とPEARを入れています。
あるWebサイトに記述されている下記のサンプルスクリプトをコピペして(PEARは絶対パスに書き換えて)実行しましたが、次のエラーが出ます。全角スペースは入っていませんし、原因が分かりません。
なぜ、unexpected T_VARIABLEになるのでしょうか? どのようにすれば解決できるでしょうか?
エラー
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\Program Files\Apache Group\Apache2\htdocs\HQuickForm_test\QfrmSmpl.php on line 14

サンプルスクリプト一部抜粋:
<?php
require_once("C:\php\PEAR\HTML\QuickForm.php");
class QfrmSmpl{
var $_form;
function QfrmSmpl($sbmtAct){
$this -> _form = new HTML_QuickForm("frmSmpl","post",$sbmtAct); }
function setForm(){
$this -> _form -> addElement("text","txtName","名前(全角日本字):");
$this -> _form -> addElement("text","txtEname","名前(半角英字):");
$this -> _form -> addElement("text","txtEmail","E-mail:");
$this -> _form -> addElement("text","txtEmail2","E-mail(確認用):");
$this -> _form -> addElement("textarea","txtrComment","コメント:");
}
$this -> _form -> applyFilter(__ALL__,"trim");
$this -> _form -> addRule("txtName","名前を入力!","required", null, "client");
$this -> _form -> addRule("txtEname","半角英字で入力!","alphanumeric", null, "client");
$this -> _form -> addRule(array("txtEmail","txtEmail2"),"メールアドレス不一致!","compare", null, "client");
$this -> _form -> addRule("txtEmail","無効なメールアドレス!","email", null, "client");
$this -> _form -> addRule("txtrComment","コメントを入力!","required", null, "client");
$this -> _form -> setRequiredNote("<font color='red'>*</font>必須入力");
}
以下略

WindowsXP機に、PHP5とPEARを入れています。
あるWebサイトに記述されている下記のサンプルスクリプトをコピペして(PEARは絶対パスに書き換えて)実行しましたが、次のエラーが出ます。全角スペースは入っていませんし、原因が分かりません。
なぜ、unexpected T_VARIABLEになるのでしょうか? どのようにすれば解決できるでしょうか?
エラー
Parse error: syntax error, unexpected T_VARIABLE, expecting T_FUNCTION in C:\Program Files\Apache Group\Apache2\htdocs\HQuickForm_test\QfrmSmpl.php...続きを読む

Aベストアンサー

検索したら似たようなスクリプトがあったんですが
http://digit-01.com/ownpage/ownpage_quickform.html
これの
//フォーム入力チェックの定義(, null, "client")で、クライアント側でチェック function checForm(){
は function checForm(){ の前で改行が必要なようです

Qsyntax error, unexpected '}' というエラーの対処法

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" maxlength="3" />
<input type="sbumit" value=回答" />
</form>
<hr />
<?php
session_start();
if(is_null($_SESSION['answer'])){
mt_stand(microtime()*1000000);
$_SESSION['answer']=mt_rand(1,100);
$_SESSION['game_cnt']=0;
}
if($_POST['answer']!=""){
$_SESSION['game_cnt']++;
if($_session['answer']==$_POST['answer']){
print("おめでとうございます".
$_SESSION['game_cnt']."回で正解しました!");
session_destroy();
}else{
if($_SESSION['answer']>$_POST['answer']){
print("もう少し大きいです。");
}else
print("もう少し小さいです。");
}
}
}
?>
</body>
</html>
それとこの間違えたところをなおしたあとはいつもコンピュータを再起動しないと修正したところが適用されないのですがほかに方法はないですか?基本的な質問ですいません。

PHPを習い始めて三日目になるのですがParse error: syntax error, unexpected '}' in C:\Program Files\Apache Group\Apache2\htdocs\****\****\game.php on line 33
というエラーがでるのですが33行目前後のどこをなおせばいいのでしょうか?
・game.php
<html>
<head>
<title>数当てゲーム</title>
</head>
<body>
<h1 style="background:#cccccc">数当てゲーム</h1>
<form method="POST" action="game.php">
1~100までの数を入力してください
<input type="text" name="answer" size="5" max...続きを読む

Aベストアンサー

print("もう少し大きいです。");
}else
print("もう少し小さいです。");
のelseの後に{がないようですが、大丈夫でしょうか?

QPHPでmySQLのテーブルを作成したい

今PHPの練習をしているのですが、作ろうとしているPHPの、

0:$tbname="データベース名"、とする。
1:データベースにアクセスする
2:アクセスしたデータベースに$tbnameと同じ名前のテーブルがあるかないかをチェック
3:同じ名前のテーブルがあるならそこで終了
4:同じ名前のテーブルがないなら、$tbnameをテーブル名、ID(INT)とNAME(CHAR)をカラム名とするテーブルを新規に作成する

という動作をする部分のコードの書き方(どのようなSQL文を使えばいいのか)がわかりません。
どなたかご教示のほど、どうかよろしくお願いします。

Aベストアンサー

「0:$tbname="データベース名"、とする。」は$dbnameとしました。
ご確認ください。

<?php
$host="localhost"; // ホスト名
$user="user"; // ユーザー名
$pass="pass"; // パスワード

$dbname="db_name"; // DB名
$tbname="table_name"; // テーブル名

// MYSQL接続
$db = mysql_connect($host,$user,$pass) or die("MYSQLへの接続に失敗しました");
// DB選択
mysql_select_db($dbname,$db) or die("DB選択に失敗しました");
// テーブル情報取得
$result=mysql_query("SHOW TABLES",$db) or die("テーブル取得に失敗しました");
// テーブル名チェック
while($row=mysql_fetch_assoc($result)) {
if($row["Tables_in_".$dbname]==$tbname) exit($tbname."は存在します");
}
// テーブル作成
$sql="create table ".$tbname." (ID INT, NAME CHAR(32))";
mysql_query($sql,$db) or die("テーブル作成に失敗しました");
print($tbname."を作成しました")
?>

「0:$tbname="データベース名"、とする。」は$dbnameとしました。
ご確認ください。

<?php
$host="localhost"; // ホスト名
$user="user"; // ユーザー名
$pass="pass"; // パスワード

$dbname="db_name"; // DB名
$tbname="table_name"; // テーブル名

// MYSQL接続
$db = mysql_connect($host,$user,$pass) or die("MYSQLへの接続に失敗しました");
// DB選択
mysql_select_db($dbname,$db) or die("DB選択に失敗しました");
// ...続きを読む

QPermission denied in

PHPを実行するとWarning: fopen failed to open stream Permission denied inと
表示されてしまいます。
インターネットを使い、調べてはいますが、
上記のように表示してしまいます。
ファイルです。パーミッションは606にしました。

このWarningを表示させないようにするには、どのようにすれば
良いのか教えて頂けると嬉しいです。

Aベストアンサー

あとは
> PHPを実行するユーザーとそのグループはどうなってますか?

PHPを直接コマンドラインから実行するのなら、ユーザーはあなたですが、httpサーバーでモジュールやCGIとして実行するなら別の権限(nobodyとか)になっていると思います。

あとは
ディレクトリのパーミッションを 707 にする
ディレクトリとファイルのオーナーをPHPを実行するユーザーにする
とかでしょうか。

Qテキストファイルの先頭への文字列挿入について

更新履歴を自動で作成するようなものを作りたく思っています。

それで既に何かが入力されているテキストファイルに
先頭への挿入という形で書き込みを行いたいのですが
なにか良い方法はありませんか?

Aベストアンサー

一度書き直したので、少し間違ってました。
正しくは

/// 現時点のファイルの内容を抜き出す
$value = file_get_contents(ファイル);

$new = "更新内容";/// 更新内容
$fp = fopen(ファイル,'w');///ファイルを開く
fwrite($fp,$new.$value);/// 元ファイルの内容に更新内容を加えて書き込み
fclose($fp);/// ファイルを閉じる

ま、#1,2さんのおっしゃることを書いただけです。
用はPHPリファレンスを見て実現できそうな関数を並べるだけですから、アイデアの問題だと思います。
思い通りの動作を1つの関数で実現できることはあまりないですね。
PHP歴1年で、知識も経験も少ないですが、やりたいのにできないということは今のところありません。
初心者なのでムダな処理が多いかもしれませんが、改善すればいいだけです。とりあえずは、動くスクリプトを作ることから始めると楽です。がんばりましょう。

Q自動で番号を振りたい

phpでメールフォームを作っています。
注文用のフォームなのですが注文番号を自動で割り当て
メール送信時に表示させたいと思っております。

全5桁位で重複させない番号をランダムで振れればいいのですが
mysqlと連動などしていないのでこれは無理でしょうか?

00001~99999まで通し番号で振り99999になったら00001に戻ると
いう形式でも構わないのですがいずれは重複してしまうのかと
悩んでおります。

phpには知識がないもので伝わりづらい質問かと思いますが
方法を具体的に教えて頂けますと幸いです。

アドバイスや参考サイトでも構いませんので宜しくお願い致します。

Aベストアンサー

 追記ですが、お詫びに、そのdata_order.plを簡易的に見るphpを作りましたので必要でしたら使ってやってください。

・show_list.php ---------------------------------------------

<html><body>
<?php
$temp = $new_no = '';
$temp_ar = $new_ar = $new_list = array();
$data_mail = './data_order.pl';

$DATA_LIST = fopen( $data_mail , 'r');
flock($DATA_LIST, LOCK_SH);

while(!feof($DATA_LIST)){
$temp = trim(fgets($DATA_LIST));
$temp_ar = explode("+", $temp);
array_push($new_ar, $temp);
}

flock($DATA_LIST, LOCK_UN);
fclose($DATA_LIST);

foreach($new_ar as $value){
$new_list = explode('+', $value);
if(!empty($new_list[0])) print "<li>" . $new_list[0] . " = " . $new_list[1];
}

?>
</body></html>

----------------------------------------------------------------

 追記ですが、お詫びに、そのdata_order.plを簡易的に見るphpを作りましたので必要でしたら使ってやってください。

・show_list.php ---------------------------------------------

<html><body>
<?php
$temp = $new_no = '';
$temp_ar = $new_ar = $new_list = array();
$data_mail = './data_order.pl';

$DATA_LIST = fopen( $data_mail , 'r');
flock($DATA_LIST, LOCK_SH);

while(!feof($DATA_LIST)){
$temp = trim(fgets($DATA_LIST));
$temp_ar = explode("+", $temp);
array_push($...続きを読む

QPOSTで受け渡したものを保存したいです。

POSTで受け渡したものを保存したいです。
携帯サイトを作っています。

例えば、phpで表示させるページには「今日のひと言」というような項目を設け、
別のhtmlファイルで入力フォームを作っておき、そこに入力し送信すると、
その「今日のひと言」のところに反映されるようにしたいと考えています。
POSTで受け取ることまでは出来たのですが、サイトを更新するとまた消えてしまいます。
新たにフォームから入力されるまで、前の「今日のひと言」を残しておくためにはどのようにしたらよいのでしょうか?

phpも初心者なので何卒よろしくお願いいたいます。

Aベストアンサー

簡単なのはセッションに保持しておいて、入力画面からの遷移以外はセッションの値を出力してしまうことですね。
ブラウザを閉じて、再度同じページを開いた際も、前回の入力した文字列を出力したい場合は、クッキーを使ったり、DBで値を保持しておいて、それを出力するしかないです。

>サイトを更新するとまた消えてしまいます。

の更新というのは、F5キーを押す、ということでよろしいでしょうか?

で、あった場合、
例えば入力フォームのテキストボックスを「txtHitokoto」とした場合、

「今日のひと言」を出力するフォームで

//セッションを開始
session_start();
//テキストボックスの値をポストしていたら
If($_POST["txtHitokoto"]){
 $_SESSION["HITOKOTO"] = $_POST["txtHitokoto"];
}
//ポストした値(セッション)を画面に出力
Echo $_SESSION["HITOKOTO"];

で、F5押下時(ブラウザ更新時)もひと言を出力できます。

ブラウザを閉じて、再度開いた際も、っとなると、オープンサイトであればDBを用いるべきですね。
PHPであればポスグレやMySQLがいいでしょう。

DB操作は別途ご自身で御調べになるか、別でスレを立てて下さいね。

簡単なのはセッションに保持しておいて、入力画面からの遷移以外はセッションの値を出力してしまうことですね。
ブラウザを閉じて、再度同じページを開いた際も、前回の入力した文字列を出力したい場合は、クッキーを使ったり、DBで値を保持しておいて、それを出力するしかないです。

>サイトを更新するとまた消えてしまいます。

の更新というのは、F5キーを押す、ということでよろしいでしょうか?

で、あった場合、
例えば入力フォームのテキストボックスを「txtHitokoto」とした場合、

「今日のひと言」を...続きを読む

Qfetch_arrayでのエラー

fetch_arrayでのエラー

はじめまして。初心者ですが、ご教授頂きたいです。
PHP,mysqlでサイトを作っていますが、

while ($row = mysqli_fetch_array(mysql_query($dbc,"SELECT userid FROM user_a")))
{
$data = $row['userid']."member"; //テーブル名
mysqli_query($dbc,"DELETE FROM $data WHERE USERID = 'xxx'");
}

このように書いたところ、

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in


とエラーが返ってきてしまいます。
テーブル user_a の中にある "userid" を一つずつ取り出し、
それぞれの userid.member というテーブルに xxx がある行を削除していきたいのが目的です。

ネットで探しても、このエラーに関して解決策が書かれているサイトが見当たらなく
途方に暮れている次第です。

どうかお助けください。宜しくお願い致します。

fetch_arrayでのエラー

はじめまして。初心者ですが、ご教授頂きたいです。
PHP,mysqlでサイトを作っていますが、

while ($row = mysqli_fetch_array(mysql_query($dbc,"SELECT userid FROM user_a")))
{
$data = $row['userid']."member"; //テーブル名
mysqli_query($dbc,"DELETE FROM $data WHERE USERID = 'xxx'");
}

このように書いたところ、

Warning: mysqli_fetch_array() expects parameter 1 to be mysqli_result, boolean given in


とエラーが返ってきてしまいます。
テーブル use...続きを読む

Aベストアンサー

運用方法として・・・

メンバー分テーブルがあるということでしょうか?
あまりに冗長な作りにみえますが・・・
memberテーブルを一つだけ用意して、useridフィールドを用意しておけばよいのでは?


人気Q&Aランキング