PHP初心者です。テキストを記入し、押したボタンによって、違うURLに

飛ばすフォームを作成しようとしています。
<?php
$strKey=urlencode($_POST[’keywd’]);
switch($_POST[’xyz’]){
case ”aa”:
$url=”http://www.aaa”;
break;
case ”bb”:
$url=”http://www.bbb”;
break;
}
header(”Location: ”.$url.$strKey);
?>
と設定し、フォームで
<form method=”POST” action=”○○.php”>
<input type=”text” name=”keywd” size=”20” />
<input type=”submit” name=”xyz” value=”aa” />
<input type=”submit” name=”xyz” value=”bb” /></form>
とすると、「aaa」という表示でボタンは動くのですが、
このvalueを任意の文字に変えたいのです。
どの様に変更すれば、良いのでしょうか?
どうか、よろしくお願いします。

回答の条件
  • URL必須
  • 1人2回まで
  • 登録:2006/02/15 15:43:07
  • 終了:--

回答(11件)

id:Asuca No.1

Asuca回答回数281ベストアンサー獲得回数42006/02/15 16:16:26

ポイント16pt

<input type=”submit” name=”xyz” value=”aa” />

の aa を消せば

<input type=”submit” name=”xyz” value=”” />

任意の文字になりますが?意味が違うかな?

id:edoman

わかりにくくて、すみません!

「value=”aa”」と記述しないと作動しないのです。

普通「value」には、表示させたい文字を乗せると思うのですが、

これに「aa」としか表示させることができなくて、困ってる次第です。

2006/02/15 16:39:52
id:PaulYamamoto No.2

Paul回答回数113ベストアンサー獲得回数22006/02/15 16:22:33

ポイント16pt

えーーーっと

<input type=”submit” name=”aa” value=”aa” />

<input type=”submit” name=”bb” value=”bb” />

<input type=”submit” name=”xyz” value=”送信” />

<input type=”submit” name=”xyz” value=”修正” />

とか文字を2バイトにしたいのでしょうか???


(上記だと仮定して)

<input type=”submit” name=”aaa” value=”送信” />

<input type=”submit” name=”bbb” value=”修正” />

と言う風にname属性を変えて、

if(!empty($_POST[’aaa’]))

と言う風にしたほうが楽です。


間違ってたらポイント不要なので

質問を具体的にしてコメントお願いします。

id:edoman

言葉足らずで、ご迷惑おかけします。

おっしゃる通り、文字を2バイトにし、ボタンは5個くらい

設定したいのです。

例えば、ヤフーのトップページの検索に「検索」と「辞書」が

ありますが、こんな風にするにはどうすれば良いのかなと。

仮定として教えてもらったように試してみたのですが、

動きませんでした。

name=”xyz”に「case ”aa”」と「case ”bb”」の区別を

付けられないものでしょうか?

「name=”xyz[aa]”」とすると作動しないのです。

2006/02/15 17:01:25
id:Asuca No.3

Asuca回答回数281ベストアンサー獲得回数42006/02/15 16:54:06

あぁ 意味わかりました

ボタンの表示を変えたかったのね

<form method=” POST” action=” ○○.php”>

<input type=”text” name=”keywd” size=”20”>

<INPUT type=”submit” name=”xyz” value=”aa”>

<input type=”submit” name=”name” value=”任意の名前”>

</form>

FROM構文は FROM内で与えられた変数全部持っていきますから上記のようの関係ない名前でボタン作ってその上に書いてあれば良いかと。。

id:edoman

こう書くと「aa」と「任意の名前」の二つのボタンができて、

「aa」は作動して、「任意の名前」が作動しなかったです。

僕があまりわかってないので、混乱させてすみません。

PHPも質問するのも難しいです。

2006/02/15 17:11:37
id:PaulYamamoto No.4

Paul回答回数113ベストアンサー獲得回数22006/02/15 17:11:34

2の回答者です。


emptyじゃなくて

array-key-exists() か isset()を試してみてください。

(失礼しました)

array-key-exists($_POST, ”aaa”)

isset($_POST[”aaa”])


if($_POST[”aaa”] == ”2バイト文字”)でも

行けるかもしれないけど、ブラウザによって

挙動が異なる可能性もありえます。

id:edoman

ご丁寧にありがとうございます。

これで動きそうな感じなのですが、僕の記述方法が悪いのか、

なぜか作動しません。。

もし、お手数でなければ、最終的にどう書けばいいのかも

教えてもらえたら最高です!

本当に初心者まるだしで、すみません。

2006/02/15 17:35:36
id:DW230 No.5

DW230回答回数2ベストアンサー獲得回数02006/02/15 17:20:21

ポイント16pt

<form method=” POST” action=” ○○.php”>

<input type=”text” name=”keywd” size=”20”>

<INPUT type=”hidden” name=”xxx” value=”aa”>

<INPUT type=”hidden” name=”yyy” value=”bb”>

<input type=”submit” name=”name” value=”任意の名前”>

</form>

隠したい変数はsubmitでなくhiddenを使います

id:edoman

ボタンの表示はOKになりました!

いや本当に助かりました。ありがとうございます!

ですが、hiddenを2つ設定し、ボタンも2つ置くと、どちらのボタンも

あとで書いた方(ここでは「bb」)のURLに飛んでしまいます。

hidden部分のvalue属性をsubmitボタンそれぞれに反映させる

必要があると思うのですが、これはどうすれば良いのでしょうか?

あと、もう少しで作動する感じです。

どうか、よろしくお願いします。

2006/02/15 17:59:52
id:DW230 No.6

DW230回答回数2ベストアンサー獲得回数02006/02/15 18:30:44

http://www.dw230.com/tool/

SEO 対策 検索ツール : DW230

ひとつのボタンで2つの変数を送るなら上記でそのままOKです

ボタン2つで別の動きをするのであれば

FROMごと追加しなければいけません


1個目

<form method=” POST” action=” ○○.php”>

<input type=”text” name=”keywd” size=”20”>

<INPUT type=”hidden” name=”xxx” value=”aa”>

<input type=”submit” name=”name” value=”任意の名前”>

</form>

2個目

<form method=” POST” action=” ○○.php”>

<input type=”text” name=”keywd” size=”20”>

<INPUT type=”hidden” name=”aaa” value=”bb”>

<input type=”submit” name=”name” value=”任意の名前”>

</form>


おまけ

この状態だと設置後下に1行分空白が出来てしまうので

FROMに属性を付けると良いでしょう


<form style=”margin-bottom: 0” method=” POST” action=” ○○.php”>

こんな感じです

id:edoman

これだと確かに希望通りの動作はします。

ですが、テキスト入力欄が2つになってしまいます。

1つのテキスト入力欄にsubmitボタンを2つ付けるのは

無理なのでしょうか?お手数かけてすみません。

できれば、ヤフーのようにと、思っていたのですが。。

難しいです。

2006/02/15 18:53:41
id:dungeon-master No.7

dungeon-master回答回数571ベストアンサー獲得回数402006/02/15 18:41:33

ポイント15pt

サーバーが何で動いているかはともかくとして、以下のようにJavascriptのお世話になっては?


<form method=”POST” action=”○○.php”name=”kkk”>

<input type=”text” name=”keywd” size=”20” />

<input type=”text” name=”xyz” size=”40” value=”” />

<input type=”submit” name=”sbm” value=”エイエイ” onClick=”document.kkk.xyz.value=’aa’;”/>

<input type=”submit” name=”sbm” value=”ビイビイ” onClick=”document.kkk.xyz.value=’bb’;”/>

</form>


また、以下の様にHiddenを使わない手段もありますが、一瞬フォームが乱れるかも。

<form method=”POST” action=”○○.php”name=”kkk”>

<input type=”text” name=”keywd” size=”20” />

<input type=”submit” name=”sbm” value=”エイエイ” onClick=”this.value=’aa’;”/>

<input type=”submit” name=”sbm” value=”ビイビイ” onClick=”this.value=’bb’;”/>

</form>

id:tezcello No.8

tezcello回答回数460ベストアンサー獲得回数692006/02/15 18:56:46

ポイント15pt

送信ボタンは複数同じ名前で設定しても、チャンと value で区別できれば問題無いはずなので、元に戻してしまいました。


自前のサーバで試してみたのですが、Shift-JIS では上手くいかないみたいでした。

PHPの内部処理コードとの不一致が影響するのかも。(デフォはShift-JISじゃなかったはず)

文字コードがhtmlとphpとで合っていないとか、文字化けとかがあり得るのでEUCにしてみました。


test2.html


<html>

<head>

<meta http-equiv=”Content-Type” content=”text/html; charset=EUC-JP”>

<title>TEST2</title>

</head>

<body>

<form method=”POST” action=”test2.php”>

<input type=”text” name=”keywd” size=”20” />

<input type=”submit” name=”xyz” value=”サイトA” />

<input type=”submit” name=”xyz” value=”デフォルト” />

</form>

</body>

</html>


test2.php


<?php

$strKey=urlencode($_POST[’keywd’]);

switch($_POST[’xyz’]){

case ”サイトA”:

$url=”http://www.aaa”;

break;

case ”デフォルト”:

$url=”http://www.bbb”;

break;

}


print ”Location: ”.$url.$strKey.”<br />¥n”;

?>


それぞれをEUCで保存して、テキストボックスに”123456”をテストした所、

”サイトA” ボタンでは、

Location: http://www.aaa123456


”デフォルト” ボタンでは、

Location: http://www.bbb123456


となりました。

やりたかった事をハズしてますか?

id:edoman

いえ、やりたかったことは、この通りなのです!

僕もEUCで書いているのですが、

case ”サイトA”:

という様に、caseの後に「サイトA」と日本語を持ってくると、

作動しなくなってしまうのです。

これで動けば悩みもズバッと解決するのですが。

ですので、caseの後は、英語で表記し、フォームの

value部分を日本語で表示させたいのです。

これは無理でしょうか?

ややこしくなってきてしまいました。申し訳ないです。

P.S.

コメントせずに次の回答へ行ってしまいました。

「dungeon-master」さんの方式も試してみたのですが、

ダメみたいでした。サーバーも関係あるのでしょうか?

ちなみにcside-2nd( http://www.cside-2nd.jp/ )で、

PHP自体は大丈夫なのですが。

2006/02/15 19:35:42
id:chankaz No.9

chankaz回答回数53ベストアンサー獲得回数32006/02/15 19:22:22

ポイント15pt

「ヤフーのように」ということですので、

↓これでいかがですか。


<?php

if (isset($_POST[’keywd’])) {


//キーワードをエンコード

$strKey = urlencode($_POST[’keywd’]);


//submitボタンにより分岐

if ($_POST[’aa’]) {

$url = ”http://www.aaa”;

} elseif ($_POST[’bb’]) {

$url = ”http://www.bbb”;

} elseif ($_POST[’cc’]) {

$url = ”http://www.ccc”;

}


//それぞれのurlに飛ばす

header(”Location: ”.$url.”?keywd=”.$strKey);

exit;

}

?>


<form action=”test.php” method=”post”>

<input type=”text” name=”keywd” size=”20”>

<input type=”submit” name=”aa” value=”(aaの名前)”>

<input type=”submit” name=”bb” value=”(bbの名前)”>

<input type=”submit” name=”cc” value=”(ccの名前)”>

</form>

id:edoman

どうもこの記述でも作動しないみたいです。

「switch文」と「if else if文」の明確な違いも

分かっていないので、もしかしたら僕が根本的に、

最初から勘違いしてしまっているのかもしれません。

2006/02/15 21:12:10
id:tezcello No.10

tezcello回答回数460ベストアンサー獲得回数692006/02/15 20:14:14

ポイント46pt

動作確認をしたファイルをそのままコピー&ペーストしているので、全く動かない事は無いように思いますが...

テストしたPHPはversin 5.0.3 でした。影響があるでしょうか?


> caseの後ろに「サイトA」...

動作しなくなるとは一致する物が無くて、$url が空のままということでしょうか?

という事は、正しく比較できていないという事でしょうから

$case1=”サイトA”;

$case2=”デフォルト”;

の様に変数に置換えて(switch 内では、case $case1: の様にして)みては。

これなら、

switch の前で、

var_dump($_POST);

var_dump($case1);

などとして、確認出来るでしょう。


case で比較するのは $POST_[’xyz’] の値、つまり value で与えた属性ですから、同じにしないといけません。

id:edoman

できました!

ようやくできました!

いや、本当に助かりました。

これで生きていけます。

さっきは、なぜか画面が真っ白に表示されたのですが、

これならできました!

お手数かけました。

みなさんありがとうございます!

2006/02/15 21:36:58
id:dungeon-master No.11

dungeon-master回答回数571ベストアンサー獲得回数402006/02/15 21:06:50

ポイント31pt

8の回答、説明が不足して申し訳ありません。


<form method=”POST” action=”○○.php”name=”kkk”>

<input type=”text” name=”keywd” size=”20” />

<input type=”text” name=”xyz” size=”40” value=”” />

<input type=”submit” name=”sbm” value=”エイエイ” onClick=”document.kkk.xyz.value=’aa’;”/>

<input type=”submit” name=”sbm” value=”ビイビイ” onClick=”document.kkk.xyz.value=’bb’;”/>

</form>


”と’を半角に置換えるのを忘れないようにください。

PHP側では、xyzの値を switchに掛けてください。比較する文字列はASCII (”aa”や”bb”)の方です。

(回答8の下の例では、switchに掛けるのはsbmの値になっていました。)


マルチバイト文字での比較がうまくいかないのは、サーバーの種類に関係する可能性はあります。

mb_convert_encodingを使って、強制的にコードをマッチさせることができるかもしれません。

switch( mb_convert_encoding($_POST[”xyz”], ”UTF-8”, ”auto”) ){

場合によっては”UTF-8”を”EUC-JP”など別の指定に…

id:edoman

ご親切にありがとうございます!

”と’を半角に変えるのは、なんとかセーフで

やっておりました。

1つ上の回答のおかげで、なんとか動くようになりました。

この方法もこれから試してみます!

「onClick=」を使うのは参考になります。

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

みなさんの優しさに触れて、嬉しいです。

2006/02/15 21:42:27

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません