PHPを使用したWebプログラミングを始めました。
基本的な事かもしれませんが、ご教示頂けますと幸いです。
テキストボックスに文字列を入力してサブミットし、サーバサイドの入力チェック処理で
エラーとなった場合は入力ページに戻る、というのは一般的なWebサイトの仕組みかと思います。
上記入力ページで、JavascriptでDOMを操作してテキストボックスを一つ追加したとします。
2つのテキストボックスに文字列を入力してサブミットし、サーバサイドの入力チェック処理で
エラーとなって入力ページに戻った場合、入力時にDOM操作で増やしたテキストボックスは
消えてしまっているのですが、そのテキストボックスと値はどのように再現すればいいのでしょうか?
No.8ベストアンサー
- 回答日時:
そもそもいきなりサブミットするのはよくありません。
まず、クライアントサイドでチェック+もしDB参照がいるならAjaxで問い合わせをして、それでOKならサブミット、NGならそのページのままでエラーを表示します。
そうすればサブミット時にNGになるのは、故意に無理矢理不正な値を送信した場合のみですので、単にエラーページを表示するだけでよくなるのです。
ページの遷移やはなるべく抑えなければなりません。抑えれば抑えるほど構造が簡単になります。
ご教示頂きありがとうございました。
確かにクライアント側できっちり入力チェックをしていれば、サーバ側のチェックは故意の不正送信という事になり、不正送信ならば入力画面に戻す必要がないですね。
つまりそもそも質問内容にある処理は必要ないと。
有識者の方々に貴重なご意見を頂けて本当に勉強になります、ありがとうございます。
No.6
- 回答日時:
>>この問題を回避できるようなPHPフレームワークをご存知でしたら、ぜひご紹介下さい。
うーん、そういうDOMの問題を解決しようというのじゃあなく、「楽してWebサイトを作りたい、PHPやJavascriptをできるだけいじりたくない」という基準で、私は、Concrete5っていうフレームワークを選んで使っています。
このフレームワークを使い、カスタマイズして企業で商用利用されているところもあるようです。
No.5
- 回答日時:
バリデーションチェックをajaxで行う方法も一案かな思います。
ページ遷移しなくて済むので、動的に追加したパーツも消えません。
ご回答ありがとうございました。
確かにajaxはページ遷移もなく、UI、UXの観点からも好ましいかもしれませんね。ajax勉強します。
No.4
- 回答日時:
>>タグに修正が入った際は両方のソースに手を入れないといけなくなるのでメンテナンス性は下がると思うのですが、DOM操作を伴うWebサイトでは致し方ない事なのでしょうか?
メンテナンス低下は、仕方ないでしょう。それを問題とする方たちは、その苦労が減るようなフレームワークを探したり、ソースの自動生成の仕組みを考えたりするのだと思います。
重ねてのご回答、誠にありがとうございます。
私も技術者のはしくれとして、可能な限りメンテナンス性の低下は避けた方がいいと考えています。それで今まで苦労してきましたので。。。
この問題を回避できるようなPHPフレームワークをご存知でしたら、ぜひご紹介下さい。
No.3
- 回答日時:
<?php
$list = '';
$hoge = isset ($_POST['@hoge']) ? $_POST['@hoge']: array ('', '');
foreach ($hoge as $h)
$list .= '<li><input type="text" name="@hoge[]" value="'.$h.'">';
?>
<!DOCTYPE html>
<meta charset="utf-8">
<body>
<form action="#" method="post" id="piyo">
<ol id="fuga">
<?php echo $list; ?>
</ol>
<input type="button" value="add"> /
<input type="submit" value="submit">
</form>
<script>
function setValue (e) {
e.value = this;
}
function addList (f) {
var ol = f.querySelector ('#fuga');
var li = ol.querySelector ('li').cloneNode (true);
Array.prototype.forEach.call (
li.querySelectorAll ('input'), setValue, '');
ol.appendChild (li);
}
function handle (event) {
var e = event.target;
if ('button' === e.type)
if ('add' === e.value)
addList (e.form);
}
document.addEventListener ('click', handle, false);
</script>
具体的なコードのご提示ありがとうございます。
サーバ側でタグを生成しておいて、HTMLに反映させるんですね。大変勉強になりました、ありがとうございました。
No.2
- 回答日時:
POSTした値があればテキストボックスを表示する、というようなロジックではだめですか?
例えば下記。POSTの扱いについては省略しますので、適宜。
<?php if(isset($_POST[name''])): ?>
<input type='text' name='name' value='<?php print($_POST['name'])?>'
<?php endif; ?>
具体的なコードのご提示ありがとうございます。
ご提示頂いた方法ですと確かにDOM操作で追加したテキストボックスの値をサーバ側でコントロールできますね。
この場合、追加するinputタグの記述をDOM操作用のJavascript側とPOST後に表示用のPHP側の両方に持つ事になると思います。タグに修正が入った際は両方のソースに手を入れないといけなくなるのでメンテナンス性は下がると思うのですが、DOM操作を伴うWebサイトでは致し方ない事なのでしょうか?
No.1
- 回答日時:
>>エラーとなって入力ページに戻った場合、入力時にDOM操作で増やしたテキストボックスは
消えてしまっているのですが、そのテキストボックスと値はどのように再現すればいいのでしょうか?
一般的には、サーバ側のプログラムで、戻ったときに再現できるような処理をしておいてあげることになると思えます。
たぶんJavascriptもそういう処理ができるようなロジックにしておくことになると予想します。
早々にご回答頂きありがとうございます。
サーバ側で入力値を保持しておくのは分かるのですが、それをJavascriptでDOMの状態を再現するのが全くイメージできないのです。
サーバ側、クライアント側で具体的な処理方法をご存知でしたらご教示頂けないでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# プログラミングの問題です。至急教えてください。 /***から***/の部分をプログラミングにしてほし 1 2022/10/13 11:48
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- Visual Basic(VBA) Vba テキストボックスの文字列をボタンで入力するとテキストボックスの端の文字列が更新されない 2 2022/05/21 23:32
- Access(アクセス) Access IF文でテーブルに存在しない場合の処理について 2 2022/10/10 18:09
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(Microsoft Office) エクセルのマクロを教えてください。 1 2023/01/27 09:05
- JavaScript HTMLでJavaScriptを使用してプログラムを作ります。 入力されたパスワードを取得して、パス 2 2022/10/18 01:05
- Visual Basic(VBA) ユーザーフォームで銀行に対応した支店コードの入力ができません Sheet1のA列に銀行名、B列に銀行 5 2022/07/28 17:50
- Visual Basic(VBA) Selenium Basicの件 5 2023/04/10 20:55
- Visual Basic(VBA) テキストボックスの値を該当セルに登録する方法 2 2022/11/23 18:47
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
PDFフォームで条件つき金額を表...
-
日付入力欄の表示形式を自動的...
-
テキストフィールドに入力した...
-
入力モード 自動 切り替え
-
onClickとsubmitの処理順序
-
vbsでフォームに値を入力できない
-
テキストボックス入力を半角英...
-
submit後、同じ入力欄に戻らせ...
-
onchangeイベントを強制的に発...
-
プルダウン選択を変更すると、...
-
return trueとreturn falseの用...
-
チェックボックスのON/OFFでVal...
-
<JavaScript>tableタグを入力不...
-
Selectボックスの一覧表示方法
-
select要素のvalueを配列で取得...
-
innerHTML内では改行は禁止?
-
JavaScriptで特定のtdタグにcla...
-
onclickが動作しない
-
チェックボックスの有無判定
-
プルダウン 項目が多いので先頭...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
onClickとsubmitの処理順序
-
条件により、リンク先に画面遷...
-
javascriptで入力フォームが空...
-
フォームから入力すると、入力...
-
ラジオボタンによるフォームの...
-
JSPとJavaScriptの連携について...
-
テキストフィールドに入力した...
-
日付入力欄の表示形式を自動的...
-
最初の入力を判断
-
PDFフォームで条件つき金額を表...
-
テキストボックスを無効にする...
-
URLの/以降だけを入力したいです。
-
vbsでフォームに値を入力できない
-
フォームの値が0だったら空白...
-
テキストエリア入力文字数の表...
-
VBScriptで未入力のチェック(...
-
テキストボックス入力を半角英...
-
数字の1文字目を消したい
-
Javascriptが機能せず原因が分...
-
javascriptで入力禁止文字をチ...
おすすめ情報