【PHP】質問スレッドPart3

このエントリーをはてなブックマークに追加
952nobodyさん:02/05/31 01:08 ID:???
953nobodyさん:02/05/31 04:33 ID:???
Apache 2.0.36とPHP 4.2.0でPOST後に,自分自身をリダイレクトしようと
しているのですが header("Location: ".$_SERVER['PHP_SELF']); のところで
エラーが発生してしまいます。

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
 header("Location: ".$_SERVER['PHP_SELF']);  ←ここでエラー
}

エラーメッセージは,Warning: Cannot add header information - headers
already sent by ...... です。

どうしたら,POST後に自分自身をリダイレクトできるのでしょうか?
954名無しさん:02/05/31 05:37 ID:???
POST後とかじゃなくて・・・。
改行とか先に出力されてたりしない?
955nobodyさん:02/05/31 06:24 ID:???
>>953
メッセージ嫁。
956FAQ:02/05/31 07:45 ID:???
覚えておいて頂きたいのは、header() 関数は、
通 常の HTML タグまたは PHP からの出力にかか
わらず、すべての実際の出 力の前にコールする
必要があることです。 頻出するエラーとして、(以下略)
http://www.php.net/manual/ja/function.header.php

http://ns1.php.gr.jp/pipermail/php-users/2002-February/005678.html
http://ns1.php.gr.jp/pipermail/php-users/2002-February/005680.html
http://ns1.php.gr.jp/pipermail/php-users/2002-February/005681.html
http://ns1.php.gr.jp/mailman/listinfo/php-users

>エラーメッセージは,Warning: Cannot add header information - headers
>already sent by ...... です。
質問なんですが、この by の意味は?
957nobodyさん:02/05/31 09:29 ID:???

 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 |  ♪聞いてうにゅうリーナ ちょっと言いにくいんだけど
 |  ♪聞いてうにゅうリーナ
 |
 |  最近、エラーメッセージも読まずに質問する厨がふえてるんだよ
 |  ぐんにょり
 |
 |  聞いてくれてあーりがと うにゅうリーナ♪
  \____ __________________
           V
      , -―- 、    ./ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
   /了 l__〕      〈]  |  火炎瓶投げてきていいで
    7| K ノメノ )))〉  |  不審美や。
    l」 |」(l| ( | | ||    \_  _____________
    | |ゝリ " (フ/リ       V
     | | /\_V〕、      _/l__
.    l l | /ヽ/<ノ|〉ヘ.     /   く
     !リl〈 〈〉、_ト .〉     | ´ω`  |
        V^i` ―lV     |  C=' |
      `ァ'/  l|-'    | ̄ ̄ ̄ ̄ ̄|
      / \/V|    ~|  ̄ ̄ ̄ ;|~
       ゝ     |     |    .;;|
958名無しさん:02/05/31 10:24 ID:???
PocketPCで排他の機能を作ろうとしています。
PocketPCでは新規にウインドウを開くことや、モーダルダイアログ
などのイベントは一切発生しません。

まず、テキストファイルにフラグを立てるやり方をしていましたが、
フラグを消す処理を違うフレームに配置して
onunLoadイベントで実行させる方法がうまく動かずに苦労しています。

そこでそれとは違う方法も模索しています。
PHPではどのクライアントからでも参照できるグローバルな変数を
持つことは可能でしょうか?回答を宜しくお願いします。
959nobodyさん:02/05/31 13:10 ID:kQ6/O1xW
スレ違いな気もするのですが、

<script language="javascript">

function test1 (){

for (i=0;i<document.test_form.test.length;i++){
document.test_form.test[i].checked=true;
}

}

</script>

<form name="test_form">
<input type="checkbox" name="test" value="">
<input type="checkbox" name="test" value="">
<input type="button" value="test" onclick="test1()">
</form>

と同等の処理を、PHPで配列として扱えるようにnameを

<form name="test_form">
<input type="checkbox" name="test[]" value="">
<input type="checkbox" name="test[]" value="">
<input type="button" value="test" onclick="test1()">
</form>

として処理したいのですが、
どのようにすればいいのか、どなたか教えてもらえないでしょうか?

960nobodyさん:02/05/31 14:52 ID:???
>>958 PHPでファイルに変数を保存する事はできます
誰に何をいつまでさせたくないのか分からないので
後は何とも。

>>959 はずしたらスマソ。 しかしセンスないなぁ>>960
<html><body>
<?php
foreach($_POST["test"] as $value) {
echo $value;
}
?>
<form method="post" action="<?= $_SERVER["PHP_SELF"];?>">
<input type="checkbox" name="test[]" value="MA">MA
<input type="checkbox" name="test[]" value="MUKO">MUKO
<input type="submit" value="Go">
</form>
</body></html>
961名無しさん:02/05/31 16:02 ID:???
>>960
回答ありがとうございます。

質問の仕方がまずかったのであまり趣旨が伝わらなかったようで
すみません。要するに、ASPでいうところのGlobal.asaのような
グローバルなセッションを持つことは可能でしょうか?
962959:02/05/31 16:48 ID:OsEG1hGV
>960
うーん、javascriptをどう書けば name が test[] の項目を一括で変更できるかという話なんですよ。
PHP使ってる人の方が同じ状況に陥った人が多そうなのでここに書いてみたんですが。。。
963nobodyさん:02/05/31 18:00 ID:3WIJ9xDF
>>962
JavaScriptがわかりゃだれでもできるだろ
Web制作板でも逝け
964qqq:02/05/31 21:08 ID:Yl9y3+1W
聞くのも恥かしいほどの初歩的なことですが、すでに4時間試行錯誤していますが
解決できません。助けて下さい。

フォーム送信データを変数として取り込めないのです。

参考書に付いていた、サンプルがあるのですが、

sample3.html

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<title>サンプル3</title>
</head>
<body>
<form method="post" action="sample3.php">
お名前: <input type="text" name="YourName"><br>
<input type="submit" value="GO">
</form>
</body>
</html>

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

sample3.php

<?
header("Content-type: text/html; charset=euc-jp");
?>
<html>
<head>
<title>サンプル3</title>
</head>
<body>
お名前: <b><? print($YourName); ?></b><br>
</body>
</html>

----------------------
つづく。。。
965qqq:02/05/31 21:08 ID:Yl9y3+1W
つづき

php自体は普通のプログラム(時間表示)などはちゃんと
動作しています。上のサンプルも、送信ボタンを
押すとsample3.phpを実行してくれるのですが、
変数が空白で表示されてしまいます。

他の参考書でも入力フォームの物は変数が空白で
帰ってきてしまいます。変数名の大、小文字
対策もしています。(付録のcdromから直接使っても
結果は同じでした。)

なんかすんごい初歩的なことを見逃しているのは
十分わかっているのですが、それがなにかわからなくて。。

redhat7.2
apache1.3.24(ソース版)
php-4.2.1(ソース版)
966nobodyさん:02/05/31 21:12 ID:???
<?xml version="1.1"?>
これをインクルードしたり記述すると止まります
先輩!解決方法教えてください
967nobodyさん:02/05/31 21:34 ID:???
質問させて頂きます。

list($v['name'],$v['msg'],$v['ipaddr'],$v['icon'])
= explode("\t",trim(fgets($fp, 4096)));
というところで、もし
 名無しさん\tage\t\tface.png
というログだった場合、undef代入したということで Undefined offset 3 と
怒られてしまうのですが、うまい方法無いでしょうか。
やっぱlistを放棄してせこせこ切り分けするしか無いんでしょうか。

# error_reporting(5);じゃあんまりだなぁ…と思うのです。
# 別にundef代入してもいいじゃん…
968qqq:02/05/31 22:02 ID:Yl9y3+1W
>>964-965
自己レスです。

4.2からはグローバル変数がデフォルトでoffになっていたようですね。
おさわがせしました。

それにしてもphp.iniなんかも探しまくったのですが、見つからないと思ったら
手動なんですね。この手の設定があやしいと思っていたのですが。
3冊の参考書にはそれらしい注意事項も書かれていなかった(4.1まで)ので
まさか初期状態で使えなくなるとは。。。初心者にはマジできつかったです。



969967:02/05/31 23:31 ID:???
>>966
これ。
http://jp.php.net/manual/ja/language.basic-syntax.php#language.basic-syntax.phpmode
最初の方法は、短縮型のタグが有効な場合にのみ利用可能です。
短縮型のタグは、short_tags() 関数を使用するか (PHP 3のみ)、
PHPの設定ファイルに short_open_tagを設定する か
--enable-short-tags オプションを configure に 指定して
PHP をコンパイルすることにより、有効にできます。
970951:02/06/01 00:12 ID:???
>>952
おお、ありがとうございます!!
では、じっくり読みたいとおもいます。
971nobodyさん:02/06/01 03:05 ID:???
>>966

<? echo('<?xml version="1.1"?>'); ?>
972nobodyさん:02/06/01 03:20 ID:???
次スレ テンプレにはFAQとしてPHP4.2.1の変更点を書いといたほうが良いかもね。
メジャーバージョンがあがるまでは間違える人が後を断たないだろう・・。
973967:02/06/01 06:16 ID:???
自己解決しました。
http://jp.php.net/manual/ja/function.array-pad.php

list($v['name'],$v['msg'],$v['ipaddr'],$v['icon'])
= array_pad(explode("\t",trim(fgets($fp, 4096))), 4,0);
でなんとか。綺麗じゃないけど
974nobodyさん:02/06/01 12:44 ID:???
セッション変数ってやっぱ変数だから数字だけだとまずいんだよね?
ショッピングカート作ってて
商品番号=商品個数
みたいなデータを渡そうと思ってたんだけどうまくいかないや
多分これが原因かな?
975nobodyさん:02/06/01 13:13 ID:???
<html>
<body>
<?php
session_start();
if(!isset($_SESSION["num"])) {
$_SESSION["num"] = 10;
} else {
echo "num = ".$_SESSION["num"];
//リロードしてください
}
?>
</body>
</html>
976nobodyさん:02/06/01 13:28 ID:???
>>973 >>967を再現したくて、↓してみたけど
error_reporting = E_ALLで

$str = " 名無しさん\tage\t\tface.png";

list($v['name'],$v['msg'],$v['ipaddr'],$v['icon'])
= explode("\t",trim($str));
すると、警告なしで下記のようになりました。
$v['name'] => 名無しさん
$v['msg'] => age
$v['ipaddr'] =>
$v['icon'] => face.png
ファイル使わないとダメ?
PHP 4.2.1です。


977nobodyさん:02/06/01 13:36 ID:???
>>975
おお!ありがとうございます。
勉強不足でした。
978[email protected]:02/06/01 13:50 ID:???

「 RX-2001 」がパワーアップした、
「 RX-2000V 」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA

店頭販売価格は、13900 円なんですが、
今回だけ、破格の 7100 円に設定して
おります。

購入希望の方は、名前の所にも書いて
ある、[email protected] 迄、
メールを下さい。

不安な方は、落札をして頂いても
構いません。
979nobodyさん:02/06/01 14:47 ID:PQ5ydhwv
PHP-4.2.1 Apache 1.3.24 linux(kernel 2.4.18)

./configure \
--with-apxs=/usr/local/apache/bin/apxs \
--enable-mbstring \
--enable-mbregex \
--enable-mbstr-enc-trans \
--with-pgsql=/usr/local/pgsql \
--enable-sockets

---e.hdml (EUC)
<hdml version="3.0">
<display>ほげほげ</display>
</hdml>

---p.php
<?php
mb_http_output('SJIS');
ob_start('mb_output_handler');

header('content-type: text/x-hdml; charset=shift_jis');

require './e.hdml';
?>

p.phpにアクセスするとEUCなんです。
e.hdmlをshift_jisにコンバートして試すと、SJISなんです。
php.iniのmbstring.http_outputなどをいじっても結果は変わりません。
requireではなく、fopenで読み込みechoしても結果は変わりません。

私、何か勘違いしてますか?
980967:02/06/01 16:47 ID:???
>>976
レスありがとうございます。
こうだと転けてくれるみたいです、こちら4.2.1です。

$str ="1\t2\t\t\t\t\t\n";
list($v['name'],$v['msg'],$v['ipaddr'],$v['icon'])
= explode("\t",trim($str));

Undefined offset: 3
Undefined offset: 2
981nobodyさん:02/06/01 18:56 ID:P630Haih
PHP 4.2.1
---e.html (EUC)
<html lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
</head>
<body>日本語の出力。</body>
</html>
---p.php
<?php
mb_http_output('SJIS');
ob_start('mb_output_handler');
//header('content-type: text/html; charset=shift_jis');
require './e.html';
?>
こうするとshift_jisになりますが、
headerのコメントをはずすと
私もEUC-JPになってしまいます。?。
982nobodyさん:02/06/01 20:43 ID:Q92m0630
あるディレクトリに連番のファイルが幾つか入っていて(000,001,002...)、
このファイルを新しい順に並べたいのと、一番最後のファイルを別に表示させたいんだけどどうすればいいの?
教えてください。
983967:02/06/01 21:07 ID:???
>>982
http://jp.php.net/manual/ja/function.readdir.php
でファイルリスト配列取って
http://jp.php.net/manual/ja/function.sort.php
でソートではダメだったの?
ソート方法はSORT_NUMERICで。
984nobodyさん:02/06/01 23:21 ID:???
>>981 少しやってみた、新しい順 ? 最後のファイル ?
<?php
$path = "./work";
$dir = @opendir($path)
or die("Cannot open directory $path");
while ($file = readdir($dir)) {
if (!ereg("(\.|\.\.)" , $file)) {
$files[$file] = filemtime($path . "/" . $file);
}
}
closedir($dir);
arsort($files);
foreach($files as $key => $value) {
echo $key . "<br>\n";
}
?>
985nobodyさん:02/06/02 00:16 ID:7VWf6zUb
超初心者です。

$sに、

test<>hoge

という文字列が入ってるんですが、

test()hoge

にするにはどうしたらいいですか?
986nobodyさん:02/06/02 00:58 ID:???
str_replace
987nobodyさん:02/06/02 01:17 ID:SBRh2Tol
p2cの意味がわからないので、いろいろ調べていると、
Pascal から C への変換プログラムとありました。
しかし、混乱しております。

あるphpとmysqlのスクリプトのソースを見ていたのですが、こんな感じでp2cが使われていました。

"select products_id, products_name, products_quantity, products_image,
products_price, products_date_added, products_status from products , products_to_categories p2c
where products_id = p2c.products_id and p2c.categories_id = '" . $current_category_id . "' order by products_name");

テーブル、カラムの名前にはp2cの文字は使われていません。

何故こんなところにp2cでしょうか?

988nobodyさん:02/06/02 02:00 ID:nwqefcRu
>>987
FROM句で products_to_categories p2c ってやってるでしょ。
products_to_categories を p2c というエイリアスで扱ってるんよ。
だから p2c.products_id は products_to_categories.products_id と同じになるんよ。
989987:02/06/02 02:30 ID:SBRh2Tol
>>988さん
ありがとうございます。ちょっと書いただけでわかるのですね。感激です。sqlファイルを今見ています。
エイリアスとはわからず、p2cばかり調べていました。
今、夜空の星にあなたの幸せを祈りました。

でも何故p2cとしたのでしょう?作者の気まぐれでしょうか。
それとも慣用句みたいによく使うのでしょうか。

990nobodyさん:02/06/02 03:26 ID:???
products_to_categories だから p2c なんだろ

products = p
to = 2
categories = c

自分が省略するときのことを考えてみろよ
991 :02/06/02 03:38 ID:???
992nobodyさん:02/06/02 10:01 ID:smXe05SQ
>>990さん
ありがとうございます。
感動しました。
言葉がでません。
星がでてないので、暗くなったら祈ります。
993nobodyさん:02/06/02 13:35 ID:S6tfVE27
板違いかもしれませんが、質問があるのです。
ウェブデザイナーって儲かるんですか?
進学に困ってるのです><
994979:02/06/02 14:43 ID:???
>>979
>>981
headerでcharsetを指定しないと希望の動作になりますね。
995979:02/06/02 14:51 ID:???
ごめん勘違い。
996981:02/06/02 14:56 ID:iCTCDCX0
>>984
説明不足でスマソ。書いてくれたの読んで大体わかったよ。

ディレクトリの中のファイルを番号が若い順に並べたいの。
更新時間はバラバラなので、ファイル名だけ配列に入れてrsortしようと思うんだけど、
readdirってちゃんとファイル名順に読み込んでいくの?

あと、ディレクトリの中のファイルで一番番号が若いファイル名を取得したいんだけど、
それも上のように一度配列に読み込まないとだめかな。
997教えて君:02/06/02 14:58 ID:Tbi7w50X
時差を調節したいのですが どこをいじればいいでしょうか?

($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time);
$year += 1900;
$month = $mon + 1;
@dayname = ('日','月','火','水','木','金','土');

このあたりが怪しいと思うのですが見当違いですか?
初心者でスンマセン
998979:02/06/02 14:59 ID:???
header()でcontent-typeを指定すると、mb_output_handlerが効かなくなる仕様のようです。

ini_set('default_mimetype', 'text/x-hdml');
で回避できました。お騒がせしました。
999nobodyさん:02/06/02 15:34 ID:???
1000埋め立て:02/06/02 16:19 ID:???
   (・∀・)ズザーー!三三三二二一一
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。