【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集

前質で→ http://oshiete1.goo.ne.jp/qa4142221.html
#print "<option value=\"$day1\">$day1"; で出来たのですがw
dayの日範囲を多くするとかなり長くなってしまい(T_T)
(初心者のくせに)foreachを使ってみようかと
エスケープしたりダブルコーションにしたり色々やっても・・・
<option>に月日が表示されません(T_T)
基本的に間違っているのでしょうか・・・ お願いします。
*他にも変なところがあったら教えて下さい。

--------------------------------------
<select name=dd><option value="なし" selected> ↓ <option value="なし">指定なし
EOM
foreach (0 .. $#pl) {
if ($in{'plan'} eq $_) {
print "<option value=\"$_\">$pl[$_]\n";
} else {
print "<option value=\"$_\">$pl[$_]\n";
}
}
print "</option></select>\n";
#--------------------------------------
### ↑メイン.cgiです。↑

### ↓ サブ.cgiです。↓
#--------------------------------------
# 時間
$time = time();

# 範囲日
$day1 = day0($time + (86400 * 2));
$day2 = day0($time + (86400 * 3));
$day3 = day0($time + (86400 * 4));
############ 上下の行のday数が14日間位まで続く・・・
@pl = ('$day1', '$day2', '$day3');

# 日計算
sub day0{
my(@weekdayname) = ('日','月','火','水','木','金','土');
my $time = shift || time();
my $day0 = $time + (24 * 60 * 60);
my ($yyyy, $mm, $dd, $w) = (localtime($day0))[5,4,3,6];
$yyyy += 1900;
$mm += 1;
return(
sprintf('%4d/%2d/%2d(%s)', $yyyy, $mm, $dd, $weekdayname[$w])
);
}

A 回答 (3件)

forで日付の配列を作る処理は問題ないので、表示されないとすると、if文の条件が該当しないから表示されていないだけでしょう。



まずは、ifをなくしてすべて表示させてみてください。

それから、全体の流れから推測すると、このifは、選択済みのoptionタグか、そうでないoptionタグのどちらかを表示する分岐ではなかったのでしょうか?
    • good
    • 0
この回答へのお礼

表示されました!! 感謝感激

if 部文はその通りです。
最初に指摘された if 文のところです。
foreachは別のCGIをコピペしまして if else のところで片方にselectedがありました。
初期値optionにselectedがある為、素人考えで消しちゃいました┐(´ー`)┌
atom_seedさんに少しでも近づけるようにもっと勉強しますw。

本当にありがとうございました 10000 点の回答です!

お礼日時:2008/07/02 01:03

入れ替えるように回答を書いたつもりですし、実際そのように記入できているようですが、うまくいきませんか?



最初の質問のときには、
> @pl = ('$day1', '$day2', '$day3');
で、変数を展開すべきところをシングルクォートでくくってしまって、変数のまま出ていたと思いますが、
私の回答ではその方法をまるごと差し替えたので解決したはずなのですが。

何がしたくて、今どうなってるのか、ご自身でしか分からない部分はなるべく説明するようにしてもらえると回答しやすいです。

この回答への補足

はい、うまくいかないのです。
年月日のプルダウンがありましたので
$day1 $day2 $day3 をselect optionでの表示はできていました。
これの日間隔の変更を簡単にする為とソースを簡単にする為に記述した
foreachができませんでした。
$の展開が出来ない為だと思います。
そのまま$表示されたり、optionが空白で長くになったり"'$day1'""とかw

次に教えて頂いたfor(書いた場所が正しいのかもわからないのですが)
optionでは

なし
例1
と初期optionの3項目しか表示しなくて、その下は空白・空欄もありません。
メイン.cgiでは前に作った#$day2 = day0($time + (86400 * 3));の
$time とか $day2 とかを試しに表示させると(option以外の場所に)
1214922371  2008/ 7/ 3(木)とか正常に表示されますが
forで作った $day2 $day3 $day4....とかが普通に(option以外の場所にも)
表示されないのもforが作用していないの?と思います。
また、2..14 を 2..5 とかやっても表示されません。

foreachとかforとか初めてでそのへんはさわれないので
数字や名前等を書き換えたりしたのですが、何も変化ありません。
質問部分のif ($in{'plan'} eq $_) { 
は、pl に訂正してまして前の補足のが正しいです。

補足日時:2008/07/02 00:09
    • good
    • 0

# 範囲日


$day1 = day0($time + (86400 * 2));
$day2 = day0($time + (86400 * 3));
$day3 = day0($time + (86400 * 4));
############ 上下の行のday数が14日間位まで続く・・・
@pl = ('$day1', '$day2', '$day3');

シングルクォートは変数を展開しないので使い方が間違っています。
また、forを使えば短く書けます。
時間は計算済みの数字ではなく式を書いておくと、あとで読み直しやすいです。(&day0のなかでやっている方法をおすすめします)

for my $i ( 2 .. 14 ) {
  push( @pl, day0( $time + ( 60 * 60 * 24 * $i ) ) );
}

> 基本的に間違っているのでしょうか・・・ お願いします。
> *他にも変なところがあったら教えて下さい。

最初のif文で分岐した内容が同じものprintしていますので要注意です。

この回答への補足

笑わないでくださいね(T_T) forをどこに書けば良いのでしょうか?。

<select name=day><option value="なし" selected> ↓ <option value="なし">なし<option value="例1">例1
EOM
foreach (0 .. $#pl) {
if ($in{'pl'} eq $_) {
print "<option value=\"$_\">$pl[$_]\n";
}
}
print "</option></select>\n";
#--------------------------------------
### ↑メイン.cgiです。↑

### ↓ サブ.cgiです。↓
#--------------------------------------
# 時間
$time = time();

# 範囲日
for my $i ( 2 .. 14 ) {
push( @pl, day0( $time + ( 60 * 60 * 24 * $i ) ) );
}

# 日計算
sub day0{
my(@weekdayname) = ('日','月','火','水','木','金','土');
my $time = shift || time();
my $day0 = $time + (24 * 60 * 60);
my ($yyyy, $mm, $dd, $w) = (localtime($day0))[5,4,3,6];
$yyyy += 1900;
$mm += 1;
return(
sprintf('%4d/%2d/%2d(%s)', $yyyy, $mm, $dd, $weekdayname[$w])
);
}

補足日時:2008/07/01 15:50
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!


おすすめ情報