くだすれPHP(超初心者用)5
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2008/11/22(土) 06:36:02ID:???もしくは質問者自身何が何だが分からない質問を勇気を持って書き込むスレッドです。
PHP使いが優しくコメントを返しますが、
お礼はPHPの布教と初心者の救済をお願いします。
PHP Home Page
http://www.php.net/
http://jp.php.net/
くだすれPHP(超初心者用)4
http://pc11.2ch.net/test/read.cgi/php/1213356756/
適当に関連スレ(マルチはだめぽ)
【PHP】下らねぇ質問はここに書き込みやがれ 69
http://pc11.2ch.net/test/read.cgi/php/1211879073/
0389nobodyさん
2009/01/15(木) 23:00:30ID:???>>388
レスありがとうございます。
この検索の場合は完全に一致するものしか検索できないんですね。
例えば
$word="玉";
とした場合に
埼玉県のインデックスの3を返すというのは無理なんでしょうか?
0392nobodyさん
2009/01/16(金) 15:17:30ID:???strposって、最初に出てきた位置を返す関数じゃない?
「あるかどうか」を調べる関数のほうがいいんだけど。
0393nobodyさん
2009/01/16(金) 15:19:44ID:???0394nobodyさん
2009/01/16(金) 16:25:58ID:???そこまでに\nがいくつあるか
ウマー
0395nobodyさん
2009/01/16(金) 23:23:04ID:???>392
strposは文字列検索としては最速の部類。
他の選択肢はpreg_match位しかないが、preg関数とstr関数じゃお話にならんほど速度が違う。
0396nobodyさん
2009/01/16(金) 23:24:33ID:???0397nobodyさん
2009/01/16(金) 23:28:16ID:???0398nobodyさん
2009/01/17(土) 11:25:45ID:???395ではないが暇なので作ってみた
$imakara_ikude = microtime(TRUE);
$dokowo_sawatte_hosiinya = '検索対象にしたい任意の文字列';
$kokoga_eenka = '検索したい任意の文字列';
$kokoga_eenka_pattern = '/' . preg_quote($kokoga_eenka, '/') . '/';
$itte_itte_ikimakuru = 100000;
for ($i = 1; $i <= $itte_itte_ikimakuru; $i++) {
if (strpos($dokowo_sawatte_hosiinya, $kokoga_eenka) !== FALSE) {}
// if (strstr($dokowo_sawatte_hosiinya, $kokoga_eenka)) {}
// if (preg_match($kokoga_eenka_pattern, $dokowo_sawatte_hosiinya)) {}
}
$doya_yokattaka = microtime(TRUE) - $imakara_ikude;
echo $doya_yokattaka;
■結果 - Windows XP(ペン4 3.2GHz)+XAMPP(PHP5.2.2)
strpos():0.060ぐらい
strstr():0.052ぐらい
preg_match():0.28ぐらい
strstr()の方が微妙に早いが、公式マニュアルでstrstr()の説明見ると
strpos()使えカスと書いてるので俺は素直にstrpos()使う。
0399nobodyさん
2009/01/17(土) 11:38:45ID:???というわけで、
if (strpos($str, 'search') !== FALSE)
を使え。必ず「!== FALSE」にするように。理由は説明ダルいからマニュアル見れ。
>>389
$index = FALSE;
$word = '玉';
if ($ary = file('test.txt')) {
foreach ($ary as $key => $val) {
if (mb_stripos($val, $word) !== FALSE) {
$index = $key;
break;
}
}
}
var_dump($index);
strpos()はマルチバイト対応してないので、mb_系使うように。
0400nobodyさん
2009/01/17(土) 11:43:51ID:???>>384
気持ち悪いなら明示すりゃいい。というか、色んな意味で明示したほうが良いと俺は思う。
phpは、リソースのオープンは明示しなくても自動的に閉じてくれる。(ファイルであれDBであれ)
>>382
PHP5から鬼車。mb_ereg()系で。
preg_match()では使われてないのでは?
0401nobodyさん
2009/01/17(土) 11:53:04ID:???俺の場合
Java : PHP = 5 : 5
ただ、レンタルサーバ代がJavaだと高いから力配分を
1:9程度に持って行こうかと思ってる。
0403nobodyさん
2009/01/17(土) 12:05:09ID:???$a = array('a', 'b', 'c');
foreach ($b as $k => $) {}
実行すれば分かる
0409nobodyさん
2009/01/17(土) 12:29:37ID:???0411nobodyさん
2009/01/17(土) 12:34:40ID:???$ary = file('test.txt') or array();
$ary = file('test.txt') or exit;
とか。もしくは例外使う。
何か関数からの出力を得る度にifで1ブロック使うなんてナンセンスすぎ。
0412nobodyさん
2009/01/17(土) 12:38:43ID:???0413399
2009/01/17(土) 12:39:51ID:???あのな。
言っておくが、>>399みたいな処理は普通はクラスのメソッド通すなりするわ。
めんどくさいからはしょってるだけだろーが。分かるか?あ??
なんか>>411見てると、俺の会社の全然使えないカスPGにそっくりで殴り倒したくなるわw
0414nobodyさん
2009/01/17(土) 12:40:56ID:???0415nobodyさん
2009/01/17(土) 12:41:35ID:???誰かが答えるとそれには文句つけないと気がすまないんだな。
どうしようも無いカスだなw
0416nobodyさん
2009/01/17(土) 12:42:27ID:???たかがPHPでしょ
動けばいいじゃん
ばか?
0417nobodyさん
2009/01/17(土) 12:43:17ID:???0418nobodyさん
2009/01/17(土) 12:46:56ID:???0419nobodyさん
2009/01/17(土) 12:50:26ID:???/⌒ ⌒\ ) 『 開こうとしているファイルが必ず開けるとは限らないわな』っと。
/( ●) (●) \ )/⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y⌒Y丶
/ ::::::⌒(__人__)⌒::::: \
| |r┬-| |
\ `ー'´ /
ノ \
/´ ヽ カ
| l l||l 从人 l||l l||l 从人 l||l カ タ
ヽ -一''''''"~~``'ー--、 -一'''''''ー-、. タ
ヽ ____(⌒)(⌒)⌒) ) (⌒_(⌒)⌒)⌒))
┌┬┬┐┌┬┬┬┐┌┬┬┬┐┌┬┬┬┐
,. - ''"| ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ρ ̄`l
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ノ ̄ ̄
____
/::::::─三三─\ foreach((array)file('〜') as ...)
/:::::::: ( ○)三(○)\
|::::::::::::::::::::(__人__):::: | _____
\::::::::: |r┬-| ,/ .| |
ノ:::::::: `ー'´ \ |
0420nobodyさん
2009/01/17(土) 12:52:06ID:???Java使いが一番
0422nobodyさん
2009/01/17(土) 12:53:47ID:???0423nobodyさん
2009/01/17(土) 13:03:06ID:???0424nobodyさん
2009/01/17(土) 13:46:03ID:???PHPやってると頭だけではなく性格まで悪くなるらしいから気をつけようww
融通利かないやつやコミュニケーション能力無いやつは
PGだろうが何だろうが使えん
うちにも1名いて給料の査定も下がったはずだが、はやくその理由に気付いて辞めてくれ
0425nobodyさん
2009/01/17(土) 17:45:47ID:???どういうわけか土曜日だけ文字化けしてしまいます。
解決策はないでしょうか?
<?php
write_day();
//一週間を表示する関数
function write_day(){
while($i<7){
print($f1[$i]);
$ts=getDay($i);
print(date("m/d".getYoubi(date("w",$ts)),$ts));
$i++;
}
}
//曜日を漢字に変換
function getYoubi($wday) {
$arr = array("(日)","(月)","(火)","(水)","(木)","(金)","土");
return $arr[$wday];
}
//日にちを取得する関数
function getDay($day){
$now = time();
return mktime(date("H",$now),date("i",$now),date("s",$now),date("m",$now),date("d",$now)+$day,date("Y",$now));
}
?>
0426nobodyさん
2009/01/17(土) 18:23:30ID:???コードをShift_JISで書かないでUTF-8にするだけで解決。
0427nobodyさん
2009/01/17(土) 18:52:25ID:???一発で解決しました。ありがとうございます。
本当文字コードって難しい。
スクレイピングでサイト作る人とか超尊敬。
0429nobodyさん
2009/01/18(日) 07:29:09ID:???土曜日だけどうしても文字化けで表示できず
いろいろと試行錯誤した結果わからなかったので
質問しました。
()除いたりといった試行錯誤の名残をそのまま
書いてしまいました。ごめんなさい。
0431nobodyさん
2009/01/18(日) 20:28:36ID:???そんな俺に、一冊買うならコレ!っていうPHPの参考書を教えてください。
0432nobodyさん
2009/01/18(日) 20:32:39ID:???http://www.php.net/manual/ja/
0434nobodyさん
2009/01/18(日) 22:30:36ID:???0435nobodyさん
2009/01/18(日) 23:59:27ID:542zz2rdsubmitボタンが押されたときに調べて、それが通ればsessionに入力項目を追加して次のページへ
ってことをやりたいんですが、
全部の項目が入力されているかを調べるのはonclickにJavascriptでチェック出来ますが、
そのあと動的に選んだ値をphpのsession変数に追加するのってどうしたら良いのでしょうか?
0436nobodyさん
2009/01/19(月) 00:03:08ID:???0437nobodyさん
2009/01/19(月) 00:11:48ID:jnDZLn2zすいません、えっとどう言ったら良いのか;
質問のニュアンスを伝えるためにわざと無茶苦茶に書くと、
<input type="submit" onclicke="check()" />
<script type="text/javascript">
function check(){
//checkコード
if(allchecked){
$SESSION['age']=document.getElementsById("age");
}
}
</script>
こんな風な意味合いのことをする方法を聞きたかったのです。
0438nobodyさん
2009/01/19(月) 00:16:55ID:???0439nobodyさん
2009/01/19(月) 00:21:05ID:jnDZLn2zあくまでニュアンスを伝えるために上記のような書き方をしているだけで、
サーバサイドphpとユーザサイドJavascriptの違いは分かってます。
ただphpではこういうチェックが出来ないのでどうしたものかと迷ったので。
0440nobodyさん
2009/01/19(月) 00:21:42ID:???0441nobodyさん
2009/01/19(月) 00:22:12ID:???0442nobodyさん
2009/01/19(月) 04:21:49ID:???よく意味がわからんが・・・
<form name="form1" method="post" action="hoge.php">
<input type="submit" onclick="return check();" />
名前:<input type="text" name="name" />
</form>
<script type="text/javascript">
function check(){
//checkコード
if (document.form1.name=='') {
alert('名前が入力されていません');
return(false);
}
return(true);
}
</script>
あとはhoge.phpでnameを受けとってセッション変数に放り込むなり好きにするヨロシ。
0443nobodyさん
2009/01/19(月) 04:44:39ID:???0444nobodyさん
2009/01/19(月) 17:58:38ID:???issetでもisSetでも書けるくさいなぁ(´・ω・`)
0445nobodyさん
2009/01/19(月) 20:15:28ID:???0446nobodyさん
2009/01/20(火) 00:26:44ID:???それはありえない
preg_replaceは正規表現の処理が入る分遅くなる
ついでにいうと、単純な置換ならstrstrよりstr_replaceの方が速い
0447445
2009/01/20(火) 00:28:42ID:???じゃあここのはウソってことか。。。
ttp://phpspot.org/blog/archives/2006/11/12php.html
0448nobodyさん
2009/01/20(火) 00:37:17ID:???0450nobodyさん
2009/01/20(火) 01:55:00ID:???str_replace is faster than preg_replace, but strtr is faster than str_replace by a factor of 4
PHPの勉強の前に、まず英語勉強しようぜ
0454nobodyさん
2009/01/20(火) 14:17:46ID:auDP4Xko0455nobodyさん
2009/01/20(火) 14:24:08ID:???意図がいまいちわからない。
あ、エスケープはしっかりしろよな。
0457nobodyさん
2009/01/20(火) 23:14:20ID:FkFXLWeKここを見ながら勉強中で、ひとつ前の
Step9・入力された値をPHPでチェックする
まではうまくいったんですが、
Step10・入力された値をJavaScriptでチェックする
が、うまくいきません。イントラネットとかいうのが関係してるんでしょうか。。
何度も確認したんですけど、警告ウインドウが出てきません
0458nobodyさん
2009/01/20(火) 23:21:44ID:???0459nobodyさん
2009/01/21(水) 03:11:36ID:???あとjavascript有効になっている?
0460nobodyさん
2009/01/21(水) 09:46:52ID:VkT7uFdTjavascriptは、セキュリティのところでいじればいいんですよね。
それでしたら有効になってます。
なにも入れないで計算すると
-------------------
+=0
前の画面へ戻る
-------------------
って出ます。IEから見るソースは
-------------------
<html>
<head>
<title>calc.php</title>
</head>
<body>
+=0
<br/>
<br/>
<a href="#"onclick="history.back();return false;">前の画面へ戻る</a>
</body>
</html>
------------------------------
です。
書いてるソースのほうは
http://php5.seesaa.net/category/3813207-1.html
にあるとおりだと思います。
0461nobodyさん
2009/01/21(水) 10:44:16ID:???最初に実行するプログラムはなに?
calc.htmlだよね?
そこからcalc.phpで処理してってことだけど、
form action とか大丈夫これどうり記述しているよね?
jsも読み込んでいるよね。
パスもあっているよね?
0462nobodyさん
2009/01/21(水) 13:51:32ID:ruw5pBd2<?
$line = "==名前==";
$line = ereg_replace("==(.*)==", $_REQUEST["\\1"], $line);
?>
上記スクリプトで $line を name="名前" のフォーム値に置換したい
のですができません。どうすれば置換できるでしょうか?
0463nobodyさん
2009/01/21(水) 14:09:33ID:???あとeregよりpreg
0464nobodyさん
2009/01/21(水) 14:58:58ID:VkT7uFdTcalc.htmlのソースは
---------------------------
<html>
<head>
<script type="text/javascript"src="calc.js"></script>
<title>calc.html</title>
</head>
<body>
<form name="form1"action="calc.php"method="post">
<input type="text"name="txtA"id="txtA">
<select name="selOpe"size=1>
<option value="+">+</option>
<option value="-">-</option>
<option value="*">*</option>
<option value="/">/</option>
</select>
<input type="text"name="txtB"id="txtB">=?
<br>
<input type="submit"value="計算">
<input type="reset"value="クリア">
</form>
</body>
</html>
-------------------------------------
です。パスがあっているかどうかは、どこを見るとわかりますか?
0466nobodyさん
2009/01/21(水) 15:27:54ID:???の中にはなにが入っている?
sample011までPHPは動いていたんだよね?
わからん。
ほんと。http://php5.seesaa.net/category/3813207-1.html
と同じことしているんでしょう?
calc.jsもsample012のフォルダの中にはいっているんでしょう?
ソースはコピペしてやっているんでしょう?
0467nobodyさん
2009/01/21(水) 16:23:54ID:VkT7uFdT>>466さん
コピペしなおしたらできるようになりました。
でもどこが悪かったのかわからに・・
0468nobodyさん
2009/01/21(水) 19:35:45ID:???なんか変な文字がどこかにはいってしまったか。
おれもコピペでそういうことになったことは
よくある。
見たとこミスはないので、あのソースをきちんと理解
して次進んでいいと思うよ
0469nobodyさん
2009/01/21(水) 21:43:57ID:VkT7uFdT先生ありがとう
0470nobodyさん
2009/01/21(水) 22:33:22ID:???以後もし動かったら再度コピペすることを望みます。
0471462
2009/01/22(木) 10:25:52ID:PnoeEoeZすみません、マニュアル見直しました。
ところで、
$line = "==名前==";
//$line = preg_replace("/==(.*)==/e", "$_REQUEST['$1']", $line);
$line = preg_replace("/==(.*)==/e", "rep('$1')", $line);
function rep ($text) { return $_REQUEST["$text"]; }
コメント行の置換が動作せずに下記エラーが発生するのですが、
いちいちrepのようなfunctionを用意しなきゃいけないのでしょうか?
Parse error: parse error, expecting `T_STRING' or `T_VARIABLE' or `T_NUM_STRING'
in /************/index.php on line 340
0472nobodyさん
2009/01/22(木) 10:36:31ID:???0473nobodyさん
2009/01/22(木) 12:54:40ID:???$line= preg_replace("/==(\S*)==/e", 'sprintf("<input type=\"text\" name=\"$1\" value=\"%s\" />", isset($_REQUEST["$1"]) ? $_REQUEST["$1"] : "")', $line);
こうやりたいのか?
キー文字は==全角==じゃなくて==半角==がいいと思うが
0474473
2009/01/22(木) 13:16:38ID:???0475462
2009/01/22(木) 13:23:02ID:PnoeEoeZすいません、解決しました。バカみたい・・・
$line = preg_replace("/==(.*)==/e", 'sprintf("%s", $_REQUEST["$1"])', $line);
0476nobodyさん
2009/01/23(金) 05:27:52ID:L5uKYwrL17章のサンプルアプリケーションが動かない。
これって仕様かな?
おれはcent os5でやったんだが、画面真白で。
linuxで誰かやってくれませんか?すいませんが
お願いします。ソースは一応レンタルサーバーと
ホームページ上に貼り付けているんで、
ソースダウンロードできないんだ。
http://gichioka.web.fc2.com/source.zip←ソースをダウンロード
http://www.krautgrrl.com/learningphp/index.php/site/C17/←データベース
とかもろもろ貼ってあります。
お手数ですが、よろしくお願いします
0477nobodyさん
2009/01/23(金) 05:29:33ID:L5uKYwrLほんとはphpの本のスレに行きたかったんだけどなくなってしまった
みたいで。
すいませんが、よろしくお願いします
0478nobodyさん
2009/01/23(金) 05:34:48ID:L5uKYwrLサンプルコードありました。
昔はなかったのに
http://www.oreilly.co.jp/books/9784873113654/
ここです。
0479nobodyさん
2009/01/23(金) 07:37:08ID:???読んで理解できたためしがない
0481nobodyさん
2009/01/23(金) 16:01:37ID:???session_start();
$anc = array('anc1' => 'one', 'anc2' => 'two', 'anc3' => 'three'); $html = '<html><body><form action="">';
switch ($_REQUEST['m']) {
case '1':
$html .= 'confirm<br />';
foreach ($anc as $k => $v) { $_SESSION[$k] = $_REQUEST[$k]; if ($_REQUEST[$k]) { $html .= $v . '=checked! '; } }
$html .= '<br /><input type="hidden" name="m" value="2"><input type="submit" value="go!">';
break;
case '2':
0482nobodyさん
2009/01/23(金) 16:04:18ID:???if ($fp =@ fopen('anc.dat', 'a')) { fputs($fp, date("Y/m/d H:i:s ") . ' ' . $param . ' ' . $_SERVER["REMOTE_ADDR"] . "\n"); fclose($fp); } $html .= 'thank you!';
break;
default:
$html .= 'question<br />'; foreach ($anc as $k => $v) { $html .= '<input type="checkbox" name="' . $k . '" value="1">' . $v . ' '; }
0483nobodyさん
2009/01/23(金) 16:08:55ID:???}
$html .= '</form></body></html>'; echo $html; exit;
?>
パソコンが今使えないので携帯で消化してしまってごめんなさい
このプログラムのoneやtwoを別のファイルに記録したいんですが
どうすればよいでしょうか?
すごい初心者なので、良ければ具体的に教えていただければ嬉しいです
スレチや失礼あればごめんなさい
0484nobodyさん
2009/01/23(金) 16:11:58ID:Jr51+scJテンパってます…
お待ちしてます
0485nobodyさん
2009/01/23(金) 16:34:47ID:???「oneやtwoを別のファイルに記録したいんですが 」
日本語か?それ。
0486nobodyさん
2009/01/23(金) 16:40:52ID:Jr51+scJやはり分かりにくかったですか
questionの解答がoneやtwoになっていて
その解答を記録したいんです
解答した日付時刻などはanc.datに記録されますが
なにを答えたかが記録出来てないと思うのですが
0487nobodyさん
2009/01/23(金) 16:58:18ID:???なんかエラー出てると思うけどねぇ。
エラーを確認するのが解決への近道だよ。
たぶん、原因は↓かと。
$param .= $v . '=checked! ';
$param .= "{$v}=checked! ";
に変えてみたらどうかな?
0488nobodyさん
2009/01/23(金) 17:08:51ID:Jr51+scJあれ
paramじゃなくてそこはhtmlにではないですかね
僕の方では一応エラーは出てません
■ このスレッドは過去ログ倉庫に格納されています