【PHP】下らねぇ質問はID出して書き込みやがれ 89
■ このスレッドは過去ログ倉庫に格納されています
0001●
2009/10/11(日) 21:18:54ID:???過去スレ、関連スレ、FAQなどは>>2-10辺り
次スレは>>980が立てる。10分以内に立たない場合、宣言してから立てたい人が立てること。
◆前スレ
【PHP】下らねぇ質問はID出して書き込みやがれ 88
http://pc11.2ch.net/test/read.cgi/php/1253061577/
◆質問用テンプレ
【OS名】vine linux
【PHPのバージョン】php5.26
【連携ソフトウェア】mysql
【質問内容】
◆質問する時の注意
・ スレを上げて自分のIDを表示させること。(メール欄に何も記述しない。専ブラのsageチェックを外す)
・ 己の行った操作、変更などを詳しく明記すること。
・ エラーメッセージはそのまま表記すること。「エラーが出ます」だけでは回答不可。
・ 質問者として、態度をわきまえること。
・ 事前に関連リンクの公式マニュアル、リファレンス本くらいはちゃんと目を通しておくこと。
(PHPで最良の教本はこの公式マニュアル。市販の書籍は嘘が多いので鵜呑みにしない。)
◆質問後の注意
・2回目以降は最初に質問した際のレス番号を入れて、偽者防止に必ずIDを表示させること。
・解決しなくても回答をもらった場合はお礼を言うこと。
(荒らし、煽りは除く。煽られたときも、無闇に反論せずスルーすること。)
◆回答者への注意
・誰にレスしているのか分からないと困るので、>>(アンカー)をつけて回答すること。
【その他諸注意】
・SQL・正規表現・PEAR・テンプレート(Smarty等)・フレームワークは各該当スレへ
0637nobodyさん
2009/10/26(月) 05:48:48ID:n4efgg6U日付順に取得記事をソートしたいのですが、うまくいきません。
アドバイスお願いします。
$rssurl = array ();
$rssurl[] = "http://mainichi.pheedo.jp/f/mainichijp_flash";
$rssurl[] = "http://rss.asahi.com/f/asahi_newsheadlines";
foreach ($rssurl as $pre) {
$url = $pre;
$rss = fetch_rss($url);
$title = $rss->channel['title'];
$title = mb_convert_encoding($title, "shift_jis", "auto");
$url = $rss->channel['link'];
$rss->items = array_slice($rss->items, 0, 1);
foreach ($rss->items as $item ) {
$day = date('n/j',strtotime(substr($item['dc']['date'],0,10)));
$time = date('H:i',strtotime(substr($item['dc']['date'],11,8)));
$date = "$day $time";
$rdf = $item[link];
$article = $item[title];
$article = mb_convert_encoding($article, "shift_jis", "auto");
$linkstr = "$date $rdf $article $url $title<br>\n";
$rssarray["{$date}"] = $linkstr;
krsort($rssarray);
echo "$linkstr";
0639nobodyさん
2009/10/26(月) 05:55:31ID:n4efgg6Uはい、順序以外は期待通りの実行結果です。
0640nobodyさん
2009/10/26(月) 06:00:30ID:???どんな$linkstrを入れるとどのようなソート結果になるか例を出してもらえますか?
ちなみに第二引数にソートフラグを指定して挙動を変えることができる
http://www.php.net/manual/ja/function.sort.php
今回の場合は全て文字列だから関係ないかもしれないけど
0641nobodyさん
2009/10/26(月) 06:09:43ID:n4efgg6U$rssurl[] = "http://mainichi.pheedo.jp/f/mainichijp_flash";
$rssurl[] = "http://mainichi.jp/rss/etc/mantan.rss";
$rssurl[] = "http://mainichi.jp/rss/etc/enta.rss";
$rssurl[] = "http://mainichi.jp/rss/etc/sports.rss";
10/26 05:00 ■URL ■人事:法務省(26日) ■URL ■毎日jp-ニュース速報(総合)
10/25 21:00 ■URL ■注目アニメ紹介:「空中 ■URL ■毎日jp-まんたんウェブ
10/25 22:14 ■URL ■the GazettE ■URL ■毎日jp-エンタメ
10/25 23:10 ■URL ■横浜:巨人・尾花コーチ ■URL ■毎日jp-スポーツ
(長いので削ってます)
このような結果が出ます。
日付でソートをかけているつもりですが、まったくされていません。
$rssurl配列の上から順に表示されています。
0642nobodyさん
2009/10/26(月) 06:10:21ID:???echoで文字列を出力してるのか?
それともただアドセンス部分のHTMLだけ書いてるのか?
試してみたがhtml bodyタグが加わることはない
サーバかPHPの設定かもしれないがどの設定項目かはわからんわ
PHP使えるレン鯖が2つ以上あるなら両方で試してみ
ローカルに環境作るのが一番いいけど
0643nobodyさん
2009/10/26(月) 06:11:55ID:???使う関数まちがってるんじゃね?
krsortって逆順ソートだよ
0644nobodyさん
2009/10/26(月) 06:15:55ID:???0645nobodyさん
2009/10/26(月) 06:17:41ID:???ただ単にキーを逆順にするソートってこと
ユーザー定義のソートをしたいのならusort()とかじゃないと
0646nobodyさん
2009/10/26(月) 06:18:06ID:n4efgg6U$rssurl[] = "http://mainichi.jp/rss/etc/enta.rss"; //エンタメ
$rssurl[] = "http://mainichi.pheedo.jp/f/mainichijp_flash"; //ニュース速報(総合)
$rssurl[] = "http://mainichi.jp/rss/etc/sports.rss"; //スポーツ
10/25 21:00 ■URL ■注目アニメ紹 ■URL ■毎日jp-まんたんウェブ
10/25 22:14 ■URL ■the GazettE ■URL ■毎日jp-エンタメ
10/26 05:00 ■URL ■人事:法務省( ■URL ■毎日jp-ニュース速報(総合)
10/25 23:10 ■URL ■横浜:巨人・尾 ■URL ■毎日jp-スポーツ
例がわかりにくかったので書き直しました。
0647645
2009/10/26(月) 06:19:49ID:???よくよんでなかったw
>日付でソートをかけているつもりですが、まったくされていません。
ってかいてたからてっきり
データ見る限りだとkrsortでよさそうだね
0648645
2009/10/26(月) 06:20:38ID:???0649nobodyさん
2009/10/26(月) 06:22:04ID:n4efgg6UWarning: Wrong parameter count for usort() in C:\WWW\php.php on line 30
>>648
26日が真上だと日付でソートされているように見えたので…
配列順に表示されるだけでソート機能が働いていないというのが今回の悩みです。。。
0650nobodyさん
2009/10/26(月) 06:25:26ID:???マニュアルみようぜ
http://www.php.net/manual/ja/function.usort.php
krsort($rssarray);を
usort($rssarray);にかえただけじゃだめ
第2引数入れないと
0651nobodyさん
2009/10/26(月) 06:26:20ID:???0652nobodyさん
2009/10/26(月) 06:34:30ID:n4efgg6Uすいません、ありがとうございます。
試している最中ですが、cmpの設定に少し時間がかかりそうなので結果が遅れます。
>>651
$day 記事の更新日
$time 記事の更新時間
$date 上記二つを合わせた文字列
$rdf 記事のURL
$article 記事のタイトル
$url 配信元のURL
$title 配信元のタイトル
です。
0653nobodyさん
2009/10/26(月) 06:41:45ID:???ごめん、krsortに$linkstr関係なかったね
$array = array('10/25 21:00'=>1,'10/25 22:14'=>2,'10/26 05:00'=>3,'10/25 23:10'=>4);
var_dump($array);
krsort($array);
var_dump($array);
array(4) {
["10/25 21:00"]=>
int(1)
["10/25 22:14"]=>
int(2)
["10/26 05:00"]=>
int(3)
["10/25 23:10"]=>
int(4)
}
array(4) {
["10/26 05:00"]=>
int(3)
["10/25 23:10"]=>
int(4)
["10/25 22:14"]=>
int(2)
["10/25 21:00"]=>
int(1)
}
こちらで試してみたら想定どおりにソートされてる気がするけども
0654nobodyさん
2009/10/26(月) 06:43:43ID:???$a部分を連想配列にしてキーを$rssarrayのキーと一致させておけば簡単
比較は値のunixタイムにしたものを比較する感じで
マニュアルの例そのまま使うならrsort()にしたほうがいいと注意書きに書いてるから
まずはusortで形をつくってからパフォーマンスのためにrsortで書き直してみては?
0656nobodyさん
2009/10/26(月) 06:50:28ID:???$rssarrayをソートかけてんのに$linkstr表示してっからだろ
0657nobodyさん
2009/10/26(月) 06:50:51ID:???krsort($rssarray);
echo "$linkstr";
froeachの終わりがどこかわからんけど、echo結果を見ているなら$rss->itemsの順番に表示されてるんじゃ?
$rssarrayに入れたいものを全部入れてからkrsortしてprint_r($rssarray)で確認してみたらどうかな
0658nobodyさん
2009/10/26(月) 06:56:25ID:n4efgg6Uphpは昨日触ったばかりなのでじっくり参考にさせて頂きます。
>>654>>655
助言を求めたのは私なのでハマりから抜け出すためのしっかり参考にさせて頂きます。
>>656>>657
やっと原因が究明出来ました。
表示がまだ思い通りにいかないので試行錯誤してみます。
0659nobodyさん
2009/10/26(月) 07:00:40ID:n4efgg6Ukrsort($rssarray);
for(reset($rssarray); $i=i($rssarray); next($rssarray)){
echo "$rssarray[$i]";
$count++;
if($count == 4){
break;
}
}
これでしっかりと表示出来ました。
原因はkrsort($rssarray);をforeachの中に入れていたことと
$linkstrを表示していたことです。
皆様ありがとうございました!
0660nobodyさん
2009/10/26(月) 07:01:41ID:???の行は単にデバッグのためループの中で出力を確認しているだけで
当然そのあとにテーブルか何かで一覧を表示して、正しくソートされてないと言ってるもんだと思ってた。
$linkstrはkrsortどころか$rssarrayとも関係ない。foreachの順で表示されるだけじゃん。
0661nobodyさん
2009/10/26(月) 07:07:28ID:???オマエラ馬鹿すぎ。
0662nobodyさん
2009/10/26(月) 07:23:29ID:???リアルでどういうやつなのかぜひ見てみたいわ
0664nobodyさん
2009/10/26(月) 10:20:50ID:???0665nobodyさん
2009/10/26(月) 10:41:51ID:???0669nobodyさん
2009/10/26(月) 11:27:59ID:???俺が自動ログインで、そいつの振りして利用できる?
0670nobodyさん
2009/10/26(月) 11:33:33ID:???0671nobodyさん
2009/10/26(月) 11:34:10ID:???0672nobodyさん
2009/10/26(月) 11:44:57ID:???0673nobodyさん
2009/10/26(月) 11:49:41ID:???0675nobodyさん
2009/10/26(月) 11:57:30ID:???0676nobodyさん
2009/10/26(月) 12:18:54ID:???ことだしなあ。
0677nobodyさん
2009/10/26(月) 12:30:15ID:???個人情報があまり意味ないサイトとかだよね。
ひまわり動画とか
0679nobodyさん
2009/10/26(月) 17:53:40ID:+hgb+ZZqスレチでしたら誘導お願いします。
Sample.phpへ、buttonを配置し、JavaScriptでメソッドを定義。
function A1(){
if(confirm('ごまだれですか?')){
<?php
mysql_query("begin");
mysql_query("update `gomagoma` set `syurui` = 'くろごま' where `syurui` = 'alpha'") or die(mysql_error());
mysql_query("commit");
mysql_query("begin");
mysql_query("update `gomagoma` set `syurui` = 'しろごま' where `syurui` = 'beta'") or die(mysql_error());
mysql_query("commit");
mysql_query("begin");
mysql_query("update `gomagoma` set `syurui` = 'ごまふあざらあし' where `syurui` = 'hex'") or die(mysql_error());
mysql_query("commit");
?>
window.alert('内容を変更しました。')
}
}
としていますが、DBを覗いてみたところ、アップデートされていませんでした。
ですが、MysqlErrorは返ってきておらず、そのままJavaScriptで記述したalertが実行されます。
原因を現在当たっていますが、何か思い当たる点がありましたらご指摘お願いします。
0680nobodyさん
2009/10/26(月) 18:00:11ID:???677じゃないけど、そんなもんだと思うぞ
大して重要でもないのに何を気にする事あるんだ?
そんなに気になるなら自動ログインなんてしなきゃいいだけじゃないか
0681nobodyさん
2009/10/26(月) 18:08:17ID:???サーバサイドとクライアントサイドがごっちゃになってないか?
「function A1()」ってのはjavascript側で定義している関数だろ?
その中のphp(mysql_query)は、button押下に関係無くそのページロードしたら実行されるぞ?
ブラウザのソース見てみなよ。
0683nobodyさん
2009/10/26(月) 18:17:35ID:???PHPの中身はともかくとしても、
PHP部が実行されて、DBが書き換えられるなどした後、
出力などがなければ<?php から ?>までが無くなったテキストが、
ヘッダなどがついてブラウザに渡され、それからjavascriptが動くので、
ブラウザがうけとるのは
function A1(){
if(confirm('ごまだれですか?')){
}
}
になります。
0684nobodyさん
2009/10/26(月) 19:14:03ID:???if(confirm('ごまだれですか?')){
window.alert('内容を変更しました。')
}
}
抜けてた
0687nobodyさん
2009/10/26(月) 22:27:35ID:???0688nobodyさん
2009/10/26(月) 23:39:47ID:???0689nobodyさん
2009/10/27(火) 00:54:28ID:???クエリを書いておく事が出来る。
というフレームワークのアイデアを頂きました。
クレームワームの名前は「ごまふあざらあし」にしようと思います。
0690nobodyさん
2009/10/27(火) 10:58:21ID:???0691nobodyさん
2009/10/27(火) 11:16:23ID:???0692nobodyさん
2009/10/27(火) 11:34:04ID:???0693nobodyさん
2009/10/27(火) 11:44:23ID:???0695nobodyさん
2009/10/27(火) 19:25:48ID:???このように書かれたテキストファイルから「名無し」「あいうえお」を取得する方法は
正規表現でひとつずつ抜き出すほかにありますか?
0698nobodyさん
2009/10/27(火) 19:39:41ID:73GIvY2Uまた、上で取得した文字列を$_POSTのような配列形式に変換したいのですが、そのような関数はありますか?
0699nobodyさん
2009/10/27(火) 19:44:58ID:???$_REQUEST
0701nobodyさん
2009/10/27(火) 19:59:55ID:???POSTされた生のデータが欲しいって事かい?
parse_str(file_get_contents('php://input'), $f);
var_dump($f);
0702nobodyさん
2009/10/27(火) 21:21:52ID:???すげえ
0704nobodyさん
2009/10/28(水) 01:05:41ID:EMbPGL3Ysimplexml_load_fileで読みこんだObjectから
$q = $_GET["q"];
echo $xml->item[$q]->name;
としたいのですが、何も表示されません。
echo $xml->item[0]->name;
だと正しく表示され
$q = 0;
echo $xml->item[$q]->name;
でも正しく表示されます。
$q = $_GET["q"];
echo $q;
echo $xml->item[$q]->name;
とした場合は、$qだけが表示されました。
simplexmlでは$_GETが使えないのでしょうか?
解決策をお教えいただきたいです。
0706nobodyさん
2009/10/28(水) 01:12:57ID:EMbPGL3Yありがとうございます!
$q = $_GET["q"]+1-1;
と試してみるとうまくいきました。
ホントにお恥ずかしい限りです・・・
0707nobodyさん
2009/10/28(水) 01:16:08ID:???0708nobodyさん
2009/10/28(水) 01:17:19ID:???でおk
0709nobodyさん
2009/10/28(水) 01:18:34ID:???負荷とかそんなに変わらないのならクラス定義をまとめて最初に読み込んだほうがらくだよね。。。
0710nobodyさん
2009/10/28(水) 01:20:18ID:???0712nobodyさん
2009/10/28(水) 02:52:06ID:???ただJavaの場合コンパイラが最適化してくれるので問題ないが
PHPはインタプリタなので最適化のしようがないという
つまり全部includeなんてしたらそりゃ遅くなる
0715nobodyさん
2009/10/28(水) 10:42:00ID:v0axKvNXセッションを使用する場合は必ずつけなければならないのですよね?
これを記述するのはMVCモデルだとVの部分に記述するのであってますでしょうか?
0716nobodyさん
2009/10/28(水) 10:43:21ID:???0717716
2009/10/28(水) 10:45:50ID:???ありがとうございます
早速組み方を考えて見ます
0718nobodyさん
2009/10/28(水) 10:47:23ID:???0719679
2009/10/28(水) 14:53:16ID:op4mA5/pそうか・・・表示されてる時には既にHTMLとして返ってきてるんですよね。
この場合は、dbedit.phpのようなものを別途つくり
<?php
include("dbedit.php");
A1();
?>
という風にすればいいのかな?
しかし、この場合でも、A1だけではなく、A2,A3と続く様であれば
それの振り分けはどう実装したらいいでしょうか?
ご意見や、実装例等がありましたら、ご教示よろしくお願い致します。
0721nobodyさん
2009/10/28(水) 15:30:07ID:???まずそのA1, A2, A3でなにをするのか書かないと。あと関数ってわかってる?振り分けってどういうことするの?
0722nobodyさん
2009/10/28(水) 15:43:14ID:???A1()って>>679を見る限りJavaScriptのfunctionだろ? 呼べるわけがないw
>>720の通りにまずJavaScriptなしで動くようにしてみたら?
サーバー側でpostされた内容によってSQL発行するだけだよ
0723nobodyさん
2009/10/28(水) 18:25:52ID:???0724nobodyさん
2009/10/28(水) 18:34:44ID:???javascript無し、DB無しでPHPだけでいろいろ慣れるのが先だな
0725nobodyさん
2009/10/28(水) 18:35:06ID:???A2()で「しろごま」
A3()で「ごまふあざらあし」
を処理する気まんまんの>>679にWeb100.0
0727nobodyさん
2009/10/29(木) 00:12:37ID:???それと同時にプログラミングの概念について解説してる本を読んだ方がいいのかも
概念が足りてない
0728nobodyさん
2009/10/29(木) 03:46:52ID:???0729nobodyさん
2009/10/29(木) 09:54:12ID:xBLZE2eU【バージョン】php5.2.10
SimpleXMLElementに関する質問です。
mlから特定の属性を持った要素を削除するにはどうすれば良いのでしょうか?
例を挙げると、
『sample.xml』
<?xml version="1.0" encoding="UTF-8" ?>
<library>
<book id="00001">
<title>aaa</title>
<author>Emily</author>
</book>
<book id="00002">
<title>bbb</title>
<author>John</author>
</book>
<book id="00003">
<title>ccc</title>
<author>Mike</author>
</book>
</library>
とした場合、idが「00002」の要素を削除するという感じです。
--続く--
0730729
2009/10/29(木) 09:56:09ID:xBLZE2eUいろいろ調べたところ、
$xml = new SimpleXMLElement('sample.xml', null, true);
unset($xml->book[0]);
で削除は出来るのようですが、配列で何番目という指定ではなくid「00002」の要素を指定して削除し、
<?xml version="1.0" encoding="UTF-8" ?>
<library>
<book id="00001">
<title>aaa</title>
<author>Emily</author>
</book>
<book id="00003">
<title>ccc</title>
<author>Mike</author>
</book>
</library>
となる事が目的です。
どうぞよろしくお願いします。
0731nobodyさん
2009/10/29(木) 12:08:53ID:???foreachで出来た方いたら教えてください。
$xml = new SimpleXMLElement('sample.xml', null, true);
for ( $i = 0 ; $i < count($xml->book);$i++) {
if ( $xml->book[$i]["id"] == " 00002") {
unset( $xml->book[$i] );
}
}
echo $xml->asXML();
0733nobodyさん
2009/10/30(金) 06:12:51ID:5l/tuOOstaro@example.com
これだと4文字決め打ちになってしまいます。
preg_replace('/[a-z0-9\.\-\_]+@/i', '****@', $text);
いまのところシンプルに書ける方法で思いつくのは、
長い文字数から順に置換していく方法です。
forなど使えばシンプルには書けそうです。
preg_replace('/[a-z0-9\.\-\_]{10}@/i', '**********@', $text);
preg_replace('/[a-z0-9\.\-\_]{9}@/i', '*********@', $text);
...
でも美しい方法とは思えません。
定石、または美しい方法はありますか?
0734nobodyさん
2009/10/30(金) 08:26:53ID:???たとえば
$text = "taro@example.com";
echo preg_replace('/([a-z0-9\.\-\_]+)@/ie', "str_repeat('*',strlen('$1')) . '@'", $text);
0735nobodyさん
2009/10/30(金) 10:41:53ID:???$text = "taro@example.com";
$array = explode('@', $text);
echo str_repeat('*',strlen($array[0])) . '@' . $array[1];
0736nobodyさん
2009/10/30(金) 16:17:27ID:???$text='taro@example.com';
echo str_repeat('*', strpos($text,'@')).strstr($text,'@');
■ このスレッドは過去ログ倉庫に格納されています