【PHP】くだらねぇ質問はここに書き込みやがれpart7
■ このスレッドは過去ログ倉庫に格納されています
0001966
2005/07/12(火) 01:47:09ID:qOoYFCn7ここなら本スレで回答のないお前の下らない質問に回答があるかも知れません。
次スレは>>970あたりが建てて下さい
・過去スレ
【PHP】くだらねぇ質問はここに書き込みやがれ
http://pc5.2ch.net/test/read.cgi/php/1099322141/
【PHP】くだらねぇ質問はここに書き込みやがれpart2
http://pc5.2ch.net/test/read.cgi/php/1105218084/
【PHP】くだらねぇ質問はここに書き込みやがれpart3
http://pc5.2ch.net/test/read.cgi/php/1107780435/
【PHP】くだらねぇ質問はここに書き込みやがれpart4
http://pc8.2ch.net/test/read.cgi/php/1110697712/
【PHP】くだらねぇ質問はここに書き込みやがれpart5
http://pc8.2ch.net/test/read.cgi/php/1114787573/
【PHP】くだらねぇ質問はここに書き込みやがれpart6
http://pc8.2ch.net/test/read.cgi/php/1117945031/
立ってなかったんで>>970に近かった自分が勝手に立てちゃいました。
0683nobodyさん
2005/07/31(日) 10:49:49ID:???と入れて送信すると
\"test\",\"hoge\"となり、"に\が付くのですが、
どうしたら付かないように出来るのでしょうか?
0685nobodyさん
2005/07/31(日) 11:16:20ID:???これを、$name = hoge にしたいのですが、どうやって処理するのが効率的な抽出方法で
しょうか?
0687nobodyさん
2005/07/31(日) 12:12:36ID:???自分で書いてみたけど効率的でないっていうことなん?
効率的の意味(実行速度 or コード量 or 使用メモリ量 etc)もよく判らない。
あと、
$a['name'][0] = hoge
$a['name'][1] = hoge1
とあった場合はどうすればいいの?
0688nobodyさん
2005/07/31(日) 15:22:06ID:UMC+uCHN0690nobodyさん
2005/07/31(日) 17:19:30ID:???php4.4.0が出ているのに今気づいたのですが、この話題はどこですればいいでしょうか?
【PHP】くだらねぇ質問はここに書き込みやがれpart7
http://pc8.2ch.net/test/read.cgi/php/1121100429/
【php】part29【php】
http://pc8.2ch.net/test/read.cgi/php/1120611474/
ここの2つには無いようです。
0691nobodyさん
2005/07/31(日) 17:28:50ID:???新ver.キター ウヒョー ノマノマ(ry なら、フジモト@PHPマスターを讃えるスレ でフッチー乙〜 ってのがいいかと。
0692690
2005/07/31(日) 17:40:29ID:???レスありがとうございます。
フジモト@PHPマスターを讃えるスレ
http://pc8.2ch.net/test/read.cgi/php/1029342427/
このスレですね。
7/11以降の書き込み3、、、
googleでコマメに検索してみる事にします。
ありがとうございました。
0693nobodyさん
2005/07/31(日) 18:22:02ID:???0694nobodyさん
2005/07/31(日) 20:00:56ID:???初心者ってリファレンス買うと失敗しますよねw?
0695nobodyさん
2005/07/31(日) 20:17:47ID:tE006mzPhttp://www.php.co.jp
0696nobodyさん
2005/07/31(日) 21:33:26ID:???http://〜〜/xxx.php?2ch
といった感じで値だけで渡した場合、どうやって受け取れば良いでしょうか?
0697nobodyさん
2005/07/31(日) 21:45:33ID:???なページで確かめれ。
0698nobodyさん
2005/07/31(日) 22:21:22ID:WZp9m1Ky0699nobodyさん
2005/07/31(日) 22:26:23ID:???0702nobodyさん
2005/07/31(日) 23:30:19ID:???って飛んできたら
<img src="./hogehoge.png" alt="hogehoge" width="88" height="31" />
ってな風に、画像のwidth , height を取得してタグを適宜変換してくれるようにしたいのだが、どうしたものか全くわからん。
0703nobodyさん
2005/07/31(日) 23:52:01ID:???0705nobodyさん
2005/07/31(日) 23:59:31ID:???たぶんこんな感じのことかな?
<?php
$src = './hogehoge.png';
$alt = 'hogehoge';
list($width, $height) = getImageSize($src);
?>
<img src="<?=$src?>" alt="<?=$alt?>" width="<?=$width?>" height="<?=$height?>" />
はずしてたらスマソ
0707nobodyさん
2005/08/01(月) 01:47:04ID:???0709nobodyさん
2005/08/01(月) 02:39:23ID:???これをやると処理が非常に簡単になるんですが・・・
スパーグローバルを勝手にいじるってことの良い悪いがわかりません。
0712nobodyさん
2005/08/01(月) 04:15:02ID:???0714nobodyさん
2005/08/01(月) 06:21:03ID:???この時点で結構アイタタなソースのような希ガス。
根本的に作りが変なのでは。。。
0715nobodyさん
2005/08/01(月) 06:50:03ID:KP4xPzSt0716nobodyさん
2005/08/01(月) 07:43:23ID:???list( , , , $size) = getImageSize($src);
?>
<img src="<?=$src?>" alt="<?=$alt?>" <?=$size?> />
0719nobodyさん
2005/08/01(月) 10:24:47ID:???━━━━━━━━━━━━━━━俺様用しおり━━━━━━━━━━━━━━━
0720nobodyさん
2005/08/01(月) 11:06:43ID:???0721nobodyさん
2005/08/01(月) 13:19:35ID:???誰か文字化けしないchm作って
くれないか
0722nobodyさん
2005/08/01(月) 13:23:31ID:???ここを参考に自分で汁
ttp://apollo.u-gakugei.ac.jp/~sunaoka/misc/php_manual_ja/
0723nobodyさん
2005/08/01(月) 13:46:58ID:???0724nobodyさん
2005/08/01(月) 13:51:13ID:???画角から自分で計算汁
0725723
2005/08/01(月) 14:05:43ID:???やはり自分でやるしかなさそうですね。
文字列はいろいろ変わるのでその都度自動計算させる必要があるのですが、
計算の仕方に今ひとつ自信がありません。
imagettftextを使っているのですが、
単純に「全角の横幅=指定したサイズ」「半角=全角の半分」「文字間隔=1px」と考えていいのでしょうか?
フォントによっても変わりそうだし、どうしたものか・・・。
0727nobodyさん
2005/08/01(月) 15:23:45ID:moKfjlj6変数周りは確認しましたが$の付け忘れや$のみなどはありません。
何が原因なのでしょうか?(linux+PHP 5.0.4(CLI)使用)
Parse error: parse error, unexpected $ in xxx.php on line 110
Errors parsing xxx.php
なお110行目はEOFです。
108: ?>
109: [改行のみ]
110: [EOF]
0729727
2005/08/01(月) 16:30:01ID:???0731nobodyさん
2005/08/01(月) 18:32:41ID:???「変なこと」か?ならば何故仕様上
書き換えできないものにしていない>PHP
いや俺も個人的にはやらないけど、書き換わってる可能性も
含めて他人のコードは読んでるよ。実際結構書ける人でも
そういうコードもあるし。
0733nobodyさん
2005/08/01(月) 18:39:01ID:???が成り立つならこの世の中には変なモノは一切存在しえないよ
0734nobodyさん
2005/08/01(月) 19:00:37ID:???調べる方法があったように記憶しているのですが
思ったのですが、どうすればいいんでしょうか?
0735nobodyさん
2005/08/01(月) 19:07:49ID:???$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)){
大抵の場合、ここ(mysql_fetch_arrayのループ内)で、$row['hage']という形で値を取り出しますが
mysql_fetch_arrayのループより、後ろでこの値を使いたい場合はどうしたらよいのでしょうか?
$atode['a'] = $row['a'];
$atode['b'] = $row['b'];
$atode['c'] = $row['c'];
みたいにループ内で別の配列に入れておいて
}
ループを出てから
$atode['a'] 、$atode['b']、$atode['c']を使えば良いみたいですが、配列を添字を保ったまま別の配列に入れてしまう方法(いちいち配列の数の分書かなくても)方法ってあるのでしょうか?
0736nobodyさん
2005/08/01(月) 19:13:08ID:???あ、そういうのやっちゃってました。
if(!$_GET['mode']){$_GET['mode]='main';}とかって。
逝けないことだったんですか。
$_GET['mode']でcase文使って分岐させるのに、初期化の意味も込めて上記のように書いてたんですが。
0737nobodyさん
2005/08/01(月) 19:18:28ID:???全くゼロの状態でクッキーの可否を確認する方法は無いような気がする。
チェックしたいページの前にクッキーを食わせるダミーHTMLを置いて本命ページで食ってるかチェックするとかはどう?
JavaScript使えるならwindow.navigator.cookieEnabledでチェックできるみたいだけど(ブラウザの制限不明)。
0738nobodyさん
2005/08/01(月) 19:35:16ID:???1レコードだけなら
ループ内で $atode = $row;
ループ外で $atode['a'];
全レコードなら
ループ内で $atode[] = $row;
ループ外で $atode[レコード��]['a'];
でも、ループ外でレコードの内容が必要なケースってなんなんだろう。
ループ内で処理できんのかのぉ。
0740nobodyさん
2005/08/01(月) 19:54:11ID:IMj74JwV>全くゼロの状態でクッキーの可否を確認する方法は無いような気がする。
そうですか。Javascriptと勘違いしてたかも。
>チェックしたいページの前にクッキーを食わせるダミーHTMLを置いて本命ページで食ってるかチェックするとかはどう?
Javascriptは使わないポリシーなので検討してみます。
蟻10
0741nobodyさん
2005/08/01(月) 19:59:59ID:???ソースのあちらこちらで変更していないであれば、いいんでないかい。
漏れも含めて多分、グローバル変数である$_GETを「あちらこちら」で
書き換えられるとトラブル時に追いかけづらいから嫌悪感があるんだろうと思う。
個人的には$_GET等のスーパーグローバル変数は参照専用のほうが心理的にはありがたいんだけどね。
ちなみにその例であれば
switch (isset($_GET['mode']) ? $_GET['mode'] : 'main') {
case 'main':
//main または省略時の処理
}
でいいのではないかと。
0743nobodyさん
2005/08/01(月) 20:13:31ID:???function serch ($foo) {
foreach ($foo as $key1 => $key2) {
if (! is_array($foo[$key1])) {
$foo[$key1] = htmlspecialchars(mb_convert_encoding($key2,"EUC-JP","UTF-8"));
continue ;
}
else {
foreach ($key2 as $key3 => $key4) {
if (! is_array($foo[$key1][$key3])) {
$foo[$key1][$key3] = htmlspecialchars(mb_convert_encoding($key4,"EUC-JP","UTF-8"));
continue ;
}
else {
foreach ($key4 as $key5 => $key6) {
$foo[$key1][$key3][$key5] = htmlspecialchars(mb_convert_encoding($key6,"EUC-JP","UTF-8"));
}
}
}
}
}
return $foo;
}
0745nobodyさん
2005/08/01(月) 20:52:46ID:cnoIwIPsテストしてないけどリカーシブコールを使えばいいような希ガス。
元のコードをざっとしか見ていないんで間違っていたらスマソ。
function serch ($foo) {
foreach ($foo as $key1 => $key2) {
if (! is_array($foo[$key1])) {
$foo[$key1] = htmlspecialchars(mb_convert_encoding($key2,"EUC-JP","UTF-8"));
} else {
$foo[$key1] = serch($key2);
}
}
return $foo;
}
0746nobodyさん
2005/08/01(月) 22:20:03ID:???ありがとうございます。まさに知りたい事はそれでした。
いちいち書かなくても添字(キー)がちゃんと渡されるんですね。いままでなんて面倒な事をしてたんだorz
今回必要だったのは1レコードしかヒットし得ないクエリだったのですが、複数ヒットした場合の例も試してみました。
ループ内で $atode[] = $row;
ループ外で $atode[レコード�]['a'];
この場合、レコード�のところには、ループの回数(もちろん0から)が入る、ということで良い訳ですよね?(一応動作させてみましたけど念のため聞く。)
>ループ外でレコードの内容が必要なケースってなんなんだろう。
ループの前後にテーブルやリストタグを書くのがいやで、すっきりと書きたいと思ってた次第です。ただそれだけの事なんですが。
>>739
ループ閉じた後はダメじゃないですか?
>>741
自分でも解らなくなるので、もちろん最小限にしてます。値が無いときに初期値を与えるとか、その程度です。
>>744
そうそう。そんな感じです。エラーはエラー、値がないと言うのは、想定内のことなんで。
0747nobodyさん
2005/08/01(月) 22:34:31ID:???受信は問題なくできるのですが、送信が全くうまくできません。
ただ、自分の利用しているサーバ内であれば
フリーブログなどと送受信出来るので、送信機能には
問題ないのかも?っと思っています。
ping送信するに辺り、何か設定が必要なのでしょうか?
(php.ini的に)
0748738
2005/08/01(月) 23:48:09ID:???ループの回数という表現に違和感あるけど、多分あってる。
0〜レコード数(ループの回数) - 1 の値ね。希望通り動作したのなら大丈夫かと。
>ループの前後にテーブルやリストタグを書くのがいやで、すっきりと書きたいと思ってた次第です。ただそれだけの事なんですが。
ふむふむ。
確かに漏れもそう書くな。ただループ内でデータをHTML化して文字列に代入してしまうから
オマイさんのやりたかったことがピンとこなかったわ。まぁ人それぞれなので参考まで。
$optionhtml = '';
while ($row = mysql_fetch_array($result)){
$optionhtml .= sprintf('<option value="%d">%s', $row['id'], $row['data']);
}
print <<<EOD
<select name="xxx">
${optionhtml}
</select>
EOD;
0749nobodyさん
2005/08/02(火) 00:40:44ID:???>ループの回数という表現
変な言い方でした。sqlのヒットしたレコードの1件目が[0]2件目が[1]と、こういう意味です。
示していただいた例は、漏れにはちょっと難しすぎました。が、頑張って解読してみます。
ちょっと話はそれますが、phpのスクリプトでDBと連動させて吐き出したhtmlのソース、みなさんは綺麗さとか気にしますか?
漏れは、htmlばかりずっと書いてたんで、吐き出されたソースも綺麗にインデントのレベルがそろうように書いてます。ばからしいと思いつつ。
0750739
2005/08/02(火) 01:00:42ID:???DBの取得じゃないけどこれ↓だとループ後でもいける。
多分やってることは一緒だと思うので。
$a = array(1,2,3,4,5,6,7,8,9);
$cnt = count($a);
for($i = 0; $i <$cnt; $i++){
$row["test".$i] = $a[$i];
print($row["test".$i] ."\n");
}
$atode = $row;
$cnt = count($atode);
for($i = 0; $i <$cnt; $i++){
print($atode["test".$i]."\n");
}
0751nobodyさん
2005/08/02(火) 02:44:27ID:???よくわからんが、オープンソースのを参考にするんじゃだめなのか?
ダメならここで聞いて作るのもダメな気がするがそれはいいの?
0752nobodyさん
2005/08/02(火) 06:08:14ID:???//エラー処理
}
$aaaが半角数字8文字でないときにエラー処理したいんだがうまくいかない
8文字以下ならエラー処理できるが8文字以上ならとおる・・・
なんか間違ってる?
0753nobodyさん
2005/08/02(火) 06:34:12ID:???0754747
2005/08/02(火) 06:54:45ID:???参考にしています。ただ、外部に送信だけがなぜか出来ません。
ですので、サーバ的な問題があるのかと思い、
質問させていただきました。
0755nobodyさん
2005/08/02(火) 10:56:22ID:pypKKfs6画像のアップロードを含む個人情報登録画面を作ってます。
入力画面(データ入力)→確認画面(OKか確認のみ)→DB登録画面(insert文実行)
と遷移していく中で、入力画面からinput type="file"で画像を選択して
アップしたいんですが、move_uploaded_fileで渡すパラメータ($_FILESの中身)
って、hiddenか何かで持てないですかね?
そうじゃないと、DB登録と同じタイミングで画像をアップできなくて。
今は、確認画面で画像を実際にアップ、DB登録エラーなら画像を削除とか
面倒なことを考えています。
しかも、確認画面から戻るときも画像を消さないといけないし・・・。
似た処理を作った方教えてください。
ちなみにDBはMySQLです。
0757nobodyさん
2005/08/02(火) 11:15:37ID:???アップロード時点でテンポラリーに入ってる訳だから、
それが消えるまでの間にDBのINSERT掛ければ良いと思うが?
成功すればmove_uploaded_fileで格納。
類推しにくいテンポラリー名だとしてもHIDDENは止めれ。
SESSIONで持っとけ。
あと確認画面でアップロードした画像はそのままで、テキストだけ
訂正したい場合の「やり直し」もモードに入れといたら?
0758nobodyさん
2005/08/02(火) 11:16:37ID:???こういうもの作ってる人いると思うんだけどどうやってるんだろう?
やっぱ上で書いた方法なのかな。
ヤフオクとかもそういう動き(あっちはJavaだが)してるけど、
効率のいい方法は何かないものか・・・
0759757
2005/08/02(火) 11:17:03ID:???これが要件なら仕方ないな。
0760nobodyさん
2005/08/02(火) 11:18:39ID:???input type="file"がなぜvalue値を指定できないようになっているのかを考えろ
それにPHP4から$_FILESで得られる名前はファイル名のみでファイルパスは含まれなくなったし
0761nobodyさん
2005/08/02(火) 11:21:34ID:???0762755
2005/08/02(火) 11:25:12ID:???レスどうもです。
やっぱSESSIONのほうが安全ですかね。
セッションは仕様としてやらないって方向だったんですが
(そこまでのシステムじゃないだろうってことで)
提案してみます。
>あと確認画面でアップロードした画像はそのままで、テキストだけ
>訂正したい場合の「やり直し」もモードに入れといたら?
モード追加は厳しそうです。決断権あんまりないもので・・・orz
入力画面に戻るたびに画像は再度指定し直すって方法でいこうと思ってます。
0763755
2005/08/02(火) 11:31:52ID:???そうじゃないと、画像だけアップされてDBにデータの無いものは
なにも関連のないゴミ画像として残りますよね。
トランザクション成功時のみアップされればいいんですが・・・。
>>760
クロスサイトスクリプト対策、ですか?
すんませんイマイチ判ってないです。
>>761
確認画面で画像をアップ、ってことですか?
それはチト仕様上厳しいです。
厨な回答してたらごめんなさい。
0764nobodyさん
2005/08/02(火) 11:45:31ID:???>それはチト仕様上厳しいです。
それは仕様が糞なんでは?
0765757
2005/08/02(火) 12:02:46ID:???>移動または名前の変更が行われていない場合、リクエストの
>終了時にそのファイルはテンポラリディレクトリから削除されます。
俺書いたプログラムでアップロードを受けるスクリプト以外でも
難なく取れてたような...ゴミ処理は自動でもしてたみたいだけど。
0766nobodyさん
2005/08/02(火) 12:08:34ID:???確認画面で画像を表示する場合は、大体こんな処理をしてるのが多いんジャマイカ?
1. 入力画面 - input type="file"
2. 確認画面 - move_uploaded_fileで一時ファイルとしてどっかに保存。
画像表示(<img>)にもこの一時ファイルを使う。hidden(or session)で一時ファイル名を保持。
3. 登録画面 - 一時ファイルを正式ファイルに変更(変名とか移動とか)。DBに登録。
処理中断や入力し直しで残った一時ファイルは、定期的に削除。(cronやら、手動やら)
一時ファイルを作りたくなかったら、画像データそのものをhiddenに仕込むなり
sessionに仕込むなりするしか無いと思われ。
0767nobodyさん
2005/08/02(火) 12:10:17ID:Svt/6T9+MySQLに、2つのテーブルがあり、IDというフィールドをキーにしてリレーションをします。
テーブル1:ID、category
テーブル2:ID、name
この様な場合に、テーブル1のcategoryに対するテーブル2nameを全て列挙したいのですが、
どのようなクエリとPHPを書くのが一般的なのでしょうか。
いま考えているのは、
SELECT name FROM テーブル1 WHERE ID=○○
のようなクエリ自体をテーブル1のレコード数ループさせながらprintするというものなのですが、
あまり良い方法では無いような気がします。
0768767
2005/08/02(火) 12:11:38ID:Svt/6T9+表示結果は以下の様にしたいです。
カテゴリー1
名前
名前
名前
カテゴリー2
名前
名前
名前
・
・
・
0769757
2005/08/02(火) 12:12:19ID:???アプリ自前のテンポラリーに移動してたわ。mtimeを目安に自前でgcも。
>>757と>>765は嘘。
んで、テキスト関係の登録と同時に自前のテンポラリーから正規のところに移動。
(確認→訂正時には自前のテンポラリーからは削除しない。gcか正規登録時に削除するのみ)
0770755
2005/08/02(火) 12:20:20ID:???>>769は、つまり>>766と同じような仕様ということですよね?
つまり
確認時に画像アップ(自前の一時ディレクトリに)、DB登録時に一時ディレクトリから移動
訂正時の画像はそのタイミングでは消えない、と。
一時ディレクトリの画像は定期的に消そうと思います。
この仕様でやってみます。ありがとうございました。
0772767
2005/08/02(火) 12:27:47ID:Svt/6T9+2chビギナーで、DB板というのがあるんですね。。。
マルチポストになりそうですが、行ってきます。
0773nobodyさん
2005/08/02(火) 12:31:07ID:???つ [ SQL 結合 ]
とレスしちゃいますが。。。
0774nobodyさん
2005/08/02(火) 12:37:37ID:???SELECT category, name from テーブル1, テーブル2 where テーブル1.ID = テーブル2.ID
0776767
2005/08/02(火) 13:15:53ID:Svt/6T9+ありがとうございます。
この結果を768の様に表示したいんです。
>775
リレーションって何ですか?
わかっている人の説明が聞きたい。
0777nobodyさん
2005/08/02(火) 13:19:26ID:???あらら。こちらのスレとマルチだったのね。MySQLスレの方にレスしちまった。
MySQLスレの106を確認よろ。
0778nobodyさん
2005/08/02(火) 13:48:58ID:???キーフィールドを使って複数のテーブルをいろいろ(LEFT RIGHT INNER OUTER)と簡単に結合(JOIN)できるのがリレーショナルデータベースの利点
0779nobodyさん
2005/08/02(火) 15:47:21ID:???2005/08/01 という文字列を返してくれるような
便利な関数はありませんか?
0781nobodyさん
2005/08/02(火) 16:01:46ID:???この手の質問って定期的にあるな。
PHPマニュアルの日付関連の辺りを読んで、色々やってみりゃいいのに。
$day = date('Y/m/d', strtotime('Mon Aug 1 00:00:00 2005'));
0782nobodyさん
2005/08/02(火) 16:11:11ID:???date('Y/m/d',strtotime ("Mon Aug 1 00:00:00 2005"))
んでも、そんな不思議文字列使うよりは、タイムスタンプに統一した方がいいんでないの?
たぶんDBからの取得データだと思うから、SQLやDBの設定あたりで解決するほうがよいかと。
■ このスレッドは過去ログ倉庫に格納されています