mpro-gram の回答履歴
- Listからのnull要素を削除方法は?
次のリストに入っているnull要素を削除する方法をお教え下さい。 List<String> lst = new ArrayList<String>(); while (lst.remove(null)); や for (int i=0; i < lst.size();i++) { if (lst.get(i) == null ) lst.remove(i); } ではException in thread "main" java.lang.UnsupportedOperationException が起こります。 2011 Nov. 27.
- Listからのnull要素を削除方法は?
次のリストに入っているnull要素を削除する方法をお教え下さい。 List<String> lst = new ArrayList<String>(); while (lst.remove(null)); や for (int i=0; i < lst.size();i++) { if (lst.get(i) == null ) lst.remove(i); } ではException in thread "main" java.lang.UnsupportedOperationException が起こります。 2011 Nov. 27.
- ORDER BY CASEで異なる並替えをするには
(状態)-(分類) 状態a-03 状態a-02 状態a-01 状態b-01 状態c-02 状態b-03 状態d-04 状態e-01 状態e-02 状態e-03 mysql上のデータを上記のように並べたいるために、 まず(状態)をまとめるために次の通りorder by caseを使いました。 select * from data order by case 状態 when '状態a' then 1 when '状態b' then 2 when '状態c' then 2 when '状態d' then 2 when '状態e' then 3 else 4 end しかし、分類が状態aの場合と(状態bからd)の場合で (分類)の値に対する並び替えを変更することができません。 どうやったら、上記の並び替えができるのか、教えていただけると幸いです。
- ORDER BY CASEで異なる並替えをするには
(状態)-(分類) 状態a-03 状態a-02 状態a-01 状態b-01 状態c-02 状態b-03 状態d-04 状態e-01 状態e-02 状態e-03 mysql上のデータを上記のように並べたいるために、 まず(状態)をまとめるために次の通りorder by caseを使いました。 select * from data order by case 状態 when '状態a' then 1 when '状態b' then 2 when '状態c' then 2 when '状態d' then 2 when '状態e' then 3 else 4 end しかし、分類が状態aの場合と(状態bからd)の場合で (分類)の値に対する並び替えを変更することができません。 どうやったら、上記の並び替えができるのか、教えていただけると幸いです。
- CakePHPのディレクトリ構成について(app)
CakePHPのapp内のディレクトリ名について教えてください。 CakePHPを使ってみたいと思いインストールまで実行しました。 作成したプログラムはappディレクトリ内に配置するようですが、 公式ドキュメントとapp内のディレクトリ名が違います。 バージョン:CakePHP ver 2.0.3 安定版 Cookbook(公式ドキュメント)を見ると 「2.3 CakePHPのフォルダ構造」 http://book.cakephp.org/ja/view/899/CakePHP%E3%81%AE%E3%83%95%E3%82%A9%E3%83%AB%E3%83%80%E6%A7%8B%E9%80%A0 Appフォルダは controllers libs models views ・・・ と記載してあります。 実際にappディレクトリを見てみると Controller Lib Model View ・・・ というように始めの文字が大文字になっていて複数形がなくなっています。 これはバージョンの違いによるものなのでしょうか? 公式ドキュメントでappのcontrollerディレクトリにファイルを作ってアップロードとなっていたら、実際にはappのControllerディレクトリにファイルをアップロードすれば良いのでしょうか? それとも、Controllerディレクトリとは別にマニュアルと同じ名前controllerディレクトリを作成してその中にファイルをアップロードするのでしょうか?
- PDOを使って複数キーワード検索する方法について
PDOでプリペアードステートメントを使って複数キーワードで検索する方法を教えて下さい。 プリペアードステートメントは「?」形式ではなく、$stmt->bindParam(':sample', $samle);の形を使った方法を知りたいです。 環境 PHP:5.1.6 MySQL:5.0.77 処理の流れを作ってみました。途中から不明な点があるので変数化しないで記載してあります。 /*--PDOのプリペアードステートメントのbindParamを用いた場合--*/ $dbh = new PDO($DSN , $DBUSER , $DBPASS); $query = 'SELECT * FROM table WHERE '; $keyword_str = 'キーワードA キーワードB キーワードC'; //全角スペースを半角スペースに変換する処理(省略) $keywords = split(' ',$keyword_str); for($a = 0; $a <$keywords_num; $a++) { $kw[]=' 列名 like :kw'.$a; } $query.= join('AND', $kw); //キーワードごとに「%キーワード%」の形を作る。 $kw0='%'.$keywords[0].'%'; $kw1='%'.$keywords[1].'%'; $kw2='%'.$keywords[2].'%'; $stmt = $dbh->prepare($query); $stmt->bindParam(':kw0', $kw0); $stmt->bindParam(':kw1', $kw1); $stmt->bindParam(':kw2', $kw2); $stmt->execute(); /*-----------------------------------------------------------*/ 上記ソースの後半部分、 (1) //キーワードごとに「%キーワード%」の形を作る。 のところを変数を使って実現しようと思うのですが、うまくいきません。 $keywords_num=count($keywords); でキーワードの数を取得して for($a = 0; $a <=$keywords_num; $a++) { //作りたいソース } の形にすることは予想がつくのですが。 (2) $stmt->bindParam(':kw0', $kw0); $stmt->bindParam(':kw1', $kw1); $stmt->bindParam(':kw2', $kw2); の部分も上記と同じ形を考えていますが $keywords_num=count($keywords); でキーワードの数を取得して for($a = 0; $a <=$keywords_num; $a++) { //作りたいソース } 「//作りたいソース」の部分がうまく作れません。 (1)(2)の作りたいソース部分の書き方を教えて下さい。 上記の考え方より良い(短い)ソースが作れる場合はそのソースを教えて下さい。
- PHPの機能制限
お世話になります 環境はlinux centos6 + php を使っています。 ユーザーにブラウザ上で任意のサーバサイド言語を記述でき、実行できる環境を作ろうと考えています。 ユーザーには悪意のあるユーザーも含まれます。 使用したいものは変数,配列,連想配列、関数はfor,if,foreach,replace系,match系,split,explode 以上のみで他の関数は実行できないようにしたいです php又は他の言語に機能制限みたいなものが存在すれば実現できると思うのですが そのようなものはあるのでしょうか? smarty等のテンプレートエンジンは元々そういう用途のものではないので 思わぬ事故が起きそうでなるべく使用したくありません。 これを実現するには replaceやmatchを駆使してphpの上で動く独自のミニ言語を作る他ないのでしょうか なにか手がかりをご存知の方お教え頂けると嬉しいです。
- ベストアンサー
- PHP
- susan-styl
- 回答数1
- プログラムの手法について
プログラム初心者です。同僚の書いたVBAのプログラムを勉強のために見ていました。彼のプログラムは X=-1 関数1 ・・・・・関数の処理 X=1 関数1終 もしX=1じゃなければエラー処理へ。 もしX=1ならばプログラムは続く。 といった内容です。 関数直前で変数に値を持たして、関数脱出後にその変数が変わっていなければエラー処理へといった手法はよく使われるんでしょうか?自分はそんな処理の仕方をおもったことすらなかったので、そんな手法があるんだ。それって一般的なのかな?と思って質問させて頂きました。お願いいたします。
- ベストアンサー
- その他(プログラミング・開発)
- mellow91
- 回答数3
- フォームの内容をクッキーに保存する
IDをフォームに記入してクッキーに保存し、別ページで使用しようとしています。 フォームに入力してsubmit(onclickでCookieに保存)しようとすると、 1回遅れでCookieに保存されます。 (前々回保存した内容がCookieに保存される) POSTを変数に入れる順番がおかしいのでしょうか? ご教示お願い致します。 以下ソースです。 setid.php <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript"> <!-- // Cookie設定 // Cookie送信function function setCookie(key,val,url){ tmp = key+"="+escape(val)+";"; tmp += "expires=Fri, 31-Dec-2030 23:59:59;"; if(url){ tmp += "domain="+getDomain(url)+";"; tmp += "path="+getDomainPath(url)+";"; } document.cookie = tmp; location.reload(true); }; // Cookie削除function function delCookie(key){ expiredate = new Date(); expiredate.setYear(expiredate.getYear()-1); tmp = key+"=;"; tmp += "expires="+expiredate.toGMTString(); document.cookie = tmp; }; // Cookie削除(削除ボタン用) function del_cookie_id(){ delCookie("testid"); location.reload(true); } //--> </script> </head> <body> <center> <!-- ID入力フォーム --> <?php // Cookie読込み-ID $testid=$_COOKIE["testid"]; ?> <form action="setid.php" method="post"> <input type="text" name="testid" size="20" value="<?php echo $testid; ?>"> <!-- ID保存ボタン --> <?php $testid=$_POST["testid"]; ?> <input type="submit" name="set_id" value="IDを保存" onclick="setCookie('testid','<?php echo $testid; ?>');"> <!-- ID削除ボタン --> <input type="submit" name="del_id" value="IDを削除" onclick="del_cookie_id()"> </form> <br> <!-- Cookie表示 --> <?php print_r($_COOKIE); ?> <br> </body> </html>
- mySQLの日本語表示について
mySQLの日本語表示について質問があります。 OSがvistaであるPCにxampp1.7.7をインストールし、必要なセットアップをすませました。 そこで、コマンドラインより適当なデータベース(workdb)に create table tab1(number int(8) unique not null, city varchar(10), country varchar(10)); として、テーブル(tab1)を作成し、 insert into tab1 values(1, '東京', '日本'); とtab1にデータを挿入し、 select * from tab1; で、tab1の内容を表示したところ +-------+----+-------+ | number | city | country | +-------+----+-------+ | 1| | | +-------+----+-------+ と、日本語で挿入した物だけ表示されませんでした。 status より、charactersetを確認したところ Server,Db,Client,Conn 全て utf8 となっていました。 また、 show variables like "char%"; より、Variable_nameも確認したところ character_set_client,character_set_connection,character_set_database,character_set_result,character_set_server,character_set_system は全てutf8になっており、character_set_filesystemのみbinary となっていました。 この『日本語のみ表示されない』原因はどういったものが考えられるのでしょうか? character_set_filesystem が原因なのでしょうか? 原因をネットで探してみましたが、『日本語が文字化けする』といったものばかりがヒットし、また上記のVariable_nameがutf8になっていないといった内容が多く、自分に生かす事ができませんでした。 わかる方がいらっしゃればお手数おかけして大変申し訳ないのですが、是非ご教授お願いしたいと思っています。 よろしくお願いいたします。 質問に必要な情報が足りていない場合、教えていただければと思います。
- 締切済み
- MySQL
- takedai031
- 回答数2
- MYSQLでの文字化け
php(utf-8)を使ってmysqlで簡単なサイトを作ってみましたが, 日本語をフォームから入力して、表示するとき、ブラウザではまったく問題ないのですが、 phpMYadminでデータベースを開くとの日本語部分が文字化けして読めません。 ローカルでは問題ないので、サーバーの問題かとおもい、 他のサーバー(ロリポップ)にphpとsqlをテストでコピーしてみましたら大丈夫でした。 何かの設定かと思い、 mysql> SHOW VARIABLES LIKE 'char%';でチェックし比べてみたところ 正常(ローカル、ロリポップともに)のものは character set client utf8 character set connection utf8 character set database utf8 なのに 文字化けするほうは(北米のサーバー) character set client latin1 character set connection latin1 character set database latin1 でした。文字コードのデフォルトが違うからだと思い、ググって見たところ、 結構よくある問題で、my.cnf でデフォルト文字設定utf-8に変更するなどで解決できるとありました。 でも、使っているサーバーは予めphpMYadminがインストールされているレンタルサーバーであるのでmy.cnfはさわれないのでは??? サーバー会社に連絡して変更可能かと聞いたところ、my.cnfを変更することはできません。またデータベースのサポートはいたしません。と冷たく返答。サーバー会社を変えたいところですが、自分が借りたサーバーではないのでそのまま使うしかありません。 ただ、教わった、sqlコマンドからALTER DATABASE <your_database_name> CHARACTER SET utf8 COLLATE utf8_general_ci を実行したところcharacter set databaseのみutf8になりました。(文字化けは一緒) character set connection とcharacter set database をmy.cnfをいじらず、sqlコマンドで変更可能なのでしょうか? もし、無理ならばどのような方法があるのでしょうか? サイトのフォームからの送信と受信はUTF-8に設定しています。 (だからだとおもいますが、ブラウザの表示だけは文字化けせずにでます。) お知恵がありましたらよろしくお願いします。
- html-lintの結果を自サイトページに組み込み
あるURL(自サイト)がありまして、管理者モードのとき(自分しかはいれないモード。これは実装済み。htdirectではないです) そのURLに対するhtml-lintの結果を、(管理者モードのときだけ)そのURLの最下部に掲載することは可能ですか? できるとすればどうすればいいのでしょうか? なお、VPSです。LAMPです。fopen有効にしています。
- COUNT関数が上手く設定できない
COUNT関数が上手く設定できなくて困っています。 DBに案件テーブルと担当者テーブルを設定し、案件に紐付く担当者を検索できるようにしようと思っています。 案件に対して複数の担当者が担当になることがあり、案件テーブルに担当者テーブルをLeft Joinして、最後にGroup byでグルーピングすることによって案件自体は検索できるのですが、ページネーションのためCOUNT関数を使って案件数を求めようとすると、正しい数値が得られません。 select count(a.id) counts // ここをa.* とすることで案件情報を検索することはできます。 from ANKEN a left join TANTOU t on a.id = t.id where flag = 0 group by a.id 正しい件数を取得するにはどのようにすれば良いでしょうか?
- ベストアンサー
- MySQL
- bacchus047
- 回答数1
- 会員ページ SESSIONについて
レンタルサーバはさくらインターネット、プランはプレミアムです。 PHPは5.2.171、MySQLは5.1です。 login.phpから各メンバーのIDとPWを入力してデータベース内ののデータと一致したら、main.phpにLocationでとぶようにしています。 2日前ほどからログインができなくなり、大変困っています。(それまでは問題なくログインができた。) 原因はわからないのですが、色々検証したところ、 login.phpでログインしたときにmain.phpでIDが取得できていないということがわかりました。 コードは下記のようになります。 login.php if ($uid != "" || $upass != "") { $link = mysql_connect($DB_HOST,$DB_USER,$DB_PASS); mysql_select_db($DB_NAME,$link); $uid = mysql_real_escape_string($uid, $link); $upass = mysql_real_escape_string($upass, $link); $userQuery = sprintf("SELECT count(*) as `cnt` FROM `member` WHERE `id`='%s' AND `password`='%s'",$uid,$upass); $userResult = mysql_query($userQuery, $link) or die(mysql_error()); if ($row = mysql_fetch_assoc($userResult)) { $count = $row['cnt']; if ($count == 1) { session_start(); $_SESSION['ok_flg'] = 1; $_SESSION['uid'] = $_REQUEST['id']; header("Location: main.php"); exit; } else { $msg = '<p class="error">ユーザーIDまたはパスワードが違います。</p>'."\n"; } } else { $msg = '<p class="error">ユーザーIDまたはパスワードが違います。</p>'."\n"; } } 省略部分が少しありますが、特に問題ないと思います。 main.php session_start(); if ($_SESSION['ok_flg'] != 1) { header("Location: /"); exit; } if (!isset($_SESSION['uid'])) { header("Location: /"); exit; } $uid = mysql_real_escape_string($_SESSION['uid'], $link); $userQuery = sprintf("SELECT * FROM `member` WHERE id='%s' ",$uid); $userResult = mysql_query($userQuery, $link) or die(mysql_error()); if ($row = mysql_fetch_assoc($userResult)) { $user_name = $row['user_name']; } echo $user_name; としています。 ここからが問題なのですが、 1.ログインするとSESSIONファイルが2つ発行されてしまう。 1つ目は空のファイル。2つ目がIDなどが記載されているファイル。 main.phpのsession_start()を取ると1つのみの発行。(IDなどが記載されている方。) 2.main.phpに切り替わったときに$_SESSION['ok_flg']と$_SESSION['uid']の値が取得できないためlogin.phpに戻される。 3.main.phpのsession_start()を取ればページは表示されるが、session_id()も$_SESSION['ok_flg']と$_SESSION['uid']の2つも取得できない。 3.main.phpでsession_start()を取れば他のページはsession_idは取得できるが$_SESSION['ok_flg']と$_SESSION['uid']が取得できない。 4.session_start()と併用で$_GETも使用しているページがあるが$_GETを使用しているページも2と同じ現象になる。 以上ですが、お分かりになる方がいらっしゃいましたら、教えていただけないでしょうか。 宜しくお願い致します。
- Joinしてカウントしたいのですが,,,
どうにもSQLになじめず困っている初心者です。宜しくお願い致します。 tableAとtableBがあり,それぞれ6つの列があります。両方とも,英語の人名を入力したものです。 tableAは添付した画像のようになっていて, A_ID, A_Key, A_firstname1, A_firstname2, A_lastname1, A_lastname2 と6つの列があります。要は英語の人名のデータなのですが,別名や綴り違いがあるためにfirst nameもlast nameも2列ずつあります。tableAは,これが数百行あります。 tableBも同様に, B_ID, B_Key, B_firstname1, B_firstname2, B_lastname1, B_lastname2 と6つ列があります。ただしこちらは数万行あります。 やろうとしていることは,名前の綴り違いなどを考慮して,tableBの中にtableAの人名が何回出てくるか数えて,その数字をA_IDと一緒に表示するViewを作る,というものです。 そこで,以下のようなクエリを書きました。DBMSはMySQL 5.2を使っています。 Create View NewView as select tableA.A_ID, count(*) as Num from tableA join tableB on (tableA.A_firstname1 in (tableB.B_firstname1, tableB.B_firstname2)) and (tableA.A_lastname1 in (tableB.B_lastname1, tableB.B_lastname2)) group by tableA.A_ID ところが,出力されたViewはどうも思っていたものとは違い,名前が一致していないものもカウントされてしまいます。どこが間違っているのでしょうか。 お詳しい方のお知恵を拝借できたらと思います。どうか宜しくお願い致します。
- MySQL 配列もどきを条件式に
MySQL5.5です PostgreSQLからMySQLへ移行作業をしています PostgreSQLの配列型(文字)をMySQLのBLOB型にして格納しています {"ABC", "EFG"}といった形式で格納しているのですが 以下のSQL文をMySQLで使用できる形にしたいのです SELECT * FROM table WHERE Test[1] LIKE '%%' TestがPostgreSQLでの配列になります エラーメッセージは以下の通りです db_query error. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '[1] like '%%' 以下のようにAS句で適当な名称を与えて引き出せないかと考えたのですが、「Unknown column 'tst'」となり取得することはできませんでした SELECT *, REPLACE(SUBSTRING(Test, 1, LOCATE(',',Test) - 1), '{', '') AS tst FROM table WHERE tst LIKE '%%'; 何か良い方法などありましたら教えてください、よろしくお願いします
- ベストアンサー
- MySQL
- standingover
- 回答数2
- session_start() PHP5.3.5
PHPでは、session_start()の前に、文字を出力してはいけないはずですが、 ---- ここから ---- aaaaaaaaaa <?php session_start(); echo $_SESSION['time']; $_SESSION['time'] = time(); ?> <form action="sesTest.php"> <input type="submit" value="Push Me" /> </form> ---- ここまで ---- が動いてしまいます。 動くのは、別に構わないのですが いつから、OKになったんでしょう? 後、このことを保証するドキュメントなんてないですかね? なお、CLIで動かすと・・・セッションなんで関係ないはずですが、昔どおりのWarningが出ます
- MySQLのClient characterset
MySQLの文字コードについて、質問2点あります 環境は、Windows7 ・MySQLサーバのバージョン: 5.5.8 ・MySQL クライアントのバージョン: mysqlnd 5.0.7-dev - 091210 <質問1> skip-character-set-client-handshakeせずに、 MySQLのClient charactersetを、utf8にしたいのですが、 my.iniへ、 [mysql] default-character-set=utf8 [client] default-character-set=utf8 と追記しても、 statusで確認すると、 Client characterset: cp932 と表示されてしまいます。 skip-character-set-client-handshakeと書かずに、 Client characterset: utf8 とするには、どうすればよいでしょうか。 <質問2> Client characterset: cp932のメリットについて Client charactersetを、 utf8じゃなくて、cp932にするメリットとしては、 何があるのでしょうか? コマンドラインで日本語表示できることぐらいしか思いつかないのですが… そもそも、「MySQLのClient characterset」の意味がよく分かっていないので、 教えてください
- PHP GDでテキストを含む最小の画像を作りたい
PHP GDでテキストを描画し、画像の幅・高さがそれを含む最小になるように したいのです。 まずimageftbboxでバウンディングボックスを取得し、そのサイズにすればいいかと思い 以下のコードを書いてみましたが、うまくいきません。 <?php $fontSize = 20; $angle = 0; $fontFile = './msgothic.ttc'; // MSゴシック for ($code = ord('A'); $code <= ord('Z'); $code++) { $text = chr($code); $bbox = imageftbbox($fontSize, $angle, $fontFile, $text); $w = $bbox[2] - $bbox[0]; $h = $bbox[3] - $bbox[7]; var_dump($bbox); echo "w = $w h = $h\n"; $im = imagecreatetruecolor($w, $h); $backcolor = imagecolorallocate($im, 0x00, 0x00, 0x00); $forecolor = imagecolorallocate($im, 0xff, 0xff, 0xff); imagefill($im, 0, 0, $backcolor); $x = 0; $y = -$bbox[7]; echo "x = $x y = $y\n"; imagefttext($im, $fontSize, $angle, $x, $y, $forecolor, $fontFile, $text); imagegif($im, $text .'.gif'); } この場合、Iの右半分が切れてしまいます。 $xを調整すればいいのかと思い、$x = $bbox[0]などとしてみましたが、 どうやっても必ずどれかの文字の一部が切れてしまいました。 これを正しく描画するにはどのようにすればいいでしょうか?
- session_start() PHP5.3.5
PHPでは、session_start()の前に、文字を出力してはいけないはずですが、 ---- ここから ---- aaaaaaaaaa <?php session_start(); echo $_SESSION['time']; $_SESSION['time'] = time(); ?> <form action="sesTest.php"> <input type="submit" value="Push Me" /> </form> ---- ここまで ---- が動いてしまいます。 動くのは、別に構わないのですが いつから、OKになったんでしょう? 後、このことを保証するドキュメントなんてないですかね? なお、CLIで動かすと・・・セッションなんで関係ないはずですが、昔どおりのWarningが出ます