【PHP】下らねぇ質問はここに書き込みやがれ 50
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2007/07/11(水) 17:50:01ID:fYd+34USPHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。
過去スレ、関連スレ、FAQなどは>>2-10辺り
◆前スレ
【PHP】下らねぇ質問はここに書き込みやがれ 49
http://pc11.2ch.net/test/read.cgi/php/1182794620/
◆質問する時の注意
・ 自分のIDを表示させること。(メール欄に何も記述しないこと。空白も入力しちゃダメ)
・ サーバーのOS(Linux、Windows他)、WebサーバーとPHPの種類やバージョン等を明記すること。
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
◆質問後の注意
・偽者防止に必ずIDを表示させること。(メール欄に何も記述しない)
・2回目以降は最初に質問した際のレス番号を名前欄に入れること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
・SQLについての質問はデータベース板(PCカテゴリ)の各スレで
0722nobodyさん
2007/07/22(日) 22:07:19ID:???使い道なさそうなものはたぶんないよ。
0724nobodyさん
2007/07/22(日) 22:15:41ID:???0725nobodyさん
2007/07/22(日) 22:18:26ID:???PEAR HTML_CSS
http://pear.php.net/package/HTML_CSS
ただおまえの求めてるAPIの感じではないかもしれないが
0727nobodyさん
2007/07/22(日) 22:59:30ID:e5knIosIhttp://www.jienq.com/vote/htm/1185110565.html
0729nobodyさん
2007/07/22(日) 23:21:25ID:???で実際どういう事に使おうと思ってんの?
考えられるっていや初心者でもそこそこ簡単にcssを設定できるブログサービスくらいか・・・
ただわざわざ探してどんなんだか分かんないライブラリ使う意味ないし
どうしてもオブジェクト指向でやりたいっていっても
プロパティ設定して吐き出す程度の機能だったら
調べながら使うより自分で書いた方が早そうだ
0731nobodyさん
2007/07/22(日) 23:26:46ID:???0732nobodyさん
2007/07/23(月) 00:01:42ID:???0734nobodyさん
2007/07/23(月) 01:45:37ID:???何に使うの? これ使うとregister_globals=Off は無意味に
なるとかないの?
0737nobodyさん
2007/07/23(月) 02:32:31ID:Q/UfUVNm同じ字形なのですが、str_系の関数もmb_系の関数も一致しないのですが・・
0738734
2007/07/23(月) 03:16:15ID:???いや、マニュアル読んでも使い道が分からないんだよ。
register_globals = Off のときにGET値やPOST値をグローバル
にする意味が。
0739nobodyさん
2007/07/23(月) 03:21:34ID:Q/UfUVNmグローバル変数は、ユーザーが意図しない変数を入れてきて、
プログラムの誤作動、セキュリティーの脆弱性を高めることに繋がるので、
基本的にOFFにしておくという意味。
0740nobodyさん
2007/07/23(月) 03:27:35ID:???0741nobodyさん
2007/07/23(月) 05:15:02ID:???0742nobodyさん
2007/07/23(月) 05:49:07ID:FkQfGydcはやく答えろ
0743nobodyさん
2007/07/23(月) 09:59:03ID:x2hGpWhdクラスのsetterやgetterを自動生成してくれるようなライブラリ知りませんか?
0744nobodyさん
2007/07/23(月) 10:15:03ID:m6GTZoUqtextareaのテキストを一定間隔で\nしたいのですが
mb_chunk_split的な関数はないですよね?
あああああああ\nいいいいいいいいい\n
0745nobodyさん
2007/07/23(月) 10:16:42ID:m6GTZoUq本当にありがとうございました
0746nobodyさん
2007/07/23(月) 11:35:32ID:g+EySz3/20文字ごとに\nを入れるとして
日本語は1文字カウント、英字は2文字で1字カウントで挿入するとして
スマートなループはあるでしょうか?
0747nobodyさん
2007/07/23(月) 11:57:31ID:???それを書いてからに白。
話はそれからだ
0748nobodyさん
2007/07/23(月) 13:33:46ID:LAzhk+Ka(携帯サイトで使用している為)
会員ページでは全てのページに会員の名前を表示したいのですが、
ログインのときにIDとパスワードから名前を取得してセッションに格納するべきか、
全ページでDBにアクセスして名前を取得するか迷っています。
皆さんはどちらの方法でしていますか。
またほかに何か方法はありますでしょうか。
アドバイス頂けたらと思います。
宜しくお願い致します。
0750nobodyさん
2007/07/23(月) 13:36:54ID:???amachangってどう思うよお前等?
俺はぶっちゃけ嫌いなんだよね…
CSS Niteの1件といいね
0751746
2007/07/23(月) 13:39:21ID:g+EySz3///半角幅折り返し
function mb_chunksplit($value,$br = 20) {
global $action;
if($action == "post") {
$loop = mb_strlen($value,DEF_HTTP_ENC); //マルチバイト文字数
for($i=0; $i < $loop; $i++) {
$wk = mb_substr($value,$i,1,DEF_HTTP_ENC); //一文字ずつ取得
//指定バイト幅で改行
if($line_count >= $br) {
$line .= "\n";
$line_count = 0;
}
$line_count += mb_strwidth($wk);
$line .= $wk;
}
}else{
$line = $value;
}
return $line;
}
0752nobodyさん
2007/07/23(月) 14:14:00ID:???0753nobodyさん
2007/07/23(月) 15:28:23ID:???$count = 1;
$addr = "000.000.000.000"
↑のデータをファイルとクライアントから取得したと仮定
↓やりたいのはここから
chomp($count);
$count ++;
$hoge[0] = "$count"."\t"."gmt";
push (@hoge,$addr);
open (OUT,">data.txt");
foreach (@hoge) {
print OUT "$_\n";
}
close OUT;
作りたいのは簡単なアクセスカウンターです
ファイルから読み込みデータを配列に格納することはできたのですが、
カウントアップから複数行の書き出しのところで躓いてます。
0754nobodyさん
2007/07/23(月) 15:33:24ID:???とりあえず>>1嫁
今日から夏休みなんだよなぁ・・・
厨が増えそうで怖い・・ってか流れからしてもう増えてるな
0755753
2007/07/23(月) 16:24:58ID:???perlスレにいくからごめんな
0756nobodyさん
2007/07/23(月) 18:10:40ID:???とりあえず>>1嫁
今日から夏休みなんだよなぁ・・・
厨が増えそうで怖い・・ってか流れからしてもう増えてるな
0757692
2007/07/23(月) 18:13:09ID:6p0coLtT>win + php + mysql4or5 で開発してる方に聞きたいです。
>phpの文字コードとmysqlの文字コードを何に設定していますか?
>また、phpとmysqlの文字コードって統一する必要はないんでしょうか?
0758753
2007/07/23(月) 18:34:20ID:???ここでやっぱり聞きます。
おしえてください。よろしくたのんます。
0759nobodyさん
2007/07/23(月) 19:09:19ID:???とりあえず>>1嫁
今日から夏休みなんだよなぁ・・・
厨が増えそうで怖い・・ってか流れからしてもう増えてるな
0760nobodyさん
2007/07/23(月) 19:14:50ID:6p0coLtT>厨が増えそうで怖い
お前も似たようなもんだろが
0761nobodyさん
2007/07/23(月) 19:29:18ID:???chompはtrimかrtrim
PHPの関数は基本的に値渡しなのでtrim($count)だけではだめ
$count = trim($count);
のように戻り値を受け取らないといけない
pushはarray_pushがあるけどそもそも配列使う必要ないよ
$count = trim($count);
$fp = fopen("data.txt", "w");
fwrite($fp, $count . "\t". "gmt" . "\n" . $addr . "\n");
fclose($fp);
0762nobodyさん
2007/07/23(月) 19:47:12ID:???俺の場合はlinux - php5 - mysql5だけど
utf8が通らないなんてあり得ないので、必ずどこかで設定ミスしてわけわからん事になっているはず。
一通りまとめられている解説サイトでも見ながら(自分にあったものを検索汁 :あとはスレの >>1 のリンクとか)
「一つずつ」 順を追って確認しながら作業してみ。
確認箇所
・php.ini
・my.cnf
・DB
・ソース内のFORMのPOST部分のソース
・ソース内のinsert部分
そもそも
mysql> SHOW VARIABLES LIKE 'character\_set\_%';
でちゃんとutf8になっているか?
0764757
2007/07/23(月) 21:23:42ID:6p0coLtTありがとうございます いろんなサイトをもう3日見てまわってます
文字コードの設定は
mysqlは
+--------------------------+-------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8 |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
+--------------------------+-------+
PHPは
mbstring.http_output UTF-8 UTF-8
mbstring.internal_encoding UTF-8 UTF-8
となっています。
また、mysqlにcmdからinsert文で日本語のデータを入れて、
それをPHPで表示するとやっぱり化けています。
つまり、少なくともPHP→mysqlの登録部分でのエラーではないみたいですが…
なにが悪いんだろう
0765nobodyさん
2007/07/23(月) 21:51:49ID:???cmd周りは、詳しくないが、
windowsの、コマンドプロンプトって、デフォルトが SJISだから、
それで日本語つっこむと、SJISの日本語がそのまま入ってしまうんじゃ? ([client]default-character-SET=utf8 の場合)
cmd上で、
chcp 65001 ってすると UTF-8になるけど、日本語がこの状態で正しくつっこめるかどうかはしらん
とりあえず、
hoge.php と適当なファイルをUTF-8作って、 埋め込みで
$a = "日本語";
//$aのinsert文実行
//select文実行
echo [selectしたデータ]
みたいな感じの処理を書いてみてブラウザで表示してみれば?(ブラウザのエンコード自動判定も、右クリックでUTF-8に変更する)
0766nobodyさん
2007/07/23(月) 22:09:21ID:???mysql_query('set character set utf8');
で全て解決する。
0767757
2007/07/23(月) 22:56:30ID:6p0coLtTありがとうございます
試しに登録側のPHPを以下にしたらうまくいきました
<?php
extract($_POST);
$db=mysql_connect('localhost','root','pw');
mysql_select_db('peartest');
mysql_query("SET CHARACTER SET utf8");//この行を追加
if($name != ""){
$sql = "insert into dbtest values(0,'$name')";
mysql_query($sql);
}
?>
自分は、mysql_query("SET CHARACTER SET utf8");は読み取り側にすべき機能なのかと
思っていたんですが、送り側にもするものなんですね(>>766さんもそうなんですか?)
これは、「これから送るデータはutf8で保存しろ」という命令と考えていいんでしょうか?
そうすると結局全てのPHPスクリプトに書き込まなきゃいけなくなりそうですが、、
その「全部にイチイチ書く」のを避けるために my.iniにskip-character-set-client-handshakeを
指定するといろんなサイトに書いてあったのに、そのやり方じゃうまくいきませんでした。。
なんでだろ、もういいかなぁ…
0768nobodyさん
2007/07/24(火) 00:01:05ID:???0769nobodyさん
2007/07/24(火) 00:02:08ID:N6M16q3qApache 2.2.4、MySQL 5.0.41、PHP 5.2.2を使用しています。
以下のものを、掲示板のトップページにfunction dispTitleList($pid)
という関数を使って、ツリー表示をしたいと思っています。
改善点を教えていただけませんでしょうか。お願いいたします。
0770769
2007/07/24(火) 00:03:10ID:N6M16q3q// DBへ接続
$con = mysql_connect('localhost','root','')
or die('Cannot connect<br>');
mysql_select_db('cdcol') or die('Cannot select<br>');
// titelとidの一覧を取得
$query = "select titel,id from cds";
$result = mysql_query($query);
if (!$result) {
$mes = 'Error : ' . mysql_error() . "<brn";
$mes .= 'Whole query : ' . $query;
die($mes);
}
// titelを一覧表示しつつ、それをidを渡すリンクタグで囲む
echo "<ul>\n";
while ($data = mysql_fetch_assoc($result)) {
// リンクタグを出力
echo "<li><a href='cdcol_desc.php?cdid=".$data['id']."'>";
// titelを表示
echo $data['titel'];
// リンクタグを閉じる
echo "</a>\n";
}
echo "</ul>\n";
mysql_close($con);
?>
0771nobodyさん
2007/07/24(火) 00:10:39ID:VTvHCDnMいます。
preg_match($pattern, $string)でパターンマッチした後で、$string中で
「パターンに一致した前の部分」「パターンに一致した後の部分」を取り出す
一番簡単な方法は何になるでしょうか?
0772757
2007/07/24(火) 00:15:30ID:HjFYaxsCどういうことなんでしょう?
PHPの場合なら、保存形式utf-8のPHPファイルのフォームからinsertする
文字はutf-8になるんじゃないですか?
または、cmdなら、 たとえばこのテキストボックスにinsert文を書いて、
それをペーストするような時に文字コードが関係するものなんでしょうか?
かなり初心者な質問かもしれないですが、おねがいします
0773nobodyさん
2007/07/24(火) 00:19:42ID:qzMpiZVa$hoge_array [0] = "hoge1";
$hoge_array [1] = "hoge2";
$body = preg_replace('/([0-9]+)/', $hoge_array[$1], $body);
要は置き換え文字列を、後方参照値を使って引用したいんだが、
$1が展開してくれない。
''を使ってくくっても配列の中じゃシンタックスエラーになる。
誰かいい方法ない?
答えられたら神と崇めます。
0774nobodyさん
2007/07/24(火) 00:53:18ID:???>>768じゃないけど
php.iniもUTF-8で設定しているようだし、DB側もutf8だから
フォームのあるhtmlが、
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta http-equiv="content-language" content="ja" />
てちゃんと設定してれば大丈夫だと思うが。
不安だったら
POSTで渡した変数ではなく、
UTF-8のソースに、2バイト文字をべた書きしたものをinsertしてみて実験してみれば。
問題を切り分け、調査する時は、極力問題を単純化して調べるのがコツ
0775nobodyさん
2007/07/24(火) 01:20:07ID:???どこで見たか忘れたけど(MySQLのあるバージョンから?)外部(PHP)と接続した時に、
iniやcnfの設定にかかわらず文字コードがLatin-1になってしまって日本語が扱えないとか。(バグ?)
PHPで接続した時に
$db->exec('set names utf8');とか
mysql_query("SET CHARACTER SET utf8");とかを実行して、
いちいち文字コードを指定してやれば大抵大丈夫なようです。
0776757
2007/07/24(火) 01:38:50ID:HjFYaxsCありがとうございます
登録のPHPにフォームと関係なく mysql_query("insert into dbtest values(0,'しいたけ')"); を
実行したんですが、やっぱり化けていました
(mysql_query("SET CHARACTER SET utf8"); を解除した時)
>>775
ありがとうございます
やっぱりイチイチ文字コード指定ってやり方じゃなきゃダメっぽいですね
ダメバージョンを使ってしまってるようです…
いろいろアドバイスをくれた皆さんありがとうございました。
MYSQLを入れなおしてみます、PHPの質問と少しずれてすみませんでした。
どうもありがとう
0777nobodyさん
2007/07/24(火) 04:54:55ID:0up0b4iVprint "<input type=\"hidden\" name=\"hID\" value=\"$dID[$i]\">";
print "<input type=\"submit\" name=\"cmd_Delete\" value=\"削除\">";
}
削除ボタンが押されたら押された場所のdIDをhIDに入れたいんだがこれでは出来ないのか・・・
なんか他の方法ありますか?
0778nobodyさん
2007/07/24(火) 06:19:53ID:???○時○分から○時間○分 経ちました と表示したいんですけど、教えてください
0779nobodyさん
2007/07/24(火) 08:47:32ID:???開始と終了、それぞれをstrtotimeでUNIXタイム型に変換してから差を求める。
それを60で割ったり、3600で割ったり。
0783753
2007/07/24(火) 09:22:09ID:Wdyxg0H6ありがとうございます
perlと似ているだけに少し使い方が違ったり、同じような動作をするのに
いくつも似たような演算子があったりと少々戸惑っていました。
おかげさまで納得のいくものができました。
ちなみに配列は同一IPをカウントしないために2行目からIPを格納するのに使っています。
while使うと\nばかりが延々続いた膨大なデータファイルが出来上がり、なぜこうなるのか
今の自分では理解できないです。
ただforeach使ったら狙った動作をしてくれたのでとりあえずは良しとし、これからwhileの謎を解明しようと思ってます。
遅レスで申し訳ないですが、ありがとうございました。
0785nobodyさん
2007/07/24(火) 10:47:54ID:???0787nobodyさん
2007/07/24(火) 11:21:03ID:???for($i=0;$i<10;$i++){
print "<form meghod=\"post\" action=\"this.php\">";
print "<input type=\"hidden\" name=\"hID\" value=\"$dID[$i]\">";
print "<input type=\"submit\" name=\"cmd_Delete\" value=\"削除\">";
print "</form>";
}
みたいに1個ずつFORMタグで囲まないと、全部のhiddenが送られちゃうでしょ。
GETで良いなら、<a href="this.php?delete_id=".$did(略
で簡単に済む。
消すIDを送るだけならPOSTする必要はない。
あとはsubmitのnameで渡しちゃって
PHP側でnameをごにょごにょする方法もある。
でも削除なら、チェックボックスにするのが一般的。
そうすれば一気に消したり出来る。
0788nobodyさん
2007/07/24(火) 11:42:14ID:???ほらよ
<script language="JavaScript" type="text/JavaScript">
<!--
function setval(val){
document.form.hID.value = val;
document.form.submit();
}
//-->
</script>
<form name="form" method="post" action="./0.php">
<input type="hidden" name="hID">
<?php
for($i=0;$i<10;$i++){
?>
<input type="button" value="削除" onclick='setval(<?=$i;?>)'>
<?php
}
?>
</form>
<?php
echo $_POST["hID"];
?>
0789nobodyさん
2007/07/24(火) 13:04:06ID:???みたいなこと(見つかった結果をひとつひとつphpの関数に投げる)したいんですが
どうすればいいですか?
0790789
2007/07/24(火) 13:07:13ID:???0792789
2007/07/24(火) 13:19:51ID:H27wi0OE>>790-791騙りは臣でいいよ^^;
0794773
2007/07/24(火) 13:21:32ID:qzMpiZVa誰も答えられないのかよ。
俺も含めてここの奴はたいした事ねえな。
0795nobodyさん
2007/07/24(火) 13:23:09ID:???説明不足じゃない?やりたい事がいまいち分からない。
phpのソース内で関数を使えばいいって答えじゃ駄目なの?
0797777
2007/07/24(火) 13:42:58ID:28scIEzFありがとう.formタグで囲めばよかったのか(汗
やはり削除とかはチェックボックスのが良いな.サンクス
0798789
2007/07/24(火) 13:48:24ID:H27wi0OEアドバイスおねがいします。
0799789
2007/07/24(火) 13:49:26ID:H27wi0OEわたしもたまに回答者にむかつきますがここは冷静になりましょうよ
0800789
2007/07/24(火) 13:50:45ID:H27wi0OE0803nobodyさん
2007/07/24(火) 13:56:21ID:???もっといい やり方も あると思いますが
$body = "abc 0 ABC 1 zzz";
echo "$body\n";
function call_back($n) {
$hoge_array[0] = "hoge1";
$hoge_array[1] = "hoge2";
return $hoge_array[$n[0]];
}
//$body = preg_replace('/([0-9]+)/', $hoge_array[$1], $body);
$body = preg_replace_callback('/([0-9]+)/', call_back, $body);
echo "$body\n";
神と崇めていただかなくて結構なので
その態度を改めていただけないでしょうか
0804nobodyさん
2007/07/24(火) 13:59:26ID:???下のほうにある call_back は single quotation で囲んでください
でないと notice レベルの警告が出ます
0805nobodyさん
2007/07/24(火) 14:17:58ID:PuYDSgkHどうしたらいいですか?
0806nobodyさん
2007/07/24(火) 14:23:21ID:Y3Stxh5i数字を入れるフォームを空にして更新するとエラーなってしまいます
文字型は入れなくてもエラーになりません
0809nobodyさん
2007/07/24(火) 14:57:29ID:???何故このスレでは強制されるんですか?
こんな悪習を続けていたらPHPerはケツの穴が小さいと思われますよ
ID出さなくても、答えたい人は答える、答えたくない人は答えない
それでいいじゃないですか
0811nobodyさん
2007/07/24(火) 15:02:44ID:CE11c5QjセッションIDでセッションを取得して$_SESSIONに格納する方法はありますでしょうか?
URLにID付加をするのではない方法であればお願いします。
0814nobodyさん
2007/07/24(火) 15:05:45ID:???最初にマニュアル読むように
引用
session_name() は、カレントのセッション名を 返します。name を指定した場合、カレントの セッション名は、その値に変更されます。
0815nobodyさん
2007/07/24(火) 15:05:54ID:Y3Stxh5iNULLを指定しても反映されません
デフォルトで設定するにはどうしたらいいんでしょうか
0816nobodyさん
2007/07/24(火) 15:08:51ID:z1nZ//nw知りませんか。
PHP4のモジュール版sqliteで2系のDBを作ってしまったとです。
0817nobodyさん
2007/07/24(火) 15:11:13ID:z1nZ//nwMySQLならカラム作るときにDEFAULT NULLだったと思います。
そすれば、何も入れなきゃNULLになるです。
0818nobodyさん
2007/07/24(火) 15:14:14ID:???> NULLを指定しても反映されません
設計段階でNOT NULL指定してないだろうな?
本来は設計段階で設定すべきだが…
ALTER TABLE [テーブル名] ALTER COLUMN [カラム名] SET DEFAULT [デフォルト値];
0819773
2007/07/24(火) 15:23:47ID:???preg_replace_calllbackは後方参照値が取れないから使ってなかったけど、
そういうやり方があったんですね。
解決しました。
ありがとうございました。
0821nobodyさん
2007/07/24(火) 15:44:05ID:???ID無しで質問するのも、それに回答するのも自由はあるよ、やればいいじゃん。
ただ、ニセモノが頻発するので推奨してるだけ。
■ このスレッドは過去ログ倉庫に格納されています