phpでボタンを押したときに変数に値を代入してIF分を動かしたいのですが。うまくいきません。
<form method="post" action="jinkou.php" id="input">
<input type="submit" name="test" value="test"> </form>

$k = 0;
if(isset($_POST['test'])){
if ($k == 0) {
$k = 1;
echo "$k";
}elseif ($k == 1) {
$k = 0;
echo "$k";
}
}
こんな感じで書いてるのですが一回目は動くのですが二回目が動きません。
アドバイスお願いします。

A 回答 (1件)

ボタンを押した際に、一回目と二回目を区別する値を添えましょう



<?php
$param_k = (isset($_POST['test']))? $_POST['k']: '0';
$k = ($param_k == '0')? 1: 0;
echo $k;
?>

<form method=POST action=自分自身.php>
<input type=hidden name=k value="<?=$k?>">
<button type=submit name=test>test</button>
</form>
    • good
    • 1
この回答へのお礼

ありがとうございます。解決しました。

お礼日時:2017/04/21 10:16

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

このQ&Aと関連する良く見られている質問

Q.sub(/.+/,"aaaaaaa#{$&}"の置換開始行がずれるのなぜでしょうか?

f = ["1111111111111","2222222222222","3333333333333",]
f.each {|l|
p l.sub(/^.+$/, "aaaaaaa#{$&}bbbbbb")
p l
p ""
}
を Ruby1.8.7(2008-08-11patchlevel72)[i386-mswin32] で実行すると下記のように .sub(・・・) での置換開始行がずれました。なぜでしょうか?教えてくださいお願いします。
"aaaaaaabbbbbb"
"1111111111111"
""
"aaaaaaa1111111111111bbbbbb"
"2222222222222"
""
"aaaaaaa2222222222222bbbbbb"
"3333333333333"
""

Aベストアンサー

未検証。Rubyの経験殆どなし。

ですが,
http://www.ruby-doc.org/core/classes/String.html#M000831
>.sub(・・・) での置換開始行がずれました。
メソッド自体が,そういう仕様なんじゃないの?

If the method call specifies replacement, special variables such as $& will not be useful,
もし、メソッド呼び出しがreplacementを指定知る時,$&のような特殊な変数は役に立たないだろう。

>as substitution into the string occurs before the pattern match starts.
なぜなら,文字列への置き換えは【パターンマッチが始まる前】に行われるからだ。

However, the sequences \1, \2, etc., may be used.
\1,\2...等の変数が用いられるだろう。

#Howeverは訳すと今ひとつしっくり来ないので訳さず

未検証。Rubyの経験殆どなし。

ですが,
http://www.ruby-doc.org/core/classes/String.html#M000831
>.sub(・・・) での置換開始行がずれました。
メソッド自体が,そういう仕様なんじゃないの?

If the method call specifies replacement, special variables such as $& will not be useful,
もし、メソッド呼び出しがreplacementを指定知る時,$&のような特殊な変数は役に立たないだろう。

>as substitution into the string occurs before the pattern match starts.
なぜなら,文字列への置...続きを読む

Q{Ruby}ディレクトリ内の全てのファイルを操作

こんばんは。
最近Rubyでファイルのスクローリングをしているのですが、
以下のようなスクリプトを全てのファイルに適用したいと考えています。

1 fpath = '/home/edinet/E30479/S1002D1W/index.html'
2
3 text = ""
4
5
6 File.open(fpath).each do |f|
7 f.each_line do |line|
8
9 line.gsub!(/前事業年度特定投資株式/,"前事業年度")
10 line.gsub!(/当事業年度特定投資株式/,"当事業年度")
11
12 end
13 end
14
15
16 flag = nil
17 IO.foreach(fpath) do |line2|
18
19 case line2
20 when /保有目的が純投資目的以外/
21 flag = true
22 when /保有目的が純投資目的/
23 flag = false
24 end
25
26 text << line2.chomp if flag == true
27 end


Dir.globなどを使えば良いと思うのですが、具体的にはどのように記述すればよいのでしょうか?
ご教授の程お願い致します。

こんばんは。
最近Rubyでファイルのスクローリングをしているのですが、
以下のようなスクリプトを全てのファイルに適用したいと考えています。

1 fpath = '/home/edinet/E30479/S1002D1W/index.html'
2
3 text = ""
4
5
6 File.open(fpath).each do |f|
7 f.each_line do |line|
8
9 line.gsub!(/前事業年度特定投資株式/,"前事業年度")
10 line.gsub!(/当事業年度特定投資株式/,"当事業年度")
11
12 end
13 end...続きを読む

Aベストアンサー

あと、このプログラム、なんか変ですよ?

File.open(fpath).each

ここのeachって変ですよね。

f.each_line do |line|
line.gsub!(/前事業年度特定投資株式/,"前事業年度")

ここでの 変数lineに入っているのは、「ファイルから読み込んだ文字列」です。
ファイルの内容をメモリ上にコピーしたものです。
これを変更しても、元のファイルは変更されません。

また、一行読み込む度に次の行の内容になるので、gsubした結果はどこにも残りません。

Q#include int main(void) { int n1, n2; pu

#include <stdio.h>


  int main(void)

{

    int n1, n2;

    

    puts("2つの整数を入力してください");

    printf("整数1:27"); scanf("%d",&n1);

    printf("整数2:35"); scanf("%d",&n2);

    

    printf("それらの和は%dです\n",n1+n2);  

    return(0);

}

これで実行して
整数 1:27
整数 2:35
それらの和は62です
と表示したいですけど 整数1:27しか表示されませんどうすればいいですか?

Aベストアンサー

それって

整数 1:
 と画面に表示されて、入力待ちになるので
27[エンターキー]
 と入力すると、画面上は
整数 1:27
 となって、続けて
整数 2:
 と表示されて、入力待ちになるので
35[エンターキー]
 と入力すると、画面上は
整数 2:35
 と表示されて、続けて
それらの和は62です
 と表示されて終了する。

というものの実行結果が、画面上では

整数 1:27
整数 2:35
それらの和は62です

と見える、ってことでしょう。


> 整数1:27しか表示されませんどうすればいいですか?

scanfで入力を待っているのに、何も入力しないから、先に進まないだけです。

Q/(.)(\d\d)+(.)/ =~ "123456"のとき、 p $

/(.)(\d\d)+(.)/ =~ "123456"のとき、 p $2とすると、"45"となるのはなぜですか?
p $2 #=>23 となると思っていました。
そして、いったい23はどうすれば後方参照できるのですか?

Aベストアンサー

(\d\d)+ は、2つの数字の1回以上の繰り返しですから、"23"と"45"にマッチします。
ですから、$2には最後にマッチした"45"を指すことになります。

もし対象の文字列が"12345"であれば、"23"と"45"にマッチさせると最後の(.)にマッチする文字が無くなってしまうので、$2は"23"になりますね($3は"4")

> いったい23はどうすれば後方参照できるのですか?

/(.)(\d\d)/ =~ "123456"
p $2

ではダメでしょうか?

QRubyプログラムの引数($1)渡しに関して

お世話になります。前任者の作成したプログラムを読んでいるのですが、以下の部分が分からない為、ご教示頂ける方がいらっしゃれば、ご協力よろしくお願いいたします。

<エラーメッセージ表示部>
def usage
STDERR.print "\nusage: #$0 [-F/D] [-START/STOP] Filename \n"
exit 1
end


<オプション処理部>
while ARGV[0] =~ /^-/
case ARGV.shift
when /^-F(\d+)/ ; calling_num = $1.to_s
when /^-T(\d+)/ ; called_num = $1.to_s
when /^-START/ ; start_only = true
when /^-STOP/ ; stop_only =true
else ; usage
end
end

上記の $1へ値を渡すためには、コマンド入力時に特別な引数を渡す方法が必要なのでしょうか。


$ ruby -v check.rb -STOP Filename
⇒ 正常終了

$ ruby -v check.rb -F 012345678 Filename
⇒ STDERR.print 表示

お世話になります。前任者の作成したプログラムを読んでいるのですが、以下の部分が分からない為、ご教示頂ける方がいらっしゃれば、ご協力よろしくお願いいたします。

<エラーメッセージ表示部>
def usage
STDERR.print "\nusage: #$0 [-F/D] [-START/STOP] Filename \n"
exit 1
end


<オプション処理部>
while ARGV[0] =~ /^-/
case ARGV.shift
when /^-F(\d+)/ ; calling_num = $1.to_s
when /^-T(\d+)/ ; called_num = $1.to_s
when /^-S...続きを読む

Aベストアンサー

$ ruby -v check.rb -F 012345678 Filename

のように-Fと012345678の間にスペースが有る場合はARGVの中で別々の要素となります。
従ってこの場合は

when /^-F/ ; calling_num = ARGV.shift.to_s

とする必要があると思います。
-Fと012345678の間にスペースが無い場合はご提示のプログラムで問題ないのではないでしょうか。


人気Q&Aランキング

おすすめ情報