【PHP】下らねぇ質問はID出して書き込みやがれ 110
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2011/08/30(火) 17:23:31.78ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 109
http://hibari.2ch.net/test/read.cgi/php/1311803617/
◆質問用テンプレ
【OS名】CentOS
【PHPのバージョン】5.3
【連携ソフトウェア】MySQL ImageMagick
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0390nobodyさん
2011/09/09(金) 21:17:21.02ID:???>オプションのmode 引数が COUNT_RECURSIVE (または 1) にセットされた場合、
>count() は再帰的に配列をカウントします。
>これは多次元配列の全ての要素をカウントするといった場合に特に有効です。
> count() は無限の再帰を検出しません。
0391nobodyさん
2011/09/09(金) 21:22:30.23ID:g+bZZ5lKCOUNT_RECURSIVE を使うと正しい結果が出ないので、使えないのです
例えば>>389の配列だと5と出て欲しいのですが、配列自体も含めてしまうので6となってしまう
0392nobodyさん
2011/09/09(金) 21:58:34.73ID:???0393361
2011/09/09(金) 22:48:31.16ID:ANnoOIHPやりました!
htdocに、upload_image.phpと、htmlを、いれました
それを、ブラウザで、開けました
ありがとうございます!
前より理解できました
分かったこと
・htdocに、置くと、アップロードしたことになること
・ブラウザでhtmlファイルの、ボタンを押すと、phpファイルが、動くこと
これから、本を読み進めていきます
03941/3
2011/09/09(金) 22:50:13.91ID:???function count_array($array)
{
$i = 0;
$j = 0;
$keys = array_keys($array);
foreach ($keys as $key)
{
if (is_array($array[$key]))
{
$j += count_array($array[$key]);
}
else
03952/3
2011/09/09(金) 22:51:30.09ID:???$j++;
}
$i++;
}
return $j;
}
$array = array(
'hoge' => 'aaaa',
'bbbb',
'cccc' => array(
'cccc',
03963/3
2011/09/09(金) 22:52:46.87ID:???array(
'eeee',
'piyo' =>6,
'gggg'
),
),
'hhhh'
);
$count = count_array($array);
echo $count . "\n";
?>
0397nobodyさん
2011/09/09(金) 22:54:47.11ID:???0398361
2011/09/09(金) 23:24:41.44ID:ANnoOIHPボタンなどで、表示されます。
そのボタンを押して、phpファイルを動かそうとすると、
文字だけの、ソースコードの画面になってしまいます。
どうしたら、phpファイルを、出力できるでしょうか?
0400nobodyさん
2011/09/09(金) 23:41:36.94ID:???多分、間違えてるな。
htdocにupload.htmlを入れて、xamppのApache起動させといて
http://localhost/upload.htmlにアクセスしろ
Apacheは簡単に言うとhttp://localhost/のurlを使えるようにする。
http://localhost/でないとwebプログラムのphp、cgiが動かない。
君はブラウザのurlの欄にC:\xampp\htdocs\ybhujnindex.html
って表示されてるんじゃない?
0401nobodyさん
2011/09/09(金) 23:43:07.73ID:???C:\xampp\htdocs\ybhujnindex.html
でなくC:\xampp\htdocs\upload.htmlってブラウザのurl欄に
表示されてるんじゃない?
0402nobodyさん
2011/09/09(金) 23:54:31.88ID:z7az+EcJ1 <html>
2 <head>
3 <title>選択リストをデータベースから生成する</title>
4 </head>
5 <body>
6 <?php
7 // 接続設定(サーバ/データベース/ユーザ/パスワード)
8 $sv = "localhost";
9 $dbname = "testdb";
10 $user = "root";
11 //$pass = "********";
12 $pass = "";
13
14 // 文字コード
15 //$enc_disp = "EUC-JP";
16 //$enc_db = "EUC-JP";
17 $enc_disp = "UTF-8";
18 $enc_db = "UTF-8";
19
20 // データの文字コードを変換する関数
21 function cnv_enc($string, $to, $from) {
22 // 文字コードを変換する
23 $det_enc = mb_detect_encoding($string, $from . ", " . $to);
24 // if ($det_enc and $det_enc != $to) {
25 if ($det_enc != $to) {
26 return mb_convert_encoding($string, $to, $det_enc);
27 }
28 else {
29 return $string;
30 }
31 }
0403nobodyさん
2011/09/09(金) 23:56:27.89ID:z7az+EcJ34 $conn = mysql_connect($sv, $user, $pass) or die("接続エラー");
35 mysql_select_db($dbname) or die("接続エラー");
36
37 // データを取り出す
38 $sql = "SELECT id, nam FROM prod ORDER BY id";
39 $res = mysql_query($sql, $conn) or die("データ抽出エラー");
40
41 // 取り出したデータを表示する
42 echo "<select name=\"menu1\">";
43 while ($row = mysql_fetch_array($res, MYSQL_ASSOC)) {
44 echo "<option value=\"".$row["id"]."\">".
45 // cnv_enc($row["nam"], $enc_disp, $enc_db)."</option>";
46 cnv_enc($row["nam"], "UTF-8", "UTF-8")."</option>";
47 }
48 echo "</select>";
49
50 // 接続を解除する
51 mysql_close($conn);
52
53 ?>
54 </body>
55 </html>
24行目のcnv_encのandは間違いですよね?
コメントアウトして自分なりに直してみましたが、それでも結果は変わりません。
アドバイスをお願いします。
0404nobodyさん
2011/09/10(土) 00:39:44.72ID:???23 $det_enc = mb_detect_encoding($string, $from . ", " . $to);
って
23 $det_enc = mb_detect_encoding($string, $from, $to);
じゃないの?
0405nobodyさん
2011/09/10(土) 00:50:45.35ID:???0406nobodyさん
2011/09/10(土) 01:16:09.21ID:???0407nobodyさん
2011/09/10(土) 01:33:26.75ID:???dです。
ちなみにこのように書き換えて使うことにしました。動作確認おkのようです。
function count_array($array)
{
$count = 0;
foreach ($array as $elem){
if (is_array($elem)){
$count += count_array($elem);
}
else{
$count++;
}
}
return $count;
}
0408403
2011/09/10(土) 01:37:07.17ID:dFxJuFkmああ、確かに訳の分からない連結してますね。
そこを直しましたけど変わりないですね。
>>406
4,000円もしたんですよ?
まず、ここ
24 if ($det_enc and $det_enc != $to) {
が正しいかどうか答えてくださいませんか?
自分は生まれてこの方こんなコード見たことないです。
まさか、($det_enc and $det_enc)がTRUEで$toがFALSEだったら真、ということは・・・ないですね。
0409nobodyさん
2011/09/10(土) 02:23:06.02ID:???演算子の優先順位
ttp://www.php.net/manual/ja/language.operators.precedence.php
0411nobodyさん
2011/09/10(土) 03:15:30.25ID:???おまいらいい年したオッサンなんだから、php初心者〜上級者
小学生〜中年まで対応したphpの解説したwebサイト作ってくれよ。
0413nobodyさん
2011/09/10(土) 05:18:27.95ID:???0414361
2011/09/10(土) 07:15:55.24ID:b1uhXqiv>>401
ありがとう!
そのようにしたら、
できた!
ブラウザのURL欄は、
file:///Applications/XAMPP/xamppfiles/htdocs/upload.html この表示の時、できなかった
http://localhost/upload_image.php この表示の時、できた
サンクス
XAMPP,apach,ローカルホストは、ただで、
webページ貸してくれるけど、いままで、webページ借りるのに、金払ってたから、悪い
あと、localhostに表示されると、すごい文字化けする。どこをなおしたらよいでしょうか?
0416361
2011/09/10(土) 07:54:39.58ID:b1uhXqiv0417361
2011/09/10(土) 08:08:13.23ID:b1uhXqivShift-JISにしたら、なおりました。
0418nobodyさん
2011/09/10(土) 08:26:08.57ID:9mHd+BwL外部の記憶領域(ファイル、セッション、DB)から、
変数を取り出したり書き込んだりする時だけでいいんですよね?
例えば同じファイルに書いて、
<?php
$a="こんにちは";
echo mb_convert_encoding($a,'UTF-8','auto');
?>
なんてのは無意味ですよね?
ちなみに上のスクリプトの動作は、SJISで保存してようが、UTF-8で保存してようが、
文字化けせずにUTF-8でこんにちはを出力してくれます。
0419nobodyさん
2011/09/10(土) 09:44:10.77ID:???0420nobodyさん
2011/09/10(土) 10:01:06.00ID:???データベースに接続する処理のあとにmysql_query("SET NAMES UTF8");
をいれてみて
0421nobodyさん
2011/09/10(土) 10:05:27.98ID:???解決したかもしれないけど
$det_enc and $det_enc != $toは
$det_encが真かつ$det_encがtoでないって意味だと
0422403
2011/09/10(土) 10:28:31.95ID:dFxJuFkmまだ未解決です。
>>420-421
mysql_query("SET NAMES UTF8");
を入れてみると、最初のは
PHP?泣?潟??????
と表示されるようになりました。
この?は、黒い菱形で"?"を囲んだ特殊な文字です。
同じ変数をandで比較して存在してるかどうか調べているんですね。
それでいて後半部分は$det_encが$toと一致しない、と…
やはり正しく表示されませんね…。
どうすればいいでしょうか?
0423403
2011/09/10(土) 10:36:20.45ID:dFxJuFkmあーっ!ブラウザ(上でIEと書きましたがFireFoxでした…)の文字コードを"UTF-8"にしたら
正しく日本語で"PHPサンプル集"と表示されました!!!
ありがとうございます!
ただ、F5を押すと自動判別されてまた"PHP?泣?潟??????"に戻ります…。
自動判別を解除すると、もちろん"PHPサンプル集"と表示されるんですけど、
一般の方はきっと自動判別に設定していますよね…。
なぜ自動判別だとEUC-JPになってしまうのでしょうか?
何を基準にして自動判別しているのでしょうか?
0424403
2011/09/10(土) 10:46:30.68ID:dFxJuFkm追記です。
文字コードを"UTF-8"にすると"PHPサンプル集"と表示されますけど、
今度はタイトルが文字化けします。
文字コードを"自動判別"にすると"PHP?泣?潟??????"と表示されますけど、
タイトルは「選択リストをデータベースから生成する」と正しく表示されます。
でも、PHPコード内のタイトルのところで文字コードなんて指定していないですよね?
0425nobodyさん
2011/09/10(土) 10:51:56.43ID:???根本的に、文字コードを何で出力すればよいのか設計があやふやではないかい?
少なくとも、設計の時点で、
・データベース
・ソースコード
・HTML出力
を何の文字コードで管理すべきかは決めておかないと、どこで何の文字コードに変換すべきかわからなくならないか。
0426nobodyさん
2011/09/10(土) 10:52:19.98ID:???<html>〜<body>間に↓入れてる?
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
0427nobodyさん
2011/09/10(土) 10:53:42.43ID:???http://hain.jp/index.php/tech-j/2007/02/13/p125
0428403
2011/09/10(土) 10:56:47.67ID:dFxJuFkmそのmetaタグというのを具体的に教えていただけませんか?
PHP始めてまだ一週間程度の自分にそれを言われても困ります。
というか、この本スーパーサンプルがそれについて言及するべきだと思います。
日本語でデータベースを扱うのはこの本ではこれが最初です。
まだ右の左も分からない人間でもほぼそのまま実行できるサンプル、
っていうのが売りのはずの本なんですけどまったくのデタラメですね。
0429nobodyさん
2011/09/10(土) 11:06:55.05ID:???だから捨てろっていってんのに、困りますって言われてもこっちも困りますねー。
どっちかっていうと、分かってる人が思い出すのに使えるかなっていうところ。
いわゆるセキュリティとか丸ごと無視してるし。そういうの分かっている人じゃないと。
*初心者*がそういう引っかかるところを網羅してちゃんと使える本は無いんじゃないかな。
分厚くなりそうでちゃんと書くとかえって読みづらいし。
0430403
2011/09/10(土) 11:08:15.13ID:dFxJuFkm自動判別で"UTF-8"が選択されるようになりました。
が、しかし、タイトルは文字化けしたままです。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" > ←(2)
<title>選択リストをデータベースから生成する</title>
</head>
<body>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" > ←(1)
<?php
// 接続設定(サーバ/データベース/ユーザ/パスワード)
挿入した箇所は、まず(1)に挿入して自動判別で"UTF-8"が選択されることを確認し、
次にタイトルも正常に表示されないだろうかと(2)に挿入してみてダメでした。
タイトルもUTF-8にする方法というのはありますか?
0431nobodyさん
2011/09/10(土) 11:11:49.26ID:???0432403
2011/09/10(土) 11:16:33.70ID:dFxJuFkmちなみに>>428を書く前に
上で教えてもらったiconvを使ってソースコード自体をUTF-8に変換しました。
ブラウザで開こうとするとダウンロードするかgeditで開くか訊かれて
geditで開くとブランクで何も表示されませんでした。
多分、テキストということすら認識されていないと思います。
0433nobodyさん
2011/09/10(土) 11:19:38.94ID:???(1)は意味ない
(2)でうまくいかないのはよくわからない
EUC-jpになるならEUC-jpに統一してみては?
0434403
2011/09/10(土) 11:24:59.05ID:dFxJuFkmありがとうございます。
なるほど、ということはデータベースからすべてEUC-JP、ということですね?
今日は他にもやることがあるので、後で試してまたレスします。
0435nobodyさん
2011/09/10(土) 11:25:38.67ID:???titelのところに書いてある文字(ソース自体のコード)
が違うんだって
iconvはどうやったかよく分からないけどたぶん駄目だから
文字コード変えて保存できるエディタ使うべき。
0436nobodyさん
2011/09/10(土) 11:26:00.67ID:???0437nobodyさん
2011/09/10(土) 11:35:16.90ID:???0438403
2011/09/10(土) 11:37:12.01ID:dFxJuFkmグッドジョブ!!やっっっっと両方とも正常に表示されました!!!(嬉し泣き
geditで別名保存→"現在のロケール(UTF-8)"を選択してブラウザで実行しました。
こんなに大変だとは思ってもみませんでした。
>>427さんのサイトを少し読んでみましたが、かなり深そうですね。
PHPの文字化けについて勉強してみようと思います。
答えてくださった皆さん、ありがとうございました!
0439nobodyさん
2011/09/10(土) 13:32:51.87ID:???0440nobodyさん
2011/09/10(土) 16:22:23.64ID:???不用意に使うのもいたずらに遅くなる
0441nobodyさん
2011/09/10(土) 16:52:49.90ID:???0443nobodyさん
2011/09/10(土) 18:02:55.50ID:8J+b/p280445nobodyさん
2011/09/10(土) 18:33:26.13ID:b1uhXqivmysqlターミナルを使ってMySQLサーバーにアクセスしたいです
どのようにするとよいでしょうか?
環境 mac
XAMPPを、インストールして、MySQLの動作を確認しました。
0446nobodyさん
2011/09/10(土) 18:38:51.61ID:???XAMPPスレで聞け
http://hibari.2ch.net/test/read.cgi/mysv/1128262593/l50
0447nobodyさん
2011/09/10(土) 19:00:10.00ID:???0448nobodyさん
2011/09/10(土) 19:17:37.88ID:???0449nobodyさん
2011/09/10(土) 19:25:22.80ID:8f05fZx5のstageの後の:て何を表しているんでしょうか?
0450nobodyさん
2011/09/10(土) 19:31:39.79ID:???0453nobodyさん
2011/09/10(土) 19:57:58.86ID:???ありがとうございます。勘違いをしていました。
あと一つ質問があります。
$_SERVER変数の中身で
["QUERY_STRING"]=>
string(39) "type=book&seq=4097360221&seq_review=320"
["REQUEST_URI"]=>
string(36) "/book/feed/4097360221/320?stage=ques"
["SCRIPT_NAME"]=>
string(25) "/book/feed/4097360221/320"
というものがあります。
これらからどうにかして
/book/feed/4097360221を抜き出したいです。
320の部分は変数で渡していて定数ではないので320を消す
とかでは無理そうです。どうすればよいでしょうか?
0454nobodyさん
2011/09/10(土) 19:59:00.23ID:8f05fZx5/4097360221の部分も変数で渡していて
文字数などが変化します。
0455nobodyさん
2011/09/10(土) 20:05:54.75ID:???最後の/(スラッシュ)以降を削除するという考えであればこれでいけんじゃね?
preg_replace('/\/[^\/]*/', '', $_SERVER["SCRIPT_NAME"]);
0456nobodyさん
2011/09/10(土) 20:06:23.24ID:???http://toki.2ch.net/test/read.cgi/wildplus/1315628224/
0457nobodyさん
2011/09/10(土) 20:07:31.42ID:???間違えた
preg_replace('/\/[^\/]*$/', '', $_SERVER["SCRIPT_NAME"]);
0458nobodyさん
2011/09/10(土) 22:20:49.07ID:8f05fZx5ありがとうございます!
おかげさまでできました!
0459nobodyさん
2011/09/10(土) 23:49:31.25ID:???0460nobodyさん
2011/09/11(日) 00:18:05.37ID:5ZyXBnROあるのですか?
0462nobodyさん
2011/09/11(日) 04:09:45.23ID:5ZyXBnRO判定するのですか? ''というのは$lang[$i]の値が数値と文字列の
両方を表しているのですか?
0463nobodyさん
2011/09/11(日) 04:26:41.01ID:???$lang = array ('a', 1, 'abc', 123, '');
$n = count($lang);
for ($i = 0; $i < $n; $i++)
{
if ($lang[$i] == '')
{
echo 'nothing' . "\n";
}
else
{
echo $lang[$i] . "\n";
}
}
?>
この場合、$lang[$i] に、値(文字列や数値)が入っていないか判定し、値が入っていなければ 'nothing' を表示する。
$lang[$i] に値が入っている場合は、その値を表示する。
0464nobodyさん
2011/09/11(日) 07:14:32.87ID:???$lang[$i]の中身が文字列の場合、右辺の文字列''(この場合は空文字列)と比較する。
$lang[$i]の中身が数値だった場合、右辺の文字列''が数値に型変換されて 0 と評価されてから比較される。
(数値と文字列の比較では文字列が数値に型変換される。例:'123'→123、'ABC'→0)
よって、if($lang[$i] == '') は、$lang[$i] の中身がが空文字列''であるか、数値 0 の場合に真になる。
0465nobodyさん
2011/09/11(日) 07:41:17.11ID:???0466nobodyさん
2011/09/11(日) 07:57:18.58ID:???strcmpはあくまで「文字列」比較だから==や===と同等ではない。
strcmpの引数に数値(int型等)を代入すると文字列型に変換して比較する。
よって比較する変数の型が文字列でなくてもtrueとなることもある。
==では逆に文字列の方が数値(intだったりfloatだったり)に型変換して比較する。
===では型キャストせず、型も同一かどうかを検査する。
用途によって使い分ければいい。
0467nobodyさん
2011/09/11(日) 08:16:13.63ID:???0468nobodyさん
2011/09/11(日) 08:29:38.28ID:???if($a=='')でいいじゃん。
ばかみたい。
0470nobodyさん
2011/09/11(日) 08:50:06.12ID:???0と""は同じじゃねぇだろ。だれが考えても。
0471nobodyさん
2011/09/11(日) 08:55:17.87ID:???0472nobodyさん
2011/09/11(日) 08:59:40.77ID:???を見ればわかるように、""(空文字列)と==で比較してtrueになるのは、
FALSE、0、NULL、""(空文字列)の4種類もある。
===で比較すればtrueになるのは ""(空文字列)だけ。
0475nobodyさん
2011/09/11(日) 09:06:04.27ID:???0と""は同じじゃねぇ。
0476nobodyさん
2011/09/11(日) 09:09:13.69ID:???知らずに==で比較してると意外な落とし穴があるかもだけど、
大抵の場合は比較する変数にどんな値が入り得るか自分でわかってるだろうからあまり問題ない。
0477nobodyさん
2011/09/11(日) 09:13:16.26ID:???0478nobodyさん
2011/09/11(日) 09:22:39.76ID:???0479nobodyさん
2011/09/11(日) 11:29:38.65ID:???クソじゃん
0480nobodyさん
2011/09/11(日) 12:28:56.02ID:???こういうのって結局、変数に型がないから
演算子の方でがんばろうかってなっちゃって
複雑になってるんだよな。
型があればこんなに演算子は必要なくなるのにね。
0483nobodyさん
2011/09/11(日) 12:53:54.38ID:???a) if ( $a === '' )
b) if ( '' === $a )
a) と b) の違いを教えてください。
0484nobodyさん
2011/09/11(日) 13:57:30.64ID:???このスレでID出すにはどうすればいいのでしょうか。
専ブラはBathyScaheです
0487nobodyさん
2011/09/11(日) 14:25:50.96ID:???多重継承こそクソだと思うけどな
まぁPHPはそんなクソなものでも実装しかねないのが面白いところ
将来的にもしかしたら実装されるかもな
0489nobodyさん
2011/09/11(日) 14:59:55.23ID:???人を無知呼ばわりする前に
コミュニティに参加しろよ
■ このスレッドは過去ログ倉庫に格納されています