カテゴリー別アーカイブ: IT/言語

php::inputタグに値が入らない何で。

inputタグの中身に値を押し込んでいるが入らない。

何でだろう?と思ってphpではまりけり。

htmlをよく見たらこんなになっていた。


<input type="text" name="onamae" value="" id="onamae" class="onamae" value="お名前">

(=_=;)...value属性が2つある…こういうのチェックするコマンドがあれば便利かもしれないと、
ふと思いました。まあ、気をつけろという話ですけど。。。

(極論)IF文で分岐させるな。

if文は分判定文でありswitchは分岐文である。

換言すれば、if文を分岐に使ってはならない。

今日のプログラミング入門は、
「IF文によって分岐させましょう」などと平気で書いてあるが、
使えるからと言って使えるものを使うのは間違っている。

間違っていると言い切る理由は他にもある、それは、
判定をくだした後の処理は機能/関数に任せること。

こうすれば一本道になる。

if文は例外処理を行うためにあると、言い切る人もいる。

if文:例外処理、switch文:分岐、という使い分けをするのが望ましい。

(場合によりけりだと思うが上記の区別はつけたい。

date.getMonth()が微妙

date.getMonth()は+1しないと月の値にならない。

1月だったら0,3月は2,12月だったら11が返ってくる値。

なんでこんな仕様なんだろう。

配列に入っている値を返してて要素が0だから?

そんなこと理由にならないような。。

意味がわかりません。。。

[PHP]DNSサーバの変更時にご注意を

soapのキャッシュを無効にしてhttpdを再起動したところphpのWebアプリケーションが動かなくなった。

file_get_contents(): php_network_getaddresses: getaddrinfo failed: Name or service not known in

設定を戻してhttpdを再起動しても動作せず…原因はdnsサーバの設定/etc/resolv.confのIPを存在するDNSサーバに戻した。

キャッシュが有効だったときは、過去に正常に動いていたときのDNSキャッシュを使用していたので動いていたようだ。

※よくある?なんでこんな設定で動いていたのかわからない系のエラーかと。

今年は平成何年度か?(phpサンプル)

今年は西暦2017年です。

平成が続いているとすれば平成29年です。

----------

ソースコード


今年は西暦<?=date("Y")?>年です。

平成が続いているとすれば平成<?=(date("Y")-2000+12)?>年です。

※よく今が平成何年かわからなくなる私のためにつくってみました。なお、平成を算出する式は上記のコードのとおり、現在の西暦から2000を引いてから12を加えれば求められます。
※元年にあたる西暦を引いて1を加えて求めてもいいようですが、現在の西暦の頭の部分をとっぱらって2桁の定数(12)を加えと覚える方がシンプルで覚えやすいと思います。ただこれだと100年単位で誤った数字が返りますけど…まあそれは2100年が近づいたら考えたらいいでしょう。私はその頃もう生きていないのでどうでもいい。。

参考
detail.chiebukuro.yahoo.co.jp/qa/question_detail/q1137758541

crondでphpのfgetcsv関数が正常に動かない

叩いて動かす分には問題ないが、cronだとCSVの日本語がfgetcsvで動かない。

cronの設定ではよくある話。

パーミッションも問題ないのでおかしいなーと思ったら、
LANGという環境変数に応じてfgetcsv関数は動作がかわるとのこと。

export LANG="ja_JP.UTF-8"
batch.php

※cron設定時に(自分で叩いてデバックしてうまくいくことは確認すると思うが)、
 その時にcronで失敗する時は以下2点を疑うこと。
・環境変数の違いがないか。
・パーミッションに間違いがないか。

【参考】結構事例あり。
www.yuigahama.org/?p=370
tkuchiki.hatenablog.com/entry/2013/04/23/224125
yassu.jp/pukiwiki/index.php?crontab%A4%C7fgetcsv

javaScriptでonChangeでアンダーバー入りの関数が動かない/未定義になる。

タグ上のonChangeに定義済の関数xxxxx_bbbbb_ccccc()というような、
アンダーバーが上記のように2つ入った関数を呼び出すことができなかった。
not defined functionみたいなエラーになってしまう(FireFox33.0.2)。

以下のブログと同じような現象かと思います。
ragranje.blog73.fc2.com/blog-entry-25.html

アンダーバーをなし、または1つの関数にしたり、a_b_c()というような関数にしたら動いた。

意味がよくわからない。アンダーバー無くした関数にして回避したが、注意が必要。

[PHP]header関数でリダイレクトしても下部の処理は行われる

liginc.co.jp/programmer/archives/1140

よくよく考えればそりゃそうだ。headerが吐き出されてからクライアントでリダイレクト処理するのだから。

headerの下にある処理はすべて実行される。

これをexitやreturnやkillと同じステートメントと捉えてはいけないのだった。。。

session_start関数を実行していて、ブラウザにきちんとCookieも焼かれている。

…なのに次のページで復元できない。

サーバ側のセッション管理はsession_start関数はtrueを返しているから焼かれているはずだ…が、
指定のディレクトリにはセッション管理用の中間ファイルがない。

別のスクリプトで簡易セッション管理の仕組みをつくれば問題なく動く…非常に時間を無駄にしたが解決。

自分のあほさがいやになる。

なんか前にも嵌ったような嵌っていないような。忘れないようにメモしておこう。

もっとはやく気がつく脳にするにはどうしたらいいのだろう。

[JavaScript]ブロック要素の非標示を活用するサンプル。

右とか左とかにあるサイドバーがひょっこり隠れたり現れたりするといいのですが、いったいどうやるの?ということで実験...単純にブロック要素(div)の表示と非表示を切り替えればよいのではないかと思います。メインコンテンツのブロックをfroat(ラピュタ城の如し浮遊城)設定していておけばいい気がします。実験はしていませんが...。

obj.style.visibility = "hidden";

obj.style.display = 'none';

これらの違いは、赤緑ブロックと青ブロックの違いを見れば一目瞭然です。青ブロック(visibility:hiddenで指定している方)は忍者のように隠れているだけで存在しており、(初期状態の)緑ブロック(display:none)は舞台裏に完全にひっこみ空間から消えているような状態になる(赤いブロックの下に隠れているわけではなく、存在が無い状態)。

※課題:フェードイン/フェードアウトなどのアニメーションを実現するにはどうしたらいいか?
 (jQueryなどを分析した方がすぐわかりそうである)



コードはコチラ↓

<script type="text/javascript">
window.onload = function(){
  var obj = document.getElementById('div_j4k');
  var obj2 = document.getElementById('div_j5k');
  obj.style.display = 'block';
  obj2.style.display = 'none';
}
function j4k(){
  var obj = document.getElementById('div_j4k');
  var obj2 = document.getElementById('div_j5k');
  if(obj.style.display == 'none'){
    obj.style.display = 'block';
    obj2.style.display = 'none';
  }else{
    obj.style.display = 'none';
    obj2.style.display = 'block';
  }
}
function j3k(){
  var obj = document.getElementById('div_j3k');
  if(obj.style.visibility == 'visible'){
    obj.style.visibility = 'hidden';
  }else{
    obj.style.visibility = 'visible';
  }
}
</script>

<input type="button" onClick="j4k(); return false;" value ="赤/緑ブロック要素の非標示(none)">
<br />
<input type="button" onClick="j3k(); return false;" value ="青ブロック要素の非標示(hidden)">
<br />
<br />

<div id="div_j3k" style="width:100px; height:100px; background-color:#00F; visibility:hidden; float:left;">
</div>
<div id="div_j4k" style="width:100px; height:100px; background-color:#F00; float:left;">
</div>
<div id="div_j5k" style="width:100px; height:100px; background-color:#0F0; display:none; float:left;">
</div>
<div style="clear:left;"></div>
<br />