トップページ⇒php
1001コメント342KB

【PHP】下らねぇ質問はID出して書き込みやがれ 88

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2009/09/16(水) 09:39:37ID:???
質問者はまず>>1を良く読むこと(必須!)
過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。

◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 87
http://pc11.2ch.net/test/read.cgi/php/1251447028/

◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】

◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)

◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
 (荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)

◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。

【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0751nobodyさん2009/10/05(月) 10:00:19ID:OAxwPoQM
みなさんはclass名の付け方をどうしていますでしょうか?
よく見るのは、(システム名・略語)_(機能名)と言うのです。
例えば、Zend_Mailとか。

他には機能名だけ書く場合もありますが、毎回どういう名前にすれば
後々わかりやすいだろうかと悩みます。何か法則とかあるのでしょうか?
0752nobodyさん2009/10/05(月) 10:30:55ID:???
凝った名前を付けない。
愛称にしない。
スペル間違えない。
0753nobodyさん2009/10/05(月) 10:44:37ID:???
うちはCamalで書いてるな
0754nobodyさん2009/10/05(月) 10:45:26ID:???
>>753
s/Camal/Camel/
0755nobodyさん2009/10/05(月) 10:46:43ID:???
phpで書いて
0756nobodyさん2009/10/05(月) 11:46:32ID:X54Rskkj
>751
現場ごとにルールがあったりするよ。
なければあなたの言うようなのが一般的かと
07577492009/10/05(月) 12:56:00ID:KN+hGN3y
>>750
ありがとうございます。

string(17) "obj::offsetExists"
string(14) "obj::offsetGet"
という順番から推測しますと
offsetExists の var_dump(__METHOD__); が実行された「後」の if ($var == "foobar") で
offsetGet が呼ばれてfoobarからvalueに変更され、
最後はoffsetExistsがfalseを返すんですね。

すみません、それを踏まえてもう一つ質問です。
var_dump(empty($obj["foobaz"]));
にした場合、結果が
string(17) "obj::offsetExists"
bool(true)
になるんですけど、これがoffsetGetを呼ばない理由が分かりません。
しかも($var == "foobaz")じゃないのに、結果はtrueです。
分かりますでしょうか?
07587492009/10/05(月) 13:00:35ID:KN+hGN3y
すみません、訂正です:

($var == "foobaz")じゃないのに、結果はtrueです。
         ↓
実際は ($var == "foobaz") で
($var ≠ "foobar") なので
評価式は偽となってfalseが返されるだろうはずなのに結果はtrueです。
0759nobodyさん2009/10/05(月) 13:28:36ID:???
ごめん、盛大に間違ったので750無かったことにして ><
0760nobodyさん2009/10/05(月) 13:30:10ID:???
>>751
zendのコーディング規約とpearのコーディング規約を参考にしてる
0761nobodyさん2009/10/05(月) 14:54:27ID:???
台風来てるで
0762nobodyさん2009/10/05(月) 15:43:53ID:???
>>751
俺はJava風につけてる
FileNotFoundExceptionみたいに
単語別に先頭に大文字をつける感じで
0763nobodyさん2009/10/05(月) 16:31:42ID:???
>>757
empty($obj["foobaz"]);
ってのは
!$obj->offsetExists('foobaz') || !(bool)$obj->offsetGet('foobaz')
と等価
0764749,750,7572009/10/05(月) 18:40:09ID:KN+hGN3y
>>759
いえいえ、でも、為になりました。

>>763
なるほど、この炉利ORは短絡評価が適用されるので
!$obj->offsetExists('foobaz') が true であれば
!(bool)$obj->offsetGet('foobaz') の評価がなんであろうが
全体の評価は true になるんですね。

では、前回の問題に戻りますが、
var_dump(empty($obj["foobar"]));
の結果が
string(17) "obj::offsetExists"
string(14) "obj::offsetGet"
bool(false)
になるというのは、まず、!$obj->offsetExists('foobar') が false になるので
短絡評価にならずに !(bool)$obj->offsetGet('foobar') の評価が必要となるんですね。

!(bool)$obj->offsetGet('foobar') は (bool) に型変換されてますが
""以外の文字列はすべて true と評価されるので
ここの返り値 'value' も true と評価されるんですね。
それが ! で反転して false ということですね。
false || false = false
ということで bool(false) ですね。
ありがとうございました!
0765nobodyさん2009/10/05(月) 18:49:30ID:qMw9OmRL
phpの関数の内部で、どのような事が行なわれているか知りたいのですが、
どのような手順で見れば、ソースが分かるでしょうか?

例えば、substringの関数のソースを見るための手順を教えて頂けないでしょうか?
宜しくお願いします。
0766nobodyさん2009/10/05(月) 18:50:44ID:qMw9OmRL
すみません、substringではなくsubstrでした。
失礼しました。宜しくお願いします。
0767nobodyさん2009/10/05(月) 18:51:11ID:yHTqrIVV
PHPで、HTTPヘッダーを送信するときに実行されるフック関数みたいなのありますか。
HTTPヘッダーを送信するタイミングで、手動でクッキーを設定したいと思い、質問しました。
0768nobodyさん2009/10/05(月) 18:55:19ID:???
>>767
hook 系の処理はない。出力内容は、PHP側で、echo された
文字列やheader関数、cookie 系の関数または、session 系
の関数などの結果を常にバッファしており、必要なときに、
PHP側で出力順序を判断してから送信される。

ヘッダ出力直前に処理を行いたいのであれば、処理の最後に
関連の処理を記述することだと思う。
0769nobodyさん2009/10/05(月) 19:41:05ID:???
>>768
ガーン。残念。

> ヘッダ出力直前に処理を行いたいのであれば、処理の最後に
> 関連の処理を記述することだと思う。

これって難しくないですか?
MVCがきれいに分離できていて、フロントコントローラパターンをちゃんと使っていれば、簡単にできるんでしょうけど。
PHP4の時代から残っているようなごちゃごちゃしたソースだと、難しいです。
0770nobodyさん2009/10/05(月) 19:43:25ID:???
出力バッファ制御すりゃいいじゃん
0771nobodyさん2009/10/05(月) 22:59:39ID:???
<?php
ob_start();
require("unko.php");
header("Set-Cookie云々");
ob_end_flush();
0772nobodyさん2009/10/05(月) 23:14:52ID:cxXnIhTs
【OS名】Windows NT
【PHPのバージョン】PHP Version 5.2.9
【連携ソフトウェア】
【質問内容】
blogの背景画像をランダムに表示させたく思い、phpを勉強しています。
とりあえず画像を表示させてみようと、以下の文を書きました。
<?php
$imgpath="img/common/header.jpg";

readfile($imgpath);
?>
これで画像は表示されたのですが
header('Content-Type: image/jpeg');などの表記もしたほうがいいのでしょうか?
0773nobodyさん2009/10/05(月) 23:31:32ID:IP5avodC
htmlに埋め込むなら不要
画像だけを出力するならあったほうがよい
0774nobodyさん2009/10/05(月) 23:38:29ID:cxXnIhTs
>>773
なるほど、ありがとうございます
0775nobodyさん2009/10/06(火) 00:09:14ID:???
HTMLに埋め込むってdataスキームのこと?
どっちにしてもContent-Typeは必ず要るぞ
07767722009/10/06(火) 00:33:26ID:xjSaXbC3
>>775
ありがとうございます
header('Content-Type: image/jpeg');の挿入位置ですが、readfile()の直前で問題ないでしょうか?

<?php
$headimgdir='img/header/';
$dn=opendir($headimgdir);
while($file=readdir($dn)){if($file!='.' && $file!='..'){$files[]=$file;
// echo "ファイル名:$file<br>";}}
closedir($dn);
$imgnum= array_rand($files);
$imgpath=$files[$imgnum];

header('Content-Type: image/jpeg');
readfile($headimgdir.'/'.$imgpath);
?>
0777nobodyさん2009/10/06(火) 00:33:28ID:AOFtA4fU
$s = '{$hogehoge}';

ってのがあって、それを再評価するってのはどうやるんだっけ?
eval以外にやり方ありましたっけ?
0778nobodyさん2009/10/06(火) 00:36:55ID:???
>>776
それで大丈夫
標準出力へ最初に出力されるときにヘッダも書き出される
07797722009/10/06(火) 00:56:55ID:xjSaXbC3
>>778
ありがとうございます、助かりました。
0780nobodyさん2009/10/06(火) 02:21:00ID:BEe+JBrP
Pearのpagerを使っていますが、動作が気に食わないので自前で別の手段を作ろうと思っています。
そこで相談です。
Pagerって、最初に対象の検索結果rowを全部取得して、その行数を指定した一ページ当たりのアイテム数で割って
リンク部分を出力し、以降のページでは最初にとった全アイテムの連想配列を元にリストをつくったりしてるんだと思いますが、
最初に全部取得するのが気に入らないです。なので、

1)ページリンクを作るために全体の件数は欲しい
2)でも、全部の行を取得するなんて無駄はしたくない、最低限のrowの実データだけ取得したい
  各ページでそれぞれ必要なアイテムをその都度取得したい
  1ページ10アイテムでpageId=2なら where itemId>$pageId*10 and itemId<$pageId*10+10 みたいな…

という要望を満たそうと思ったら、アイテムの実データを用意したテーブルとは別に、数だけをカウントするテーブルを
別に作らないといけないんでしょうか?
それだと単純にデータベースの話になっていまいますが、PHPのプログラム的に解決する方法はありますか?
それとも、こんな試み自体、意味ないでしょうか? 全部のデータを取得するなんて負荷になりそうだなぁという考えからですが。。

環境はPHP5.2.8 MySql5です
0781nobodyさん2009/10/06(火) 02:48:02ID:???
え?select count(*)でいいのでは
0782nobodyさん2009/10/06(火) 03:00:16ID:BEe+JBrP
おお! お返事ありがとうございます。
それってmysql関数って言うんでしょうか? 全くそっち系はわからないので。。
なるほどー 確かにそれを使えば簡単ですね! ありがとうございました
0783nobodyさん2009/10/06(火) 08:52:12ID:ldSI1eNe
>>775
ブラウザで解釈できるからgif,jpgはなくてもおk
ただ書いておいたほうがまし
0784nobodyさん2009/10/06(火) 09:45:06ID:???
>>780
PEAR::Pagerつかってるけど、全件取得しないよ。
全件数を取得するのにselect count(*)はするけど
個々のレコードはlimit使ってページ毎にそのページに表示する分しか取得しない
0785nobodyさん2009/10/06(火) 10:25:01ID:kghRGofU
imageconvolutionでのシャープ化についての質問です
使い方が分からずググったら、こういう感じで設定すれば良いとあり
   $matrix = array(array(-1, -1, -1), array(-1, 16, -1), array(-1, -1, -1));
   imageconvolution($img, $matrix, 8, 0);
実際シャープはかかったのですが、もう少し弱くかけたいのです

それで値を変更してみると真っ黒になってしまいます
どのように調整すればよいのでしょうか?
0786nobodyさん2009/10/06(火) 10:57:44ID:???
>>783
ましとかokじゃねぇよ、Content-Typeを勝手に推測してしまうのはIEだけだ
RFC2616読め
0787nobodyさん2009/10/06(火) 12:12:24ID:BEe+JBrP
>>784
あ、そうなんですか?
ありがとうございます、解決しましたw
0788nobodyさん2009/10/06(火) 12:22:42ID:???
>>787
ごめん冗談
0789nobodyさん2009/10/06(火) 12:59:03ID:???
>>786
顔真っ赤にしてないでOpera、Fx、Chrome、safari、IEで開いてみろよ
0790nobodyさん2009/10/06(火) 13:31:23ID:FPrhzfOJ
独学なphp初心者です。
<table>
<?php
foreach($_POST as $key=>$var) {
  echo "<tr><td>".$key."</td><td>".$var."</td></tr>\n";
}
?>
</table>
のようにフォームから受け取ったnameとvalueの一覧を表示させるのはできるのですが、
それを下記のようにmysqlに挿入するのに良い方法はないでしょうか?
$sql="INSERT INTO `database`.`table` (`name1`, `name2`,…`, `namen`) VALUES ('value1', value2',…, 'valuen');";
$result = mysql_query($sql, $con) or die("クエリの送信に失敗しました。<br />SQL:".$sql);
いちいち$a=$_POST["name1"];$b=$_POST["name2"];って書いてVALUES ('$a', $b',…を手書き入力してましたが
もっとスマートな方法ないかな…と
0791nobodyさん2009/10/06(火) 13:46:57ID:???
array_mapで処理を作って反復しりゃいいじゃん
07927862009/10/06(火) 13:57:30ID:???
>>789
人にテストやらせんじゃねぇよ、死ね!
と思ったら俺の間違いじゃねぇか!
済みませんでした
省略したらapplication/octet-streamで扱うんじゃねぇの…

>>786訂正
header('Content-Type: ...') を指定しないと default_mimetype (デフォでtext/html) が
送信されるからContent-Typeを無視するIE以外で表示できません
0793nobodyさん2009/10/06(火) 14:16:53ID:FPrhzfOJ
>>791
こんな便利なものが…
ありがとうございますorz
0794nobodyさん2009/10/06(火) 17:33:25ID:BEe+JBrP
以下のような形でプリペアドステートメント的なクエリ文を書こうと思ってるんですが(イメージです)、

$this->_db->fetchAll("
SELECT * FROM `hogeTBL`
WHERE
`hoge1`=?
AND
`hoge2` like %?%
AND
`hoge3`=?
",
array($hoge1,$hoge2,$hoge3)
);

hoge1,hoge2,hoge3の全てが「あってもなくても良い」条件の場合、どう書けば良いんでしょうか?
条件の変数があるかないかで全パターン書き分けしてたらかなり面倒で、上で動くと思ったんですが動かないし
どうして良いのかわからなくて質問しました。
よろしくお願いします
0795nobodyさん2009/10/06(火) 17:41:15ID:???
使っているライブラリが違うけど、俺だったら・・・

$sql = <<<EOS
   select * from xxxx where 1
EOS;

if($name){
   $sql .= "and name like '%%%s%%'";
   sprintf($sql,mysql_real_escape_string($name));
}

if($age){
   $sql .= "and age = %d ";
   sprintf($sql,mysql_real_escape_string($age));
}

とか書くかも
0796nobodyさん2009/10/06(火) 17:59:44ID:BEe+JBrP
>>795
なるほど、ありがとうございます
「%%%s%%」と、%がたくさんあるのはなんなんでしょうか?
0797nobodyさん2009/10/06(火) 18:34:38ID:???
sprintfのマニュアルのフォーマット文字列んとこ読みなはれ。
0798nobodyさん2009/10/06(火) 18:36:11ID:BEe+JBrP
>>797
どうもです、ありがとう
0799nobodyさん2009/10/06(火) 18:40:11ID:y7QUP1JZ
ajax(PHP4.0+javascript)についての質問です

ajaxでは、
XMLHttpRequestを用いて「必要なデータをxml文書として返すphpプログラム」をコールしましが、
このphpプログラム内でauthによる認証を行う事は可能でしょうか。
以下のような動作にしたいと思っています。

1.特定の条件で(例えばボタンを押す等)javascriptプログラムが実行
XMLHttpRequestによる通信開始、指定のphpプログラムが実行。
↓
2.phpプログラム内でauth認証開始、

認証成功の場合⇒データベースに書き込み、

認証失敗の場合⇒書き込みは行わない。


3.phpプログラムは認証結果をxmlとして出力
ブラウザは認証結果に応じて動作を変える


こんな感じでふ。
これが可能なのか、可能でないのかわからずにいます。
苦労との皆様、宜しくお願いいたします。
0800nobodyさん2009/10/06(火) 21:25:37ID:???
HTTPの仕組みというかWebアプリの動作を理解すれば何ができて何ができないか、
は判断できるだろうしできないのはどうかと思う。
0801nobodyさん2009/10/06(火) 21:39:17ID:???
能書きはいいから、さっさと教えろよ
08027992009/10/06(火) 21:52:47ID:62gXteWj
>>800さん

authを利用できるかどうかという事は
XMLHttpRequestによって実行されたphpプログラムが
クライアントのクッキーを参照できるか??という事のような気はするのですが・・
(間違っていたらすみません)
これが実際どうなのか、何を調べたらよいのか、
できたとしても環境によって動作が大きく変わってしまうのか、
分からない状況になっています。
後学の為に詳しく教えていただけたらうれしいです。

とりあえずHTTPについて復習してキマシ(*`・ω・)ゞ

0803nobodyさん2009/10/06(火) 22:07:14ID:???
流し読みだけど、jsが走ってphpをリクエスト→リクエストされたphpの中で認証処理
→結果をレスポンスとして返す、というだけの処理なら、普通に考えてできるんじゃないの?

もちろん、リクエストする時にCookieなりクエリなりPOSTなりで認証情報を渡す必要
はあるだろうけど。むしろ何故不可能だと思うんだろう
08047992009/10/06(火) 22:31:43ID:???
>>803さん

ありがとうございます。
更にauthで既に認証済みのユーザがあえて、POST等でIDとパスを渡すことなくとも、
XMLHttpRequestによって実行されたphpプログラムでセッション情報を元に認証する事ができるか 
というと、どうでしょうか。。

やはりphpプログラムがクライアントのクッキーを参照できるか??という事になると思うんですが、、、
0805nobodyさん2009/10/06(火) 22:33:14ID:???
>>804
cookie参照できるから平気
08067992009/10/06(火) 22:37:04ID:???
ブラウザからphpプログラムを呼んだ場合、
⇒phpプログラムはブラウザが保存していたクッキーを使用する事ができる。

という認識なんですが、
XMLHttpRequestによってphpプログラムを実行した場合、
⇒XMLHttpRequestを実行したブラウザのクッキーをphpプログラムは使用する事ができるのか??

これが分からないのが問題なのかもしれません。
ぐるぐるしてすみません。
0807nobodyさん2009/10/06(火) 22:43:39ID:???
>>806
まぁここはくだ質だから嫌味な奴は気にするな
BASIC認証は感じ

<?php
if (!isset($_SERVER['PHP_AUTH_USER'])
|| $_SERVER['PHP_AUTH_USER'] != 'namae'
|| $_SERVER['PHP_AUTH_USER'] != 'himitsu')
{
  header('HTTP/1.0 401 Unauthorized');
  header('WWW-Authenticate: Basic realm="sample"');
  exit;
}
header('Content-Type: text/plain');
echo 'ok';
?>

これを
var request = new XMLHttpRequest();
request.open("GET", "a.php", false, 'HOGE', 'FUGA');
request.send(null);
alert(request.status);
で試してみるといい

あとはこっちを見る
http://jp.php.net/manual/ja/features.http-auth.php
0808nobodyさん2009/10/06(火) 22:43:42ID:???
>806
ためしもせずガタガタ抜かすな。
LiveHTTPHeaderかFirebugでも入れて、Ajax通信の中身を実際に覗けや。
www.example.comへのリクエストであれば、ブラウザのアドレスバーからだろうがリンクからだろうが<img src=>だろうがAjaxだろうがクッキーは送信される。
0809nobodyさん2009/10/06(火) 22:49:41ID:???
なんつーかphpを実行する、てところに捕らわれすぎてるように思う。
何でも良いけど、実際にどんなHTTPリクエストが飛んでレスポンスが
返ってくるのか一度見てみた方が多分勉強になるし、HTTPの知識無しで
ajaxはちょっと心許ないと思う
08107992009/10/06(火) 23:08:09ID:???
>>808さん >>809さん

ありがとうございます。
なんだかふわふわして、自分が何でわかんないのかもわかんない違和感、
その原因がHTTPなんだと気づかせてもらいました。HTTPリクエスト、レスポンスを
目で見てみたいと思います。

>>807さん

ソースまで提供していただいて、もう涙出ます。
ためさせていただきます!勉強させていただきます!
ありがとうございます!

皆さんありがとうございました!
0811nobodyさん2009/10/06(火) 23:18:46ID:RPLcbD5P
includeやrequireのように取り込まずに別ファイルとしてphpファイルを実行するには
どうしたらよいでしょうか?イメージ的にはExecuteのような感じです。
0812nobodyさん2009/10/06(火) 23:27:12ID:???
>>810
ごめん嘘書いてた、ifの条件式を置き換えてくれ
|| $_SERVER['PHP_AUTH_USER'] != 'namae'
|| $_SERVER['PHP_AUTH_PW'] != 'himitsu')
0813nobodyさん2009/10/06(火) 23:28:20ID:???
>>811
無理
0814nobodyさん2009/10/06(火) 23:31:14ID:???
>>811
system("/usr/bin/php xxx.php") とか、  file_get_contents("http://example.com/xxx.php")とか。
どういうことをやりたいの?
08158112009/10/06(火) 23:36:14ID:???
a.phpが読み込まれたときにinc.phpを実行させたいです。

inc.phpは他のファイルからも実行させたいのですが、呼び出し元の変数に
万が一影響しても困るので、includeやrequireは避けたかったのです。

>>814さんのsystem("")でできました。ありがとうございますー
0816nobodyさん2009/10/07(水) 17:41:32ID:UWu9xUOc
<?php

if(($_POST["mati"]==1))$count++;
else if(($_POST["mati"]==0))$count--;

if(($_POST["eiga"]==1))$count++;
else (($_POST["eiga"]==0))$count--;

if(($_POST["ame"]==1))$count++;
else if(($_POST["ame"]==0))$count--;


if (count==3) <META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=kikubari.html">;
else if (count==2) <META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=roman.html">;
else if (count==1) <META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=roman.html">;
else if (count==0) <META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=kensin.html">;
else if (count==-1) <META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=kensin.html">;
else if (count==-2) <META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=zibun.html">;
else if (count==-3) <META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=zibun.html">;


?>

これでリンク先を振り分けられないんだがどうしてか教えて欲しい
何回やっても一番したのリンクへしか飛ばないんだ・・・
0817nobodyさん2009/10/07(水) 17:47:39ID:???
マルチかよ
0818nobodyさん2009/10/07(水) 17:52:07ID:UWu9xUOc
>>817
必死なんだ
0819nobodyさん2009/10/07(水) 18:03:28ID:???
PHPを用いたダウンロードカウンター「X-File Access Counter」
ttp://works.xworks.org/script/01php/xfile-access-counter/

これの非公開バージョンb090909
http://kissho.xii.jp/1/src/1jyou93396.zip.html

・DBにSQLiteを用いているのが特徴。
・ベータ版のため、簡単に使える状態では無い。

誰か、使用方法、教えて下さい・・・。
0820nobodyさん2009/10/07(水) 18:20:43ID:???
>>819
気になってたんです、それ。
頂きました、ありがとう!
0821nobodyさん2009/10/07(水) 18:23:03ID:???
>>819
まず解凍します
0822nobodyさん2009/10/07(水) 18:29:19ID:???
>>819
次にreadme.txtを読みます
0823nobodyさん2009/10/07(水) 20:45:45ID:???
次に靴下を穿きます
0824nobodyさん2009/10/07(水) 20:46:21ID:???
次に出かけます
0825nobodyさん2009/10/07(水) 20:49:58ID:???
次に書店に入ります
0826nobodyさん2009/10/07(水) 21:03:59ID:???
>>816

それ、そもそもパースエラーが出る。

実際に動かしてるものをコピペしないと、
転載するときに間違ったのかソースが間違ってるのか分からないよー。
0827nobodyさん2009/10/07(水) 21:06:33ID:???
そのままコピペで貼り付けてる
動くには動くんだがどんなふうにやっても必ず一番下のリンクへ飛ぶんだ
0828nobodyさん2009/10/07(水) 21:07:00ID:???
といいつつ、$_POST値が来てないんじゃないかと推測してみたり。

先頭で
var_dump( $_POST ) ;
0829nobodyさん2009/10/07(水) 21:08:49ID:???
>>828
なんもならね。。。
0830nobodyさん2009/10/07(水) 21:11:05ID:???
>>829
コードを保守する前にまずスレのルールを守りましょう
0831nobodyさん2009/10/07(水) 21:12:26ID:???
自分の知っているphpだと、変数の頭は$で略せなかったと思うんだけど
いつから条件式中で略せるようになったの?
0832nobodyさん2009/10/07(水) 21:12:33ID:???
>>827

え?それで動く??

if (count==3) <META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=kikubari.html">;

count は$countだろうし
HTML部分は echoなり、php抜けるなりしないとダメだと思うんだけどなー。


ロジックがおかしくて動かないんじゃなくて
そもそも、まったく動いてないんじゃ?
0833nobodyさん2009/10/07(水) 21:13:21ID:???
。ヨヌー、ホ、ソ、皈ウ・�チテ・ア、・6クトヌ网、ケ?、?タ、ア、ノ、筅ヲ3クトソゥ、ル、ニ、キ、゙、テ、ソ。ラ
、ネ、、、ヲス?ュケ?、゚、ャネッテシ、ネ、ハ、遙「ツ賈?ワカ盻?、ヒ、マ・ウ・�チテ・ア、ャ、ト、ュ、筅ホ、ネ
、ハ、テ、ソ。」2、チ、网?ヘ、・?ヒ。ヨ・ウ・�チア。ラ、ネ、篆?ォ、・・」
、ウ、ホネト、ネ、マ、「、゙、・リキク、ハ、ッ。「・ヒ・蝪シ・ケ
0834nobodyさん2009/10/07(水) 21:14:34ID:???
すまん さっき改変してた
<?php

if(($_POST["mati"]==1))$count++;
else if(($_POST["mati"]==0))$count--;

if(($_POST["eiga"]==1))$count++;
else if(($_POST["eiga"]==0))$count--;

if(($_POST["ame"]==1))$count++;
else if(($_POST["ame"]==0))$count--;


if ($count==3) print'<META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=kikubari.html">';
else if ($count==2) print'<META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=roman.html">';
else if ($count==1) print'<META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=roman.html">';
else if ($count==0) print'<META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=kensin.html">';
else if ($count==-1) print'<META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=kensin.html">';
else if ($count==-2) print'<META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=zibun.html">';
else if ($count==-3) print'<META HTTP-EQUIV="REFRESH" CONTENT = "5; URL=zibun.html">';


?>
0835nobodyさん2009/10/07(水) 21:16:54ID:???
たぶん勘違いだと思うんで、パースエラー部分は無視するとして。

最初にそのページを読み込むときは、絶対一番下の処理になるけど。
0836nobodyさん2009/10/07(水) 21:20:35ID:???
mjky
これなんとかしてページを振り分ける方法ない?
0837nobodyさん2009/10/07(水) 21:29:08ID:???
if($_POST['submit']!=NULL){}
0838nobodyさん2009/10/07(水) 21:30:12ID:???
>>837
解説を・・・
0839nobodyさん2009/10/07(水) 21:31:38ID:???
>>834 ほら。タブは全角スペース2つに置き換えてあるから注意な
if(isset($_POST["mati"],$_POST["eiga"],$_POST["ame"])){
  $count = 0;
  function count_post($str){
    if($str == "1"){
      return 1;
    }else if($str == "0"){
      return -1;
    }else{
      return 0;
    }
  }
  $count = (count_post($_POST["mati"]) + count_post($_POST["eiga"]) + count_post($_POST["ame"]));
  header('Status: 301 Moved Permanently');
  switch($count){
    case 3:
      header('Location: kikubari.html');
    break;
    case 2: case 1:
      header('Location: roman.html');
    break;
    case 0: case -1:
      header('Location: kensin.html');
    break;
    case -2: case -3:
      header('Location: zibun.html');
    break;
  }
}else{
  echo "必要なパラメータがPOSTされてない";
}
0840nobodyさん2009/10/07(水) 21:39:03ID:???
>>839
なぜ飛ばないんだ・・・
URLへ飛んでくれない・・・
0841nobodyさん2009/10/07(水) 21:40:37ID:???
とりあえずスレタイと>>1嫁
0842nobodyさん2009/10/07(水) 22:44:35ID:IEM8qI68
headerなのに絶対パスで書かないし
0843nobodyさん2009/10/07(水) 22:53:13ID:???
>>842
相対パスも可
headerがどうとかは関係ない
ttp://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html
0844nobodyさん2009/10/07(水) 23:02:39ID:???
どこに相対パスも可って書いてあるの?
0845nobodyさん2009/10/07(水) 23:09:40ID:???
相対パスでも一応動くし、やる人もいるだろうねぇ。
俺はしないけど。
0846nobodyさん2009/10/07(水) 23:10:39ID:???
14.30 Location
The Location response-header field is used to redirect the recipient to a location other than the
Request-URI for completion of the request or identification of a new resource. For 201 (Created)
responses, the Location is that of the new resource which was created by the request. For 3xx
responses, the location SHOULD indicate the server's preferred URI for automatic redirection to
the resource. The field value consists of a single absolute URI.

   Location = "Location" ":" absoluteURI
An example is:

   Location: http://www.w3.org/pub/WWW/People.html
   Note: The Content-Location header field (section 14.14) differs
   from Location in that the Content-Location identifies the original
   location of the entity enclosed in the request. It is therefore
   possible for a response to contain header fields for both Location
   and Content-Location. Also see section 13.10 for cache
   requirements of some methods.
0847nobodyさん2009/10/07(水) 23:49:54ID:???
>>843
英語も読めない無知は黙ってろよ
絶対パスで書け
0848nobodyさん2009/10/08(木) 00:39:37ID:???
>>839-840
    case -2: case -3:
      header('Location: zibun.html');
    break;
↓↓↓
    case -2: case -3:
      header('Location: zibun.html');
    break;
    default:
      header('Location: countgaokashii.html?count='.$count);
    break;
0849nobodyさん2009/10/08(木) 09:11:12ID:???
>>819
UPありがとう。
とりあえず、こんな流れで動きましたよ。

1行目が<?xmlで始まるPHP(複数個)
<?をPHPと認識して処理されてしまうのが問題なので、
<?php echo '<?xml version="1.0" encoding="utf-8"?>'; ?> に書き換える。

PHP5環境の場合、ファイルの初回ダウンロード時に
db.inc.phpの「if($date != date('Ymd', $lastact))」部分でエラーが出るので、
前に、if($lastact == ""){$lastact = 0;}; を挿入。

ツールを使ってSQLiteのDBを作成し、db.inc.php内記載のSQL文3つ
「CREATE TABLE BASE、CREATE TABLE RECENT、CREATE TABLE NOTE」を使って、
テーブルを作成。

filesフォルダにダウンロードさせたいファイルを入れる。

あとはアップロードして、/xfm/ファイル名 にアクセスすれば、
ダウンロードページが表示されます。


軽く触ってみて思ったこと。

config.inc.phpで、「ログ管理モード」の記載があるが、
どうやって「ログ管理モード」に入るのか不明。

集計結果の表示にパスワード認証をかける設定にしても、
パスワードを聞いてこず、集計結果が表示される。
0850nobodyさん2009/10/08(木) 09:17:54ID:???
>db.inc.phpの「if($date != date('Ymd', $lastact))」部分でエラーが出るので、
noticeじゃなくて?
■ このスレッドは過去ログ倉庫に格納されています