-PR-
解決済み

演算子について教えてください。

  • 困ってます
  • 質問No.1358044
  • 閲覧数46
  • ありがとう数4
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 73% (14/19)

お世話になります。
itemが"えんぴつ"と"ボールペン"どちらかが、送られてきてgoodsが"なし"場合には1000円を表示するスクリプトを書いたのですが、1.phpで何も表示されません。(選択してくださいは表示されます)if文で1つずつ処理することが面倒なので、下記のようにしたいのですがどのようにすればよいのでしょうか?ご教授ください。よろしくお願いいたします。

<form name="form1" method="post" action="1.php">
<input type="radio" name="item" value="なし" checked>なし
<input type="radio" name="item" value="えんぴつ" >えんぴつ
<input type="radio" name="item" value="ボールペン">ボールペン

<input type="radio" name="goods" value="なし" checked>なし
<input type="radio" name="goods" value="電卓">電卓
<input type="radio" name="goods" value="ボールペン">本
<input type="submit" name="Submit" value="送信">
</form>

-------------------------------------------------
01.php
<?php
if($item=="0" && $goods=="0" ){
print "選択してください。";
}
elseif(($item=="えんぴつ" or $item=="ボールペン") && $goods=="0"){
print "1000円";
}
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル13

ベストアンサー率 47% (522/1092)

#1様のご指摘通りだとおもいますが、補足として。

PHPの設定ファイル(php.ini)が見られる環境であれば、register_globalsという変数がどのように定義されているか確認してみてください。

register_globals = onであれば、フォームなどで送信されてきた値は、その名前と同じ変数に自動的にセットされます。

name="item" value="なし"であれば、自動的に$itemが定義されそのvalueがセットされている。

バージョンいくつかからは忘れてしまいましたが、register_globalsはセキュリティの観点から、デフォルトではoffに設定されるようになりました。

つまり送信されてきたデータはなんらかの方法で、明示的に変数を定義し、それに値をセットしなくてはなりません。

その方法のひとつは、#1様がご教示されている$_POST["item"]です。

print "選択してください";
が実行されている点から、register_globals=offと設定されているため、01.phpにおいては、$itemや$goodsといったものは送られてきたデータとはまったく関係のない変数として定義されているのでしょう。
しかし、値をセットしていないので、if文に引っかかっているのだとおもわれます。

<?php
$item = $_POST["item"];
$goods = $_POST["goods"];
if($item=="0" && $goods=="0" ){
print "選択してください。";
}
elseif(($item=="えんぴつ" or $item=="ボールペン") && $goods=="0"){
print "1000円";
}
?>
として、送信されてきたデータを受け取ってやれば大丈夫だとおもいます。

なにか参考にされた書籍やサイトがあるのでしょうか。
そちらにregister_globalsについて記述されていなければ、それが書かれたときのPHPのバージョンが古いか、不親切なものかもしれません。

詳しくは「register_globals PHP」などで検索すれば詳しく書かれたサイトなど解説文書が簡単に見つかるかとおもいます。
お礼コメント
Autosound

お礼率 73% (14/19)

ご回答ありがとうございます。当方のレンタルサーバーの使用環境がregister_globals="on"な為$_POST['item']が不必要です。本日、もう一度同じスクリプトで試してみたのですが、動作確認できました。不思議です....。時間によって左右されのでしょうか?ご回答ありがとうございました。
投稿日時 - 2005-04-30 13:45:54

その他の回答 (全2件)

  • 回答No.1
レベル10

ベストアンサー率 22% (29/131)

"or"って書いてもいいんですね。
初めて知りました。
でもandを&&で書くならorも||にした方がいいのでは?

あと、postで送られた変数は$_POST['item']と書かないと
値が取り出せなかったと思うのですが・・・

if($item=="0" && $goods=="0" ){
print "選択してください。";
}
の$itemと$goodsは前のファイルのitemとgoodsではなく、
新しく登場したワーク変数だと解釈されているのではないでしょうか?
お礼コメント
Autosound

お礼率 73% (14/19)

ご回答ありがとうございます。"or"や"&&"また、"||"や"and"も事前に使用したのですが、動作しませんでした。また、レンタルサーバーの使用環境がregister_globals="on"な為$_POST['item']が不必要です。本日、もう一度同じスクリプトで試してみたのですが、動作確認できました。不思議です....。時間によって左右されのでしょうか?ご回答ありがとうございました。
投稿日時 - 2005-04-30 13:44:21


  • 回答No.2
レベル12

ベストアンサー率 32% (245/765)

<input type="radio" name="goods" value="なし" checked>なし
つまり、なしのvalueが"なし"ですから、$goods=="なし"にならないといけないんじゃないですか?

こういう場合はif文の前で変数の値(この場合は$goods)の値をprint文で表示して、意図どおりの値が入っているかどうか確認すると良いです。
お礼コメント
Autosound

お礼率 73% (14/19)

ご回答ありがとうございます。$goods=="なし"ですが、UPした瞬間に気づいたのですが、訂正が出来なかったのもので申し訳ございません。
投稿日時 - 2005-04-30 13:36:40
このQ&Aのテーマ
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-

特集


抽選で合計100名様にプレゼント!

ピックアップ

ページ先頭へ