yambejp の回答履歴
- 冗長なコードの添削のお願い・・・
月刊誌の過去記事の目録を構築していて、プルダウンに発行年月と号数、特集スポーツ名を列記したショートカットメニューを構築したいのですが、月によって特集テーマが2つ、3つある号があり、これらもプルダウンに連記してセットしたいと思います。 以下のサンプルのように既に実現はできてはいるのですが、以下のコード、素人の私がみてもいかにも冗長であることは明白です。もっとスマートに書き換えられるならご教示いただければ幸いです。 なお、本件、別カテゴリでの質問での御礼に聞きかけた質問ですが(http://okwave.jp/qa/q8309533.html)、既に初期の目的が達せられたため締め切りました。恐縮ですが改めて伺います。 //元データ CREATETABLE`mymagazine`(`myCode`int(5)unsignedNOTNULLauto_incrementCOMMENT'管理コード',`myPubYear`int(4)defaultNULLCOMMENT'発行年',`myPubMonth`int(2)defaultNULLCOMMENT'発行月',`mySequence`int(3)defaultNULLCOMMENT'号',`mySortNo`int(2)defaultNULLCOMMENT'巻毎のソート番号',`myCategoryCode`int(2)defaultNULLCOMMENT'分類コード',`myTheme`varchar(900)defaultNULLCOMMENT'テーマ',PRIMARYKEY(`myCode`) )ENGINE=InnoDBDEFAULTCHARSET=utf8COMMENT='テーブル'AUTO_INCREMENT=1; INSERTINTO`mymagazine`(`myPubYear`,`myPubMonth`,`mySequence`,`mySortNo`,`myCategoryCode`,`myTheme`)VALUES(2005,7,138,1,99,''),(2005,7,138,2,1,'サッカー'),(2005,7,138,3,1,'サッカー'),(2005,7,138,14,16,''),(2005,7,138,15,15,''),(2005,8,139,4,1,'野球'),(2005,8,139,5,1,'野球'),(2005,8,139,17,17,''),(2005,8,139,18,17,''),(2005,9,140,1,99,''),(2005,9,140,2,1,'テニス'),(2005,9,140,3,1,'バスケ'),(2005,9,140,4,1,'バスケ'),(2005,9,140,5,1,'バスケ'),(2005,9,140,6,1,'水泳'),(2005,9,140,7,2,''),(2005,9,140,8,14,''),(2005,9,140,9,13,''),(2005,11,142,2,1,'柔道'),(2005,11,142,3,1,'剣道'),(2005,11,142,4,1,'剣道'),(2005,11,142,5,8,''),(2005,11,142,6,2,''),(2006,1,144,2,1,'卓球'),(2006,1,144,3,1,'卓球'),(2006,1,144,4,1,'バレー'),(2007,9,236,2,1,'陸上'),(2007,9,236,3,1,'陸上'),(2007,9,236,4,1,'陸上'),(2007,9,236,5,4,'ソフト'),(2007,9,236,6,5,'') //コード <?php $con = mysql_connect(serv, user, pw); $selectdb = mysql_select_db(DBNAME, $con); $sql = "select *,"; $sql .= " (select if(max(mySortNo)=t1.mySortNo,1,null) from mymagazine where mySequence=t1.mySequence and myCategoryCode =1) as myflg"; // フラグ $sql .= " from mymagazine as t1"; $sql .= " order by mySequence desc"; $rst = mysql_query($sql, $con); $body = "<select name=\"myselect\"\">\n"; while ($col = mysql_fetch_array($rst)) { // 発行年を見出しにセット if ( $sv_myPubYear != $col["myPubYear"] ) { if ( $sv_myPubYear != '' ) { $body .= "</optgroup>\n"; } $body .= "<optgroup label=\"" . $col["myPubYear"] . "年\">\n"; } //号数(mySequence)と分類コード(myCategoryCode=特集、連載、投稿など各コーナー名で1だけを抽出する) //が変わらないのに特集テーマが変わったらテーマの文言を追記する if (($col["mySequence"] == $sv_mySequence) && ($col["myCategoryCode"] == $sv_myCategoryCode) && ( $col["myTheme"] != $sv_myTheme)) { $selectStr = $selectStr . "◆" . $col["myTheme"]; } else { $selectStr = $col["myTheme"]; } //同じ号数で、直前のループと比較して文字数が減っていたら、前の方を採用 if (($col["mySequence"] == $sv_mySequence) && (mb_strlen($selectStr,"utf-8") < mb_strlen($sv_selectStr,"utf-8"))) { $selectStr = $sv_selectStr; } //SQLで設置したフラグがたっている場合だけ、プルダウンメニューとして書き出す。 if ($col["myflg"] == '1') { $body .= "<option>" . $col["myPubMonth"] . "月号(第" . $col["mySequence"] . "号) " . $selectStr . "</option>\n"; } //次のループで比較検討用に各値の持ち越し $sv_myPubYear = $col["myPubYear"]; $sv_mySequence = $col["mySequence"]; $sv_myCategoryCode = $col["myCategoryCode"]; $sv_myTheme = $col["myTheme"]; $sv_selectStr = $selectStr; } $body .= "</optgroup>\n"; $body .= "</select>\n"; ?> <html> <head> <meta http-equiv="content-type" content="text/html; charset=utf-8"> </head> <body> <?= $body ?> </body> </html> なお先日、別質問でMySQL関数の非推奨を教わり、こちらには後日に取り組むつもりです(なかなか対応できなくてスミマセン) http://okwave.jp/qa/q8277847.html
- 【初歩?】スペース区切り文字列を「」で括り書き出し
$val = "キー1 キー2 キー3"; //を、「キー1」「キー2」「キー3」という風に、 //全角括弧「」でくくって書き出す関数はありますか。 //ただし、スペースは全角の場合と半角の場合あります。 //苦し紛れに、 echo implode("「", $word, "」"); //みたいなことをしてみましたが、エラーです。。。
- Basic認証内の動画再生で再度認証をきかれます
みなさま、よろしくお願いいたします。 Basic認証サイトに、動画(.wmv)を設置したのですが、 動画再生時にも、認証が求められてしまいます。 Chrome、IEで確認済みです。 動画再生時の認証をさせなくするためには、どうすれば よいのでしょうか。 ご教示くださいますよう、よろしくお願いいたします。
- グループ内最大値に印を付けるSQL文
MySQL5 に年度、通し番号が 格納されており、 select year, number from mytable ・・・と抽出すると以下のようになります。 2005 1 2005 2 2005 3 2008 4 2008 5 2008 6 2008 7 2008 8 2010 9 2011 10 2011 11 2011 112 同じ年度グループ内で、最大となる通し番号の行に「myFlg =1」と付けるSQL文をご教示ください。if とか group by とか as myFlg =1 みたいな記述をするのかなと想像するんですが・・・ PHP5のWHILE文でmyFlg = 1となっている行だけを出力し、上記データ例では、 while ($col = mysql_fetch_array($rst)) { if ($col['myFlg']) == '1') { echo $col['year'] . "年の最大番号は、" . $col['myFlg']. "番"; } } を実行することで、以下のような結果を得ることを期待しています。 2005年の最大番号は、3番 2008年の最大番号は、8番 2010年の最大番号は、9番 2011年の最大番号は、112番 よろしくお願いします。
- グループ内最大値に印を付けるSQL文
MySQL5 に年度、通し番号が 格納されており、 select year, number from mytable ・・・と抽出すると以下のようになります。 2005 1 2005 2 2005 3 2008 4 2008 5 2008 6 2008 7 2008 8 2010 9 2011 10 2011 11 2011 112 同じ年度グループ内で、最大となる通し番号の行に「myFlg =1」と付けるSQL文をご教示ください。if とか group by とか as myFlg =1 みたいな記述をするのかなと想像するんですが・・・ PHP5のWHILE文でmyFlg = 1となっている行だけを出力し、上記データ例では、 while ($col = mysql_fetch_array($rst)) { if ($col['myFlg']) == '1') { echo $col['year'] . "年の最大番号は、" . $col['myFlg']. "番"; } } を実行することで、以下のような結果を得ることを期待しています。 2005年の最大番号は、3番 2008年の最大番号は、8番 2010年の最大番号は、9番 2011年の最大番号は、112番 よろしくお願いします。
- phpのプログラムで
下記ソースコードのように、forループで回る度にループの中のnameを変更することはできますか? できるのであれば、お手数ですが方法もお願いします。 for($i = 0; $i <= 6; $i++){ echo"$i"; ?> <dd> <input name="responce" type="text" id="responce" /> </dd> <?php } ?>
- グループ内最大値に印を付けるSQL文
MySQL5 に年度、通し番号が 格納されており、 select year, number from mytable ・・・と抽出すると以下のようになります。 2005 1 2005 2 2005 3 2008 4 2008 5 2008 6 2008 7 2008 8 2010 9 2011 10 2011 11 2011 112 同じ年度グループ内で、最大となる通し番号の行に「myFlg =1」と付けるSQL文をご教示ください。if とか group by とか as myFlg =1 みたいな記述をするのかなと想像するんですが・・・ PHP5のWHILE文でmyFlg = 1となっている行だけを出力し、上記データ例では、 while ($col = mysql_fetch_array($rst)) { if ($col['myFlg']) == '1') { echo $col['year'] . "年の最大番号は、" . $col['myFlg']. "番"; } } を実行することで、以下のような結果を得ることを期待しています。 2005年の最大番号は、3番 2008年の最大番号は、8番 2010年の最大番号は、9番 2011年の最大番号は、112番 よろしくお願いします。
- onclick→次ページでサーブレットDB処理表示
http://okwave.jp/qa/q8302602.htmlの質問の続きとなるのですが、 JavaScriptからサーブレットのURLにsubmitするコードですが、 以下のように2つ書いてみましたが、合っていますでしょうか? そして次に何を書けばいいでしょうか? function submit_func() { // フォームオブジェクトに対して値をサブミットを実行する form2.submit(); } <body> <form name="form2" action="/test/sample.do" method="POST"> <p><a href="javascript:form2.submit()">リンク直接</a></p> <p><a href="javascript:submit_func()">リンク関数</a></p> </form>
- ベストアンサー
- JavaScript
- KAIJI-000
- 回答数1
- PHP 全角・半角・英数字 エラー判定
PHPを独学で勉強しているものです、あるサイトを構築中で、入力内容のエラー判定をしたいのですが、どうしても半角英字がエラーではじかれず、どなたかご指導いただけますでしょうか。 PHPのバージョンは5.2で、DBはMySQLでユーザーがある情報を登録できるサイトで、データ型にあわせるため、1以上の半角数字のみ受け付けるようにしたいです。 入力欄は3か所で、$ic0、$ic1、$ic2に格納されています。 入力が全角数字の場合はそれぞれを半角数字に自動変換したいとおもっています。 自作したものは下記の通りです。 宜しくお願い致します。 /*エラー判定*/ $ic_check=$ic0.$ic1.$ic2; if(preg_match("/^[0-9]+$/", $ic_check)){ if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[0-90-9]+$/",$ic_check)){ $ic0=mb_convert_kana($ic0, "n", "Shift_jis"); $ic1=mb_convert_kana($ic1, "n", "Shift_jis"); $ic2=mb_convert_kana($ic2, "n", "Shift_jis"); if($ic0=="0" || $ic1=="0" || $ic2=="0"){ $error_msg="1以上の数字を入れてください。"; }else{ $error_msg=""; } } elseif(preg_match("/^[a-zA-Z]+$/",$ic_check)){ $error_msg="半角数字で入力してください"; } else{ $error_msg="半角数字で入力してください"; }
- データが多すぎるときのバックアップ方法
さくらインターネットや、カゴヤのデータベースサービスを利用しているのですが データをバックアップするにもいつも途中で止まってしまいます。 データは多いテーブルで100万データあります。 効率のよいバックアップ方法、もしくは別サービスのデータベースに移す方法とかありますでしょうか? よろしくお願いします。
- ?name=%94%E9%89%D8の表示
$stock = array ( "./cgi-bin/photobbal25.cgi?name=%94%E9%89%D8"=>"143時間:43分:05秒", "./cgi-bin/photobbal25.cgi?name=naomi"=>"143時間:43分:05秒", "./cgi-bin/photobbal25.cgi?name=%82%D0%82%EB%82%DD"=>"117時間:31分:29秒") foreach($stock as $key => $value) { print "$key\n;" print "{$value}\n" print " \n" //ここに表示したい } 上記はPHPのコードです ?name=%94%E9%89%D8の %94%E9%89%D8を日本語で表示したい よろしくお願いします。
- セッション変数のセキュリティ
プログラム初心者です セッション変数の安全性について教えてください ログインしているかをセッション変数で判定しています。セッションidは使っていません 質問1 悪意をもったハッカーがセッション変数を取得することはできますか?それともセッション変数はクッキーと違い安全なんでしょうか? 質問2 セッション変数の保持時間は決まっていますか? session_start(); if(!isset($_SESSION['id'])){ header('Location: login.php'); exit(); } よろしくお願いします
- 次へのページの内容を取得
今見ているサイトで多数の商品があり、1ページ30件でしか表示がなく 1000件以上あるので次へのページに行くのが大変苦労しております。 商品の登録を行うため、simple html domを利用して情報を取得しています。 しかし、次のページの商品を取得する方法が思いつきません。 手間はかかりますが、例:1~30(全1500件) とかの部分を取得し 全ページの取得もできると思いますが もっとスマートな取得方法はありませんでしょうか。 ご教示のほどよろしくお願い申し上げます。
- JavaScriptで、テーブルクリックした時の
PHPを勉強中です。 どうしてもJavaScriptの力を借りなければならず、少し頑張ってみましたがお手上げですのでどなたかご教授ください。 画面に社員マスタテーブル['tbl_A]があります。 【イメージ】 社員ID | 社員名 | 住所 | 1 東京花子 港区~ 3 板橋亜希 板橋区~ 8 瀬田 南 世田谷区~ 名前や住所をクリックしたときに、その人の社員IDを取得したいのです。 クリックしたセル自体の情報は色々ネットで調べて取得できたのですが、クリックした行の[社員ID]が欲しいのです。 ちなみに、クリックしたセルの情報はweb上から似たような処理のものを探してきて 下記のようにしてます。 現在の私は、解読はできますが、自分ではこれは作れないレベルです。 こちらに手を加える形か、まったく別物でも構いませんのでよろしくおねがいします。 function getCELL() { var myTbl = document.getElementById('tbl_A'); // trをループ。rowsコレクションで,行位置取得。 for (var iL=0; iL < myTbl.rows.length; iL++) { // tr内のtdをループ。cellsコレクションで行内セル位置取得。 for (var iC=0; iC<myTbl.rows[iL].cells.length; iC++) { var Cells=myTbl.rows[iL].cells[iC]; //iL番行のiC番列のセル "td" // onclickで 'Mclk'を実行。thisはクリックしたセル"td"のオブジェクトを返す。 Cells.onclick = function(){Mclk(this);} } } } function Mclk(Cell) { var rowINX = '行位置:'+Cell.parentNode.rowIndex;//Cellの親ノード'tr'の行位置 var cellINX = 'セル位置:'+Cell.cellIndex; var cellVal = 'セルの内容:'+Cell.innerHTML; //取得した値の書き出し res=rowINX + ' '+ cellINX + ' ' + cellVal; document.getElementById('hoge').value=res; }
- ベストアンサー
- JavaScript
- marin3200
- 回答数1
- inner joinでサブクエリ
SQLについてお教え頂けませんでしょうか? 在庫テーブル ・ID ・数量 データ 001,1 001,3 002,3 002,2 002,4 003,2 商品テーブル ・ID データ 001 002 003 004 やりたいこと: 在庫テーブルには重複しているIDがあります。 商品テーブルには重複しているIDはありません。 在庫テーブルの重複を削除したIDと商品テーブルのIDをinner joinで結びたいと思います。 ・select distinct ID FROM 在庫テーブル ・select ID FROM 商品テーブル この2つのjoin方法がわかりません。 結果として、 001 002 003 を取得したいいです。宜しくお願いします。 ちなみに select ID from 商品テーブル inner join 在庫テーブル 商品テーブル.ID = exists(select distinct ID from 在庫テーブル) というコードを書きましたが、動きませんでした・・・抽出データが0件でした・・・
- ベストアンサー
- その他(データベース)
- mellow91
- 回答数3
- セレクトの値を取得できない
<select name='aaa' id='aaa'> <option value='5'>5</option> <option value='6'>6</option> </select> <script> var bbb = document.getElementById('aaa'); document.open(); document.write(bbb); document.close(); </script> のように書いたのですが [object HTMLSelectElement] と表示されます。 何がいけないのでしょうか?
- ベストアンサー
- JavaScript
- cern5100
- 回答数2
- javascript 問題と答え
独学でjsをやっているのですが、わからないところがあるので質問させてください。 ラジオボタンを選択し、解答ボタンクリックで、オレンジの欄に解答が出るようなプログラムを書いたのですが、実行されません。どこが間違っているのでしょうか。 /* ---------------- ▽▽▽ここから▽▽▽ -------------------------- */ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>js問題</title> <style type="text/css"> body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6, pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{ margin:0;padding:0; } img{ border:0; } h1 { font-size:22px; } h2 { font-size: 12px; } #box { width: 500px; overflow:hidden; /*子要素にfloatがあり、高さ算出のため使用*/ } div.box { width: 150px; float: left; background-color: #CCC; margin-left: 10px; } li { list-style:none; } div#ans { width: 500px; height: 20px; clear:both; margin-top: 20px; margin-bottom: 30px; } div#ans p { width: 150px; background-color: #FC6; margin-left:10px ; float:left; } div#ans_btn { width: 200px; clear:both; margin-left:200px; } </style> </head> <body> <h1>Q.問題</h1> <br /> <div id="box"> <div class="box"> <ul> <h2>問題その1</h2> <li><input type="radio" name="q0" value="1">あいうえお</li> <li><input type="radio" name="q0" value="2">正解</li> <li><input type="radio" name="q0" value="3">あいうえお</li> <li><input type="radio" name="q0" value="4">あいうえお</li> </ul> </div> <div class="box"> <ul> <h2>問題その2</h2> <li><input type="radio" name="q1" value="1">あいうえお</li> <li><input type="radio" name="q1" value="2">あいうえお</li> <li><input type="radio" name="q1" value="3">正解</li> <li><input type="radio" name="q1" value="4">あいうえお</li> </ul> </div> <div class="box"> <ul> <h2>問題その3</h2> <li><input type="radio" name="q2" value="1">正解</li> <li><input type="radio" name="q2" value="2">あいうえお</li> <li><input type="radio" name="q2" value="3">あいうえお</li> <li><input type="radio" name="q2" value="4">あいうえお</li> </ul> </div> </div> <div id="ans"> <p>問い1答え</p> <p>問い2答え</p> <p>問い3答え</p> </div> <div id="ans_btn"> <input type="button" value="ここを押すと解答" onClick="saiten()"> </div> <script type="text/javascript"> var ans = ["2","3","1"]; function saiten(){ var p_node=document.getElementsByTagName("p"); for(var i=0;i<ans.length;i++){ if(ans[i]==document.getElementById("q"+i).value){ p_node[i].innerHTML = "正解"; }else{ p_node[i].innerHTML = "間違い"; } } } </script> </body> </html> /* ----------------△△△ここまで△△△------------------------ */ よろしくおねがいします。
- ベストアンサー
- JavaScript
- komado45oji4768
- 回答数4
- javascript 問題と答え
独学でjsをやっているのですが、わからないところがあるので質問させてください。 ラジオボタンを選択し、解答ボタンクリックで、オレンジの欄に解答が出るようなプログラムを書いたのですが、実行されません。どこが間違っているのでしょうか。 /* ---------------- ▽▽▽ここから▽▽▽ -------------------------- */ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>js問題</title> <style type="text/css"> body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6, pre,code,form,fieldset,legend,input,textarea,p,blockquote,th,td{ margin:0;padding:0; } img{ border:0; } h1 { font-size:22px; } h2 { font-size: 12px; } #box { width: 500px; overflow:hidden; /*子要素にfloatがあり、高さ算出のため使用*/ } div.box { width: 150px; float: left; background-color: #CCC; margin-left: 10px; } li { list-style:none; } div#ans { width: 500px; height: 20px; clear:both; margin-top: 20px; margin-bottom: 30px; } div#ans p { width: 150px; background-color: #FC6; margin-left:10px ; float:left; } div#ans_btn { width: 200px; clear:both; margin-left:200px; } </style> </head> <body> <h1>Q.問題</h1> <br /> <div id="box"> <div class="box"> <ul> <h2>問題その1</h2> <li><input type="radio" name="q0" value="1">あいうえお</li> <li><input type="radio" name="q0" value="2">正解</li> <li><input type="radio" name="q0" value="3">あいうえお</li> <li><input type="radio" name="q0" value="4">あいうえお</li> </ul> </div> <div class="box"> <ul> <h2>問題その2</h2> <li><input type="radio" name="q1" value="1">あいうえお</li> <li><input type="radio" name="q1" value="2">あいうえお</li> <li><input type="radio" name="q1" value="3">正解</li> <li><input type="radio" name="q1" value="4">あいうえお</li> </ul> </div> <div class="box"> <ul> <h2>問題その3</h2> <li><input type="radio" name="q2" value="1">正解</li> <li><input type="radio" name="q2" value="2">あいうえお</li> <li><input type="radio" name="q2" value="3">あいうえお</li> <li><input type="radio" name="q2" value="4">あいうえお</li> </ul> </div> </div> <div id="ans"> <p>問い1答え</p> <p>問い2答え</p> <p>問い3答え</p> </div> <div id="ans_btn"> <input type="button" value="ここを押すと解答" onClick="saiten()"> </div> <script type="text/javascript"> var ans = ["2","3","1"]; function saiten(){ var p_node=document.getElementsByTagName("p"); for(var i=0;i<ans.length;i++){ if(ans[i]==document.getElementById("q"+i).value){ p_node[i].innerHTML = "正解"; }else{ p_node[i].innerHTML = "間違い"; } } } </script> </body> </html> /* ----------------△△△ここまで△△△------------------------ */ よろしくおねがいします。
- ベストアンサー
- JavaScript
- komado45oji4768
- 回答数4
- 3つのテーブルを結合させたSQL文について
3つのテーブルを結合させたSQL文について作成方法を教えてください。 よろしくお願いいたします。 【テーブル構成】 テーブル名---項目名/項目名・・・です。 tblA---id/del_flg/name tblB---id/del_flg/add tblC---id/del_flg/family 各テーブルはidによりリンクされます。 tblAのdel_flgは在籍者=0 退職者=1で、一人1レコードです。 tblBでは住所管理をしています。 旧情報を残したいので、更新時には新たにdel_flg=0でレコードを作成し、既存レコードはdel_flg=1に更新します。 tblCは、既婚者のみ作成されるレコードです。 つまり、tblBとtblCは、レコードが存在しない、あるいはdel_flg=0のみ、del_flg=0とdel_flg=1が混在 のどれかのパターンになります。 【やりたいこと】 いま、これらすべてのテーブルを全部つなげて、在籍している人の情報だけ集めたいのです。 tblAからはdel_flg=0のレコードをすべて取得したうえで、tblBとtblCにdel_flg=0のレコードがあればその情報も取得したい。 【経過】 select * from (tblA inner join tblB on tblA.id = tblB.id ) inner join tblC on tblA.id = tblC.id とりあえずwhere条件をつけなくても、tblCに存在している人しか取得ができないのです。 where条件も含めて、上記条件のもと、希望するようなSQLの組み立て方をご教授ねがいたいのでよろしくお願いいたします。 できれば、早目の回答が希望です。