質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.51%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

7回答

1856閲覧

PHP カウント 一定数で戻る

NemuriPrince046

総合スコア6

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2018/04/24 05:09

phpでカウンターみたいなもの作成しているのですが…

以下のソースだと、永遠に続いてしまいます。
・”増える”を押していって10までいったら1に戻る
・”減る”を押していって1までいったら10になる
ようにするにはどうすればよいでしょうか?

教えてください。お願いします。

php

1<!DOCTYPE html> 2<html lang="ja"> 3 4<head> 5 <title></title> 6 <meta charset="utf-8"> 7 <style> 8 </style> 9</head> 10 11<body> 12<?php 13 session_start(); 14 if (!isset($_SESSION["number"])) { 15 $_SESSION["number"] = 1; 16 } 17 if (isset($_POST["add"])) { 18 $_SESSION["number"]++; 19 } else if (isset($_POST["reset"])) { 20 $_SESSION["number"] = 1; 21 }else if(isset($_POST["pull"])){ 22 $_SESSION["number"]--; 23 } 24 echo $_SESSION["number"]; 25?> 26 27<form method="POST" action=""> 28 <input type="submit" name="add" value="増える"> 29</form> 30<form method="post" action=""> 31 <input type="submit" name="pull" value="減る"> 32</form> 33<form method="POST" action=""> 34 <input type="submit" name="reset" value="リセット"> 35</form> 36</body> 37 38</html>

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答7

0

10までいったら1に戻る

1までいったら10になる

いずれも実装されていないからでは?

ifで加算・減算後の値を確認し、10を超えたら1とし、1を切ってたら10にすれば良いと思います。

確認:
SESSIONの練習か何かでしょうか?
これくらいであればJavascriptの方が楽かなとは思います。

投稿2018/04/24 05:17

m.ts10806

総合スコア80731

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

文面の通り読むと$_SESSION["number"]は
加算だと19,減算なら210の範囲の値をとると読めるんですが
これ、正しいですか?

いや、どっちも1~10をループしたいねんってことなら

php

1 2 echo $_SESSION["number"]=($_SESSION["number"]+9)%10+1; 3

投稿2018/04/24 06:47

KazuhiroHatano

総合スコア7802

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

POST値のadd, pull, resetは構造上排他ですのでこんな風に足す案もありますよ。
PHP7系なら??(Null 合体演算子)が使えるので
数の調整はKazuhiroHatanoさんの案をお借りして…

PHP

1<?php 2session_start(); 3$num = ($_SESSION["number"] ?? 1) 4 + (isset($_POST["add"]) ? 1 : 0) 5 - (isset($_POST["pull"]) ? 1 : 0); 6$num = isset($_POST["reset"]) ? 1 : $num; 7$_SESSION["number"] = (($num + 9) % 10) + 1; 8echo $_SESSION["number"];

結構スッキリしましたね。

if文を消す策として三項演算子を多めに使いつつ改行を伴う演算も行っているので
実践では微妙かもしれませんね、あくまで案の一つという事でお願いします。

投稿2018/04/26 11:52

miyabi-sun

総合スコア21145

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

tajima さんの案の焼き直しw

php

1<?php 2session_start(); 3echo $_SESSION["number"]; 4 5if (isset($_SESSION["number"])) { 6 if (isset($_POST["add"])) { 7 $_SESSION["number"] += 1; 8 } 9 if (isset($_POST["pull"])) { 10 $_SESSION["number"] -= 1; 11 } 12 if (isset($_POST["reset"])) { 13 $_SESSION["number"] = 0; 14 } 15} else { 16 $_SESSION["number"] = 0; 17} 18$number = $_SESSION["number"] % 10; 19$_SESSION["number"] = $number + 10; 20?> 21<!DOCTYPE html> 22<html lang="ja"> 23<head> 24 <meta charset="utf-8"> 25 <title>title</title> 26</head> 27<body> 28 <form method="POST"> 29 <button type="submit" name="add" value="add">add</button> 30 <button type="submit" name="pull" value="pull" >pull</button> 31 <button type="submit" name="reset" value="reset" >reset</button> 32 </form> 33<?php echo $number + 1;?> 34</body> 35</html>

ループの条件、間違ってたんで修正しました^^;

投稿2018/04/24 06:44

編集2018/04/24 07:29
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そのまま実装すればよいかと思いますが、if文の書き方がわからないのでしょうか?

PHP

1<?php 2 session_start(); 3 if (!isset($_SESSION["number"])) { 4 $_SESSION["number"] = 1; 5 } 6 if (isset($_POST["add"])) { 7 $_SESSION["number"]++; 8 if($_SESSION["number"] > 10) $_SESSION["number"] = 1; 9 } else if (isset($_POST["reset"])) { 10 $_SESSION["number"] = 1; 11 }else if(isset($_POST["pull"])){ 12 $_SESSION["number"]--; 13 if($_SESSION["number"] < 1) $_SESSION["number"] = 10; 14 } 15 echo $_SESSION["number"]; 16?> 17

投稿2018/04/24 05:33

ttyp03

総合スコア16996

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

PHP

1<?php 2 session_start(); 3 if (!isset($_SESSION["number"])) 4 { 5 $_SESSION["number"] = 1; 6 } 7 else 8 { 9 if (isset($_POST["reset"])) 10 { 11 $_SESSION["number"] = 1; 12 } 13 else 14 { 15 $add = 0; 16 17 if (isset($_POST["add"])) { 18 $add = 1; 19 } 20 else if(isset($_POST["pull"])) 21 { 22 $add = -1; 23 } 24 25 $_SESSION["number"] = $_SESSION["number"] + $add; 26 $_SESSION["number"] = ($_SESSION["number"] > 10) 27 ? $_SESSION["number"] - 10 28 : ( ($_SESSION["number"] < 1)? $_SESSION["number"] + 10 : $_SESSION["number"] ); 29 } 30 31 } 32 33 echo $_SESSION["number"]; 34?>

投稿2018/04/24 05:25

編集2018/04/24 05:32
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

以下の文をechoしている部分と置き換えてもらえると動作するかと思います。

if ($_SESSION["number"] > 0) {
echo $_SESSION["number"] % 10 + 1;
} else {
$str = (string)($_SESSION["number"] * 0.9);
echo (strpos($str,'.'))? substr($str, strpos($str,'.') + 1, 1) + 1: 1;
}

投稿2018/04/24 05:20

編集2018/04/25 05:22
tajima

総合スコア25

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2018/04/24 05:25

うそーん…
退会済みユーザー

退会済みユーザー

2018/04/24 05:27 編集

ねぇ、タジー、-1 % 10 + 1 って、幾つだっけ?
tajima

2018/04/24 05:29

2ではないでしょうか!
退会済みユーザー

退会済みユーザー

2018/04/24 05:30

1まで行ったら次には10に戻らなきゃいけないんじゃなかったっけ?
退会済みユーザー

退会済みユーザー

2018/04/24 05:35

score13の未来ある若者に低評価つけてる奴いるし。寺テイラーは鬼ばっかだな…。
tajima

2018/04/24 05:37

あ、失礼しました。。
退会済みユーザー

退会済みユーザー

2018/04/24 05:38

よいのじゃ。
tajima

2018/04/24 06:54 編集

これでいかがでしょうか! マイナス値にも対応しました。 if ($_SESSION["number"] > 0) { echo $_SESSION["number"] % 10 + 1; } else { $str = (string)($_SESSION["number"] * 0.9); echo (strpos($str,'.'))? substr($str, strpos($str,'.') + 1, 1) + 1: 1; }
退会済みユーザー

退会済みユーザー

2018/04/24 06:14

中国雑技団からスカウト来そうじゃな。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.51%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問