[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 2chのread.cgiへ]
Update time : 06/01 12:02 / Filesize : 180 KB / Number-of Response : 739
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

くだすれPHP(超初心者用)5



1 名前:nobodyさん mailto:sage [2008/11/22(土) 06:36:02 ID:???]
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。

PHP Home Page
www.php.net/
jp.php.net/



くだすれPHP(超初心者用)4
pc11.2ch.net/test/read.cgi/php/1213356756/

適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 69
pc11.2ch.net/test/read.cgi/php/1211879073/

683 名前:nobodyさん mailto:sage [2009/02/04(水) 22:08:23 ID:???]
広告自動挿入のサーバーだと
ヘッダー情報ってだめなの?

684 名前:nobodyさん mailto:sage [2009/02/04(水) 22:09:01 ID:???]
PHPの講師やりたいんだけど、
どこの学校がおすすめ?

685 名前:nobodyさん mailto:sage [2009/02/04(水) 22:31:36 ID:???]
学校行ってまでPHP学びたいと思うか?

686 名前:nobodyさん mailto:sage [2009/02/04(水) 22:37:41 ID:???]
>>685
だって一日で20万もらえるってよ
バカらしくてコーダーなんかやってられないよ

687 名前:nobodyさん mailto:sage [2009/02/04(水) 22:41:25 ID:???]
SQL(SQLite)なんですが単対多のデータを取得したら
|A|a|1|
|A|a|2|
|A|b|1|
|A|b|2|
|B|c|1|
|B|d|1|
みたいになるじゃないですか。
重複した項目をまとめて(A,(a,b),(1,2)),(B,(c,d),1)な感じにする関数てあるんでしょうか。


688 名前:nobodyさん mailto:sage [2009/02/04(水) 22:46:57 ID:???]
>>685
pdoj.wordpress.com/2009/02/04/fetch-modes/

とりあえず翻訳やってみたけど、どう?

689 名前:nobodyさん mailto:sage [2009/02/04(水) 22:50:36 ID:???]
>>687
pdoとかMDBとかにあるよ
sqliteは知らんけど

690 名前:nobodyさん mailto:sage [2009/02/04(水) 22:52:37 ID:???]
>>688
ドキュメントの翻訳で「〜と思う」なんて普通使わない

691 名前:nobodyさん mailto:sage [2009/02/05(木) 00:20:18 ID:???]
>>689
ありがとうございます。
探したらfetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP)がそれらしいです。
ただマニュアルの例で例えると
array(3) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
みたいな感じにカラム0の値しか取得できてないようです。
自分がどこか間違ってるのかSQLiteが対応してないのか...
もう少し試してみます。



692 名前:nobodyさん mailto:sage [2009/02/05(木) 00:47:17 ID:???]
>>691
ほい
jp2.php.net/manual/ja/pdostatement.fetchall.php

693 名前:nobodyさん mailto:sage [2009/02/05(木) 00:49:12 ID:???]
$str = '4,980 円';

↑みたいなフォーマットの価格データを整数値にしたいんだけど
↓よりシンプルにやる方法ってある?

$str = str_replace(array(' ', ',', '円'),array('', '', ''),$str);

694 名前:nobodyさん mailto:sage [2009/02/05(木) 00:51:20 ID:???]
$str = (int)str_replace(',','',$str)

695 名前:nobodyさん mailto:sage [2009/02/05(木) 00:54:43 ID:???]
ありがとうg

696 名前:nobodyさん mailto:sage [2009/02/06(金) 21:22:00 ID:???]
>>692
MySQLでも試してみたのですが結果は同じでサンプルのような結果にならないのですが
どこか捉え違いしているのでしょうか。
PHP 5.2.6/MySQL 5.0.4
|apple|red|
|banana|yellow|
|apple|green|
という内容として、
$dbh = new PDO('mysql:〜','root','root');//もしくは'sqlite:〜'
$sql = "SELECT name,color FROM table1";
$sth = $dbh->prepare($sql);
$sth->execute();
$result = $sth->fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0);
var_dump($result);
$stmt = null;
結果
array(2) {
["apple"]=>
array(2) {
[0]=>
string(5) "apple"
[1]=>
string(5) "apple"
}
["banana"]=>
array(1) {
[0]=>
string(6) "banana"
}
}
となります。

697 名前:nobodyさん mailto:sage [2009/02/06(金) 21:29:26 ID:???]
サンプルのような結果と言われても、サンプルのような結果がどんなもんだかわからんからね。

とりあえず、FETCH_GROUPなんだし、結果が正しいように思うが?

698 名前:nobodyさん mailto:sage [2009/02/06(金) 21:34:36 ID:???]
まぁ、試しに
PDO::FETCH_COLUMN|PDO::FETCH_GROUP
じゃなく
PDO::FETCH_ASSOC|PDO::FETCH_GROUP
にしてみたら?

699 名前:nobodyさん mailto:sage [2009/02/06(金) 21:39:06 ID:???]
>>697
失礼、サンプルは>>692にもあるPDOStatement->fetchAllの例3です。
期待した結果は
["apple"]=>
array(2) {
[0]=>
string(5) "red"...
なんですが、>>696が正しいということはやっぱりなにか勘違いしてるのかなぁ

700 名前:nobodyさん mailto:sage [2009/02/06(金) 21:43:25 ID:???]
あぁそれか、fetchAllの第2引数に0が入ってるじゃん、だから、カラムが制約されてる
それ、外したらどうなる?


701 名前:nobodyさん mailto:sage [2009/02/06(金) 21:48:42 ID:???]
array(2) {
["apple"]=>
array(2) {
[0]=>
string(3) "red"
[1]=>
string(5) "green"
}
["banana"]=>
array(1) {
[0]=>
string(6) "yellow"
}
}

になったけど



702 名前:nobodyさん mailto:sage [2009/02/06(金) 21:49:22 ID:???]
ああすまん本人じゃなくて俺の環境でやったらってことね


703 名前:nobodyさん mailto:sage [2009/02/06(金) 22:07:01 ID:???]
>>700
あれ?どうも。0がなくてもうまく取得できなかった気がしたんですが
今0を外したらPDO::FETCH_ASSOC|PDO::FETCH_GROUP同様うまくいきました。
|PDO::FETCH_GROUPがついたときは第2引数で指定したPDO::FETCH_COLUMNを基準に
グループ化するのかと勘違いを…
実際は複数のカラムが必要なのでPDO::FETCH_NUM|PDO::FETCH_GROUPで
思った通りの結果が得られるようになりました。ありがとうございました。
>>701も確認ありがとうございます。

704 名前:nobodyさん mailto:sage [2009/02/06(金) 22:11:15 ID:???]
fetchAll(PDO::FETCH_COLUMN|PDO::FETCH_GROUP,0); で普通に取得できたが?
後進のために原因を明らかにしといてくれ

705 名前:nobodyさん mailto:sage [2009/02/06(金) 22:21:43 ID:???]
>>704
もし、第2引数に0が入ってても第2カラムを取得できたんならバグだと思うよ

706 名前:nobodyさん mailto:sage [2009/02/06(金) 22:26:54 ID:???]
お前は何をいっちょるんだ?
第2引数に0を入れるということは1番目のCOLUMNを用いて残りのカラムをGROUP化するってことだぞ

707 名前:nobodyさん mailto:sage [2009/02/06(金) 22:29:53 ID:???]
>>778
何も問題ないが

708 名前:nobodyさん mailto:sage [2009/02/06(金) 22:30:55 ID:???]
すまん誤爆した

709 名前:nobodyさん mailto:sage [2009/02/06(金) 22:57:48 ID:???]
>>706
デマ書いてすまん、よくわかってなかった。
そのはずだよねぇ。

710 名前:nobodyさん mailto:sage [2009/02/08(日) 19:09:17 ID:???]
<?php
try {
function exception_error_handler($errno, $errstr, $errfile, $errline ) {
throw new ErrorException($errstr, 0, $errno, $errfile, $errline);
}
set_error_handler("exception_error_handler");

fntest();
function fntest() {echo "call function";}

} catch (ErrorException $exception){
echo "何かエラーだよ<br />";
echo $exception->getMessage()."<br />";
echo "line:".$exception->getline();
exit();
}
?>
これを実行するとFatal error: Call to undefined function fntest() in〜と出ます
定義を先にするかtry〜catchをなくすとエラーは出ません
何がいけないんでしょうか


711 名前:nobodyさん mailto:sage [2009/02/08(日) 19:26:17 ID:???]
定義が後でtry〜catchの中だからでは?



712 名前:nobodyさん mailto:sage [2009/02/08(日) 20:00:14 ID:???]
>>711
まんまやん というかだめなんですか?
>次の二つの例のように、ある条件下でのみ関数が定義される場合には、その関数定義は関数がコールされる前に行われていなければなりません。
に当てはまるということでしょうか
とりあえずそういうものだということで前方で定義するようにします

713 名前:nobodyさん mailto:sage [2009/02/08(日) 20:00:15 ID:???]
>>710
いったいどうしたらそういう書き方ができるのか知りたいわ

714 名前:nobodyさん mailto:sage [2009/02/08(日) 20:35:03 ID:???]
Perlから入った奴なんかはそういう書き方をする事があるな。
Perlは書き方によっては、関数の宣言や定義より先に呼び出しが来てもちゃんと動く。

715 名前:nobodyさん mailto:sage [2009/02/08(日) 21:05:08 ID:???]
PHPだって、パース対象がグローバルなら、普通にfunctionの後置定義は有効だよ。
ifやwhileやtryやfunctionの中などの節の中は後置できないだけ。

>>710なんてそんなの百も承知で釣り質問してるに決まってるだろ。
釣られてへぼい回答してんじゃねぇぞ

716 名前:nobodyさん mailto:sage [2009/02/08(日) 21:07:39 ID:???]
ツン?

717 名前:nobodyさん mailto:sage [2009/02/09(月) 00:04:48 ID:???]
PHPとMySQLで学習用のWEBシステムを作っているのですが

' % 等のDBにとっては迷惑な文字列が入力された場合に、それとHTML上の特殊文字に変換する
にはどうすれば良いですか?

簡単な掲示板を作ったのですが' %が入力された場合にエラーが発生し困っています。


718 名前:nobodyさん mailto:sage [2009/02/09(月) 00:12:47 ID:???]
基礎中の基礎すぐる

719 名前:nobodyさん mailto:sage [2009/02/09(月) 08:41:31 ID:???]
>>717
mysql_real_escape_string
addslash


720 名前:nobodyさん mailto:sage [2009/02/09(月) 08:53:51 ID:???]
addslash ? syntax error

721 名前:nobodyさん mailto:sage [2009/02/09(月) 09:16:28 ID:???]
データーベースにデーターをつっこむ直前に
データーベース専用のエスケープ処理をするのが普通



722 名前:nobodyさん mailto:sage [2009/02/09(月) 09:20:54 ID:???]
データー(笑)

723 名前:nobodyさん mailto:sage [2009/02/09(月) 21:42:26 ID:???]
>717
使える箇所ならプリペアドステートメント。これが一番安全。
ttp://jp2.php.net/manual/ja/mysqli.prepare.php
ttp://jp2.php.net/manual/ja/pdo.prepare.php

使えない箇所ならmysql_real_escape_stringなど。
どの文字が危険かはDBによって違うので、MySQLにはMySQLの、OracleにはOracleの、SQLiteにはSQLiteの専用の関数がある。

724 名前:nobodyさん mailto:sage [2009/02/11(水) 12:21:22 ID:???]
htmlの<base>のようにユーザのトップディレクトリを指定したいんですが、
ユーザのトップディレクトリを調べる方法はありますか?


725 名前:nobodyさん mailto:sage [2009/02/11(水) 13:56:50 ID:???]
環境は?OSとか

726 名前:nobodyさん mailto:sage [2009/02/11(水) 14:12:44 ID:???]
>>725
ああすみません。
開発環境はPHP5.2.6でOSXなんですがWebサーバはまだ借りてないのでどうなるかはわかりません。
PHP5でApachサーバのところを借りようとは思ってます。
なので開発環境との違いや引っ越し時のことを考えて汎用的な関数がないかと質問しました。
一応マニュアルのファイルシステム関数は目を通したんですが…

727 名前:nobodyさん mailto:sage [2009/02/11(水) 14:24:23 ID:???]
exit()ってスクリプト終了のために多用してもいいのでしょうか?
たとえばエラーチェック時にdieの代わりに自作関数呼び出して終了みたいな場合など

function return_json($flag, $data){
 if($flag == true)
  $result = $data;
 else
  $result = "ERR:".$data;
 $res = array(
  "status" => $flag,
  "result" => $result );
 print(json_encode($res));
 exit();
}

if(エラーチェック1) return_json(false,"エラー1です"); //エラーなら終了

if(エラーチェック2) return_json(false,"エラー2です"); //エラーなら終了

//最後に
return_json(true,"成功です。");

728 名前:nobodyさん mailto:sage [2009/02/11(水) 14:33:34 ID:???]
別にいいんでは?

729 名前:nobodyさん mailto:sage [2009/02/11(水) 15:13:35 ID:???]
関数はあくまで何かを返すだけにして、制御を握っているのは「メインのルーチン」ひとつにした方がいい。
あちこちの関数で好き勝手に処理を中断したり画面出力してたりすると、そのうち管理しきれなくなる。
同じ理由で、printするよりは文字列を返す(printは「メインのルーチン」で行なう)方がいいと思う。

俺ならreturn_json()はjsonを返すだけ(exitもprintもしない)にして
function generare_json(){
 if(isError1()){
  return return_json(false,"エラー1です");
 }
 if(isError2()){
  return return_json(false,"エラー2です");
 }
 return return_json(true,"成功です。");
}
とし、echo generate_json()を最後に呼び出す。
exit()はスクリプトの末尾のみ、出力はこの文のみになる。

730 名前:nobodyさん mailto:sage [2009/02/11(水) 15:20:37 ID:???]
つうか、正しいjson出力とエラー出力を別の関数にするかな。
boolを渡すより、return_error_json()の方が分かりやすい。

731 名前:nobodyさん mailto:sage [2009/02/11(水) 15:23:03 ID:???]
>>719
ヒントをサンクス。

>>723
詳しいありがとうございます。
参考にさせて頂きます。



732 名前:nobodyさん mailto:sage [2009/02/11(水) 17:07:46 ID:???]
>>726
ああもしかして、http://〜/~user/ の部分の実ディレクトリが知りたいってこと?

733 名前:nobodyさん mailto:sage [2009/02/11(水) 17:30:07 ID:???]
実ディレクトリでいいのかな?ローカルでいえば
/Applications/MAMP/htdocs/
となります。
実行ファイルがトップにあるわけではないので相対パスでのファイル指定より
基点からの絶対パスのほうがわかりやすいかなと。

734 名前:724,733 mailto:sage [2009/02/11(水) 17:31:27 ID:???]
>>732
アンカーわすれてたので念のため

735 名前:nobodyさん mailto:sage [2009/02/11(水) 17:45:24 ID:???]
>>733
dirname(__FILE__) とか getcwd() とか

そういうこと?

736 名前:nobodyさん mailto:sage [2009/02/11(水) 17:47:36 ID:???]
>>733
$_SERVER['DOCUMENT_ROOT']

737 名前:nobodyさん mailto:sage [2009/02/11(水) 18:00:00 ID:???]
ユーザー関係ないじゃんw

738 名前:724,733 mailto:sage [2009/02/11(水) 19:15:46 ID:???]
>>735,736
$_SERVER['DOCUMENT_ROOT']で希望のパスを得ることができました。
ありがとうございました。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<180KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef