【PHP】下らねぇ質問はここに書き込みやがれ 34
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2006/12/08(金) 04:22:54ID:???まず読め→【PHP マニュアル】http://www.php.net/manual/ja/
PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 33
http://pc8.2ch.net/test/read.cgi/php/1164209222/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ http://pc8.2ch.net/php/subback.html
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで http://pc8.2ch.net/db/subback.html
・速さについては自分でベンチをとってここに書け(違う環境の人も調べてくれるかも)
しかし初心者が目的も定めずに速度を気にしたところでほとんど意味は無いぞ
0138nobodyさん
2006/12/09(土) 12:26:13ID:FhkAh91m掲示板の管理画面を作ろうとしています。
1ページ20件ずつ表示する掲示板で
20件を超えると<a>リンクで2ページ目が出現する仕組みです。
管理者がログインしている状態でこの掲示板を開くと
各書き込みに対し編集ボタンが表示されるようにしたいのですが
2ページ目に<a>リンクで飛ぶと、当然POSTでパスワードを
受け渡すことができず、こまってしまいました。
こういうのってどうやって実装するものなのでしょうか。
もしスレ違いでしたら誘導よろしくお願いします
0139nobodyさん
2006/12/09(土) 12:34:39ID:???認証したらセッションを開始して管理者であることを
示すキーかなんかを放り込んでおけばいいのでは?
各画面ではセッション変数を読み出し、管理者なら編集用の
リンクを張るなどする。
0141nobodyさん
2006/12/09(土) 12:43:19ID:???>当然POSTでパスワードを受け渡す
当然そういう危ないことは止めていただきたい。
>>139の言うとおり、セッションで管理者ログインフラグとか立てる。
0142nobodyさん
2006/12/09(土) 12:43:53ID:???レスありがとうございます
セッション管理について無知でした
調べてみたら、まさにこれだ!って感じです。
かゆいところに手が届きました
感謝です
0144nobodyさん
2006/12/09(土) 12:49:46ID:???SJISの文字列AとEUC-JPの文字列BをブラウザへGET送信した際、
B側を echo すると
表示させるphp側で
<META http-equiv="Content-Type" content="text/html; charset=EUC-JP">
と指定しているにもかかわらず、文字列BのみがSJISで表示されます。
(このため文字化けします、ブラウザの文字コードを再度EUC-JPに指定してやれば、
文字化けが解けます)
文字列AをEUC-JPにしたら、文字化けせずに正常にEUC-JPで表示されます。
おそらく、GETで受け取る際に文字コードを判定、
その後、その文字コードで表示、みたいなことを
PHPのmbstring側が勝手にやってるような感じですが、
php.ini を弄る以外で何か解決方法はないでしょうか?
ちなみに mb_http_out("EUC-JP") をしても変わりませんでした。
お願いします。
0145nobodyさん
2006/12/09(土) 12:52:22ID:???とりあえずmb_*関係の設定をすべてさらすこと。
次に表示するソースの文字コードを確認。
こっちはエスパーじゃないんだから。
0146nobodyさん
2006/12/09(土) 13:04:57ID:???Directive Local Value Master Value
mbstring.detect_order auto auto
mbstring.encoding_translation On On
mbstring.func_overload 0 0
mbstring.http_input auto auto
mbstring.http_output SJIS SJIS
mbstring.internal_encoding EUC-JP EUC-JP
mbstring.language Japanese Japanese
mbstring.substitute_character no value no value
となっています。
ソースの文字コードはEUC-JPです。
この問題以外は文字化けは発生してません。
文字化けが発生するのも文字列Bのみです。
宜しくお願いします
0147nobodyさん
2006/12/09(土) 13:16:10ID:???0150146
2006/12/09(土) 13:21:47ID:???それではよろしくお願いいたします。
0153146
2006/12/09(土) 13:40:26ID:???>文字列AをEUC-JPにしたら、文字化けせずに正常にEUC-JPで表示されます。
という部分の理由は分かるでしょうか?
また、mb_http_out("EUC-JP") をしても駄目なのはなぜでしょうか。
0154nobodyさん
2006/12/09(土) 13:42:32ID:???でコンテンツが見つからなかったときに
エラーを吐かせず$string_contentsに別の数値を入れるにはどうすればいいですか
0156146
2006/12/09(土) 13:44:08ID:9A0i8Wu20157146
2006/12/09(土) 13:59:24ID:gM+cEjaMたいへん恐縮ですがはやく教えていただければと思います。
こちらも暇ではないので。
0158nobodyさん
2006/12/09(土) 14:02:42ID:???0159nobodyさん
2006/12/09(土) 14:07:38ID:???ローカルルールも意味無くあるわけじゃないんだよ。
文字列をEUCに変換して出力するならそのままEUCで出力される。
何もしなければお舞さんが設定したとおりSJISに変換してEUCの
HTMLに出力する。
これがAとBの違いだろ。
0160146
2006/12/09(土) 14:09:51ID:gM+cEjaM0161146
2006/12/09(土) 14:25:55ID:9A0i8Wu2> 何もしなければお舞さんが設定したとおりSJISに変換してEUCの
> HTMLに出力する。
> これがAとBの違いだろ。
文字コード自体は文字列BもEUCなのです、
SJISになってるわけではないです、あくまでブラウザ出力の
文字列B部分がSJISになっているだけであって。
だから
>(このため文字化けします、ブラウザの文字コードを再度EUC-JPに指定してやれば、
文字化けが解けます)
となります。
0162nobodyさん
2006/12/09(土) 14:28:55ID:???159も根本的に勘違いしてるし
0165146
2006/12/09(土) 14:35:30ID:gM+cEjaM0166nobodyさん
2006/12/09(土) 14:42:07ID:???送信されてきた文字列がSJISかEUC-JPかはどうやって
判断したの?
mb_detect_encodingで調べてみた?
0167nobodyさん
2006/12/09(土) 14:44:52ID:???なんか2人146がいるし、めんどくさいから相手にすんな。
0168nobodyさん
2006/12/09(土) 14:54:54ID:???ID:9A0i8Wu2が本物であると予想して相手してみる。
とりあえず再現するコードを書いて(特にform部分と、文字コード関連の操作)。
そうすれば、内容が明確になるだろうし、回答も得られるはず(>>146の設定内容は了解した)。
少なくとも、文字列Aと文字列Bというのが、どういう操作の対象なのかがわからん。
同時に送信しているのか、別の送信の仕方をしているのか。ブラウザの通常の使用で再現されるものなのか。
まーとにかく、再現するコードを書いてくれ。
言葉だけで説明されると、曖昧さが出てくる。
>>154
$string_contents = @ file_get_contents("ファイル名") or $string_contents = デフォルト値;
0170146
2006/12/09(土) 15:29:44ID:9A0i8Wu2はい、mb_detect_encoding で調べてます。
>>168
$vara = "シフト";
$vara = mb_convert_encoding($vara, "SJIS", mb_detect_encoding($vara));
$vara = urlencode($vara);
$varb = "イーユーシー";
$varb = mb_convert_encoding($varb, "EUC", mb_detect_encoding($varb));
$varb = urlencode($varb);
header("Location: index.php?vara=".$vara."&varb=".$varb);
して、
index.php(文字コードEUC、HTML出力EUC) 側で
echo mb_detect_encoding($_GET['varb']);
echo $_GET['varb'];
です。
EUC と表示され、$varb 自体は文字化けします。
0171nobodyさん
2006/12/09(土) 15:40:14ID:???そのindex.phpで、
mb_http_output("EUC-JP");
header("Content-type: text/html; charset=EUC-JP");
<meta http-equiv="content-type" content="text/html; charset=EUC-JP" />
echo $_GET['varb'];
を全部やっても化ける?
0172146
2006/12/09(土) 15:45:08ID:9A0i8Wu2化けますね・・・
0173nobodyさん
2006/12/09(土) 16:06:09ID:???どのようにすればよいのでしょうか?
0174173
2006/12/09(土) 16:08:40ID:???$strがA〜Z、a〜z、1〜9と-_の組み合わせでできているとTRUEを返したいのです。
($str = 'abc123'; =TRUE)
($str = 'abc1$3'; =FALSE)
0175nobodyさん
2006/12/09(土) 16:13:20ID:???ブラウザに何使ってる?
デフォルトの文字コードを自動判別になってなくて、
ヘッダーの指定を無視するなんてオチだったりして。
0176nobodyさん
2006/12/09(土) 16:18:36ID:???0177173
2006/12/09(土) 16:21:46ID:???有難うございます
if(!ereg("[0-9a-zA-Z]",$str)){
//エラー処理
}
ここまでは分かったのですが、「-」と「_」はどのようにすればよいのでしょうか・・・?
0178nobodyさん
2006/12/09(土) 16:24:43ID:???>mbstring.encoding_translation On
原因はこれだわな。varaがsjisだから、クエリストリング全体にsjis→eucの変換がかかってる。
だからeucでエンコードされてるvarbがおかしくなる。
php.iniがいじれない状況なら、クエリストリングの先頭に常にeucとして解釈される短い文字列でも埋め込んでおけば?
0180179
2006/12/09(土) 16:30:29ID:???0181173
2006/12/09(土) 16:33:03ID:???有難うございます。
その方法で解決できました。
差し支えなければ、eregとpreg_matchについての違いなど教えていただけないでしょうか。
本には同じ説明文で記載されていたので・・・
0182nobodyさん
2006/12/09(土) 16:36:07ID:???http://www.php.net/manual/ja/ref.pcre.php
http://www.php.net/manual/ja/ref.regex.php
0183nobodyさん
2006/12/09(土) 16:47:14ID:???$db = 'database';
mysql_db_query($db,'SELECT FORM database . table WHERE id LIKE abc');
『database』というデータベースの『table』というテーブルの『id』というフィールドを検索して
『abc』と同じものがあればTRUEを返したいのですが、上記の方法では何も返されませんでした。
どのように記述すれば良いですか。御指摘お願い致します。
また、スレ違いなら誘導していただけると嬉しいです。
0184nobodyさん
2006/12/09(土) 16:49:19ID:???mb_ereg なら問題ないって聞いたんですが。
個人的にはなぜかereg系使いやすいんですよね・・・
0185nobodyさん
2006/12/09(土) 16:56:01ID:???$dbにはデータベースへ接続したときに得られたリソースを入れる。
後、セレクト文で何もセレクトして無いでしょ。 count(*) でも入れとけば?
0186nobodyさん
2006/12/09(土) 16:57:10ID:???mysql_connecthost,user,pass)
mysql_select_db("database")
mysql_query("SELECT * FROM table WHERE id = 'abc'")
mysql_db_query
http://jp.php.net/manual/ja/function.mysql-db-query.php
変更履歴
バージョン 説明
4.0.6 この関数は廃止予定です。使用しないでください。かわりに mysql_select_db() あるいは mysql_query() を使用してください。
0187nobodyさん
2006/12/09(土) 17:02:46ID:???有難うございます。
$dbHandle = mysql_connect("localhost","root","root");
mysql_select_db("database");
echo mysql_query("SELECT * FROM table WHERE id = 'abc'");
「リソース」というのが少しわからなかったので上記の方法でしてみました。
すると、「Resource id #5」という値が返ってきました。
もうリソース怖いです、やめてください。
0188nobodyさん
2006/12/09(土) 17:07:31ID:???マニュアル読めよ
$result = mysql_query("SELECT * FROM table WHERE id = 'abc'");
while ($row = mysql_fetch_assoc($result)) {
print_r($row);
}
0189nobodyさん
2006/12/09(土) 17:07:48ID:???つ ttp://jp2.php.net/manual/ja/function.mysql-query.php
0190nobodyさん
2006/12/09(土) 17:07:50ID:???ちゃんとマニュアル見てる?
返り値
SELECT, SHOW, DESCRIBE や EXPLAIN 文では、 mysql_query() は成功した場合に resource を返します。エラー時には FALSE を返します。
それ以外の SQL 文 UPDATE, DELETE, DROP などでは、 mysql_query() は成功した場合に TRUE 、エラー時に FALSE を返します。
返された結果にアクセスするためには、結果リソースを mysql_fetch_array() やその他の関数に渡します。
SELECT 文によって返された行の数を知るには mysql_num_rows() を用います。また DELETE, INSERT, REPLACE, または UPDATE 文で変更された行の数を 知るには mysql_affected_rows() を用います。
クエリが参照するテーブルにアクセスする権限がない場合も mysql_query()は失敗し、FALSE が返されます。
使い方に対するとても丁寧でわかりやすい説明があって、サンプルソースまでついてて、
しかもほぼ完全に日本語化されてるなんて恵まれた環境そうないと思うんだけど。
0192nobodyさん
2006/12/09(土) 17:23:53ID:???バイナリ対応もアレだけど、基本的にはereg系はpreg系に比べて数倍遅いからpreg推奨なだけ。
ただ、それなら何故ereg系があるかっつーと、昔からある正規表現で使い慣れた人が多いから。
性能的にそこがボトルネックになってるわけじゃなきゃ使いやすい方を使えばよろしい。
0193nobodyさん
2006/12/09(土) 17:42:45ID:???そこから<?php include("sample.html"); ?>みたくPHPを呼び出すことできます?
さらにブラウザに表示するアドレスをsample.htmlにできますでしょうか?
0195nobodyさん
2006/12/09(土) 18:14:04ID:???君は1度、
サーバーサイドとクライアントサイドのプログラムの違い、
それぞれのプログラムがどのマシン上で動いているか、
includeでどこのファイルが呼び出されているか、
そして恐らくはJavaとJavaScriptの違い、
を勉強してみた方がいい。
ものすごくとんちんかんなことを言っていることに気づくはずだ。
0196nobodyさん
2006/12/09(土) 19:31:55ID:???0197nobodyさん
2006/12/09(土) 19:43:16ID:???0198nobodyさん
2006/12/09(土) 19:49:44ID:???>>193が言ってるのはJava(Script?)からPHPのPerlバインディングみたいにPHPコードを
使えるかってことだろ。説明がちんぷんかんぷんでよくわからないが、HTTP経由ではないだろ。
0199nobodyさん
2006/12/09(土) 20:01:08ID:???HTTPも使わずにネット越しのファイルをどうやって読み込むんだよ。
0200nobodyさん
2006/12/09(土) 20:57:20ID:???そこのf1とf2に$f1、$f2の入れたいのですが
insert into user values('$f1','$f2');
だけでは入ってくれず、他のところに
insert into user values('$f1','$f2','','','');
というように空白を入れないと入ってくれません
f1->$fi、f2=>$f2のように指定することはできないのでしょうか?
MySQL+PHPですが、向こうに質問スレがなかったのでこっちで聞いてみました
0201nobodyさん
2006/12/09(土) 21:12:12ID:???SQLのマニュアルくらい読もうよ。
insert into user (f1, f2) values ('$f1', '$f2');
ってすれば対象カラムを指定できるでしょうが。
めちゃめちゃ基本の文法だと思うよ。
0202nobodyさん
2006/12/09(土) 21:13:43ID:???>>201もしくは
insert into user f1='$f1', f2='$f2'
でもいけるよ
丸っきりSQL文の話でPHP関係ないけどね
0203200
2006/12/09(土) 21:15:13ID:???ありがとうございます!
今日からDBはじめたヒヨッコなので・・・
もう少し勉強してから手をつけていきたいと思います
0204nobodyさん
2006/12/09(土) 21:26:06ID:???ちなみに文は
function mdq($sql){
mysql_db_query($db,$sql);
}
$sql = "insert into account id='$id',password='$pass',name='$name',addr='$add',id='$age',id='$age',sex='$sex'";
mdq($sql);
$sql = "insert into user id='$id',name='$name'";
mdq($sql);
なんですが・・・
0205nobodyさん
2006/12/09(土) 21:29:55ID:???0207nobodyさん
2006/12/09(土) 21:35:02ID:???insert into user set f1='$f1', f2='$f2';
じゃないの?
0208nobodyさん
2006/12/09(土) 21:38:10ID:???> function mdq($sql){
> mysql_db_query($db,$sql);
> }
あとこれだと$dbがどこにも定義されてない状態になるから
いくらSQL文が正しくても動かないんじゃなかろうか。
それとmysql_db_query()は旧バージョンの関数名なので使わない方がいい。
いったいどんな古い本で勉強してるんだ。
>>206
エラー文は返ってくるものではなく取得するもの。
mysql_query()実行後にmysql_error()で得る。
0209nobodyさん
2006/12/09(土) 21:43:56ID:???$dbはその上に書いてます。
($db = "database";)
さきほどまではmysql_db_queryでも正常に動いていました
(>>200の状態の時のことです)
mysql_db_queryをmysql_queryに変えると
Warning: mysql_query(): supplied argument is not a valid MySQL-Link resource
というエラーが返ってきました(PHPで)
mysql_error()と記述しても、それのエラーは返ってこない状態です。
0210nobodyさん
2006/12/09(土) 21:51:53ID:???とりあえずmysql_queryは引数とかも変わってるのでそこの修正は後にしろ。
マニュアル読み直して書き直しが必要。
それより>>207の方は?
0213nobodyさん
2006/12/09(土) 22:07:45ID:???これを
mysql_select_db($db);
mysql_query($sql);
で解決できました。
本当にありがとうございました。
0214nobodyさん
2006/12/09(土) 22:10:34ID:???読めば、やりたいことの例文が全部載ってるわけ。
2chで質問する暇があったら、マニュアル読んだ方が
早いから。絶対。
0215nobodyさん
2006/12/09(土) 22:14:02ID:???0217nobodyさん
2006/12/09(土) 22:51:10ID:???0218nobodyさん
2006/12/09(土) 22:57:16ID:???0219nobodyさん
2006/12/09(土) 22:59:17ID:???0221nobodyさん
2006/12/09(土) 23:10:01ID:???レベルの高い話しましょうか。
来年売れそうなWEBアプリケーションてどんなだろう?
このくらいの話ができないようなら消えてください。
0224nobodyさん
2006/12/09(土) 23:15:30ID:???苦言を呈しただけなのに、何でそんな話になるの?
0か1かまで単純化しないと話が理解できないの?
極論過ぎ。小学生の言い訳かよ。
0225nobodyさん
2006/12/09(土) 23:16:01ID:???誘導だけで回答できない雑魚はいらないので、
答える意思がないやつor議論はじめるやつは消えてくれ。
0226nobodyさん
2006/12/09(土) 23:16:29ID:???0229nobodyさん
2006/12/09(土) 23:59:49ID:???0230nobodyさん
2006/12/10(日) 00:16:14ID:???くだらねえのもくるし普通のもくる。
低レベルから高レベルの質問でも答えられるやつがいるなら問題ないだろ。
わざわざ拘ってるのに理解できん。
0231nobodyさん
2006/12/10(日) 00:23:50ID:???0232nobodyさん
2006/12/10(日) 01:05:52ID:???http://www.amazon.co.jp/exec/obidos/ASIN/4798015164/
これどうなん?買った人いる?
0233nobodyさん
2006/12/10(日) 01:10:46ID:???つーか、下らなくない質問がある&聞きたいというなら
改めてそういうスレを自分で立てればいいんだよ。
ニーズがあると本気で思ってるならさ。
0235nobodyさん
2006/12/10(日) 01:29:44ID:???ttp://pc8.2ch.net/test/read.cgi/tech/1127806509/l50
これをくだらく無い質問用にしたらどうか。
■ このスレッドは過去ログ倉庫に格納されています