人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

【解決に200ポイント】

phpです。

$stm_num['1'] = $_GET['stm_num'];
echo $stm_num['1'];

でなぜか、
$_GET['stm_num'] = 70
のときに、
$stm_num['1'] = 7

となってしまいます。
多分わたしが良く分かってないせいだとおもうのですが、考えられる原因を教えてください。

●質問者: sharia
●カテゴリ:コンピュータ インターネット
✍キーワード:echo PHP ポイント
○ 状態 :終了
└ 回答数 : 6/6件

▽最新の回答へ

1 ● GEN111
●19ポイント

これだけでは何とも言えませんが、

実は70が7O(ななオー)だとか。

◎質問者からの返答

ありがとうございます!

70であることは間違いありません。

ちなみに、その間のコードを書くと、

if ($_GET['stm_num'] == "") {

$stm_num['1'] = 1;

} else {

$stm_num['1'] = $_GET['stm_num'];

}

for ($count_f=1;$count_f<10;$count_f++) {

$count_w = 1;

$count_n = 1;

while(true) {

echo $stm_num['1'];

です。


2 ● GEN111
●19ポイント

20や30の時も 2 や 3 になるのでしょうか。

また、

$_GET['stm_num'] = 7 ; // 一桁

$_GET['stm_num'] = 700 ; // 三桁以上

の場合はいかがでしょう。

◎質問者からの返答

そうなりました。

もう書き手としては、早急にかいけつしてほしい問題です。

はてなに、証拠プリントスクリーンが導入されるのを、非常に楽しみにしているのですが。

あ、ちなみに、環境を言わねばと思いました。

ロリポップです。


3 ● Mook
●18ポイント

下記で試してみましたが、まったく問題ありませんでした。

<html>
<head>

</head>
<body>
<form method="GET">
SUBMIT VALUE = 

SET NEW VALUE
<input type="text" name="stm_num"> <input type="submit" value="OK"> </body> </html>

気になったのは変数を配列にするのは何か意味があるのでしょうか。

$stm_num = $_GET['stm_num'];

でよいと思うのですが。

また、この処理の前で、

 extract($_GET);

などとしていませんか?

これは、GET を name で定義されてたものに展開するので、

$stm_num が定義されます。

このあと、$stm_num[1] は変数の一部をとってくることになるので期待しない動作になります。

◎質問者からの返答

うわー。

欲しい情報です。

再帰なんです。

この辺の、仕様の境界は、難しくなりがちですよね?

> extract($_GET);

してません。

ポイントは惜しみません。

満足いくまで出します。

限界5000ぐらいは出します。

教えてください。


4 ● Mook
●18ポイント

先ほどプレ記法で、肝心な部分が消えてました。

スーパプレ記法で再掲載します。

<html>
<head>
<?
 if ( isset( $_GET['stm_num'] ) ) {
 $stm_num[1] = $_GET['stm_num'];
 } else {
 $stm_num[1] ="NO VALUE";
 }
?>
</head>
<body>
<form method="GET">
SUBMIT VALUE = <?=$stm_num[1]?><br><br>
SET NEW VALUE<br>
<input type="text" name="stm_num">
<input type="submit" value="OK">
</body>
</html>

先ほどのはポイント不要です。


差し支えなかったら、プログラムの関連部分の全容を

掲載できませんか。

(すくなくとも While の終わりまで)


後ほど(8時以降)内容を検討して回答させていただきたいと思います。

◎質問者からの返答

ありがとうございます!

えーと、whileの終了まで行くと140行近くになります。

直後にSQL文になるので、そこへの入力チェック用にechoしているのですが、これがどうもおかしいことが分かったという感じです。


5 ●
●18ポイント

まず、処理のはじめの部分で以下の内容を追記して $_GET の内容を確認してみてはいかがでしょうか。

var_dump($_GET);

これでもともと正しく取得できていないのか、それとも処理の途中であやまって値を書き換えてしまったのか切り分けられるはずです。

前者の場合の対応方法はあまり思い浮かびませんが、後者であれば、それぞれの処理の前後で var_dump($_GET) や var_dump($stm_num) とすることで、どの時点で問題が発生したのか分かると思います。

また、GETで値を取得しているのであれば、以下のようにURLに値が表示されていませんか。

http://example.com/test.php?stm_num=70

(個人的にはstr_split()などを使ってどこかで値を書き換えてしまっている可能性が高いような気がしますが。)

また、可能な限り全ての情報を公開した方が解決は早いと思います。

ソースコードも1番目の回答へのコメントの内容では括弧が閉じられておらず、無限ループしそうな内容です。

もう少し処理が見通せるようにコード(できれば全部)を公開されてみてはいかがでしょうか。

参考になれば幸いです。

◎質問者からの返答

echo $stm_num['1'];

を、

echo $_GET['stm_num'];

とすれば、70が出力されます。

原因が、

$stm_num['1'] = $_GET['stm_num'];

にあるとまでは追っていると思ってはいるのですが・・・。

>また、可能な限り全ての情報を公開した方が解決は早いと思います。

ソースコードも1番目の回答へのコメントの内容では括弧が閉じられておらず、無限ループしそうな内容です。

もう少し処理が見通せるようにコード(できれば全部)を公開されてみてはいかがでしょうか。

ありがとうございます。

こういう場合、どうしたらよいのでしょうか・・・。


1-5件表示/6件
4.前の5件|次5件6.
関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ