PHP4.4.4+MySQL4.0.26
PHPの入門書に、form.html から、update文を含むPHPにPOSTする
掲示板サンプルがあるのですが、これにある入力チェックサンプルですと、
別画面に遷移して(例えば投稿者名は)「全角10文字以下にして」、とか
メッセージを表示します。そうではなく、
値を入力
↓
登録ボタン押下
↓問題なしなら ↓問題あるなら
INSERT文を実行 問題ある【フォームの脇に】「10文字以下で」と表示
のように1つのPHPファイルで全てを済ませたいのですが、可能でしょうか。
下記サンプルで、update.phpのところを<?= $PHP_SELF ?>にして、
<html>
<body>
<form method="post" action="update.php">
投稿者名<input type="text" name="name" value="">
<input type="submit" name="reg" value="登録">
</form>
</body>
</html>
投稿者名の脇に
if (strlen($name) == 0) {
$errmsg .= "回答者名が入力されていません。<br>";
}
print $errmsg;
みたいなものを仕込めばよさそうですが、
(1)
これを登録ボタン押下時だけ動作させなければだめですよね?
(初めに表示するときにチェックにHITしてしまうでしょうから)
それをどうしたらいいかわかりません。
(2)
↑が克服できたとしても、問題がなければSQLでINSERT or UPDATEを
かけなければならないですが、POST先が$PHP_SELFだと、永久にUPDATEが
かからず、入力チェックばかりが無限ループしてしまうと思うのですけど。
(3)
それと、Insert ot Updateがかかったら「ありがとう」を出して、別画面に
リダイレクトしたいです。
以上の極めてシンプルなもので結構ですので、サンプルをご教示いただけませんか
No.3ベストアンサー
- 回答日時:
あ~・・・
いい加減な回答してしまいましたね。
すみませんでした。
submitに名前がついていたのでそれで判断しては
どうでしょうか?
<?PHP
$errFlg=false;
if ($_POST["reg"]=="") $errFlg=true;
if(!$errFlg){
if($_POST["name"]==""){
$errFlg=true;
$errStr["name"]="<span style='color:red'>回答者名が入力されていません。</span>";
}
if(strlen($_POST["name"])>20){
$errFlg=true;
$errStr["name"]="<span style='color:red'>10文字以下にしてください</span>";
}
}
if($errFlg){
print <<<eof
<html>
<body>
<form method="post" action="{$_SERVER["PHP_SELF"]}">
投稿者名<input type="text" name="name" value="{$_POST["name"]}">{$errStr["name"]}<br>
<input type="submit" name="reg" value="登録">
</form>
</body>
</html>
eof;
}else{
print <<<eof
insert 処理
eof;
}
phpinfo();
?>
「ページを表示できません」・・・ってのは
ちょっとわかりません。
ねんのため$_SERVERでわたしてみるとか。
早速のご回答ありがとうございました。
本番環境に組み込み始めているところで、実にいい感じです。
もう一つ、わからない点が出てきたのですが、
別質問ということで、こちらに新規質問を投稿しました。
http://oshiete1.goo.ne.jp/kotaeru.php3?q=2419770
もしよろしかったらご教示いただけますと幸いです。
今回もずっぽりお世話になってしまいました。ありがとうございました。
No.2
- 回答日時:
こんなかんじでどうですか?
実際にはフローをもっとわかりやすく関数化したり
してください
<?PHP
$errFlg=false;
if(is_array($_POST)){
if($_POST["name"]==""){
$errFlg=true;
$errStr["name"]="<span style='color:red'>回答者名が入力されていません。</span>";
}
if(strlen($_POST["name"])>20){
$errFlg=true;
$errStr["name"]="<span style='color:red'>10文字以下にしてください</span>";
}
}
if($errFlg or !is_array($_POST)){
print <<<eof
<html>
<body>
<form method="post" action="$PHP_SELF">
投稿者名<input type="text" name="name" value="{$_POST["name"]}">{$errStr["name"]}<br>
<input type="submit" value="登録">
</form>
</body>
</html>
eof;
}else{
print <<<eof
insert 処理
eof;
}
?>
yamabejpさん、毎度お世話になっております。
#1さんのレスにも書きましたが、HTML_QuickFormに
流れかけていたところ、質問にずばりと回答いただき
ありがとうございました。
>実際にはフローをもっとわかりやすく関数化したり
というのが、わたしはまだできず、泥臭くて非効率な長~~い
プログラムを作ってしまうわけですが(サブルーチンなる
考え方がようやく便利だとわかり始めた次元でして・・・)
さて、本題ですが、ご提示のものを早速適用してみたのですが、
もう2点ほどご教示いただけませんか。
(1) 初回表示で「回答者名が入力されていません。」が現れます。
これをかわす場合は、初回なのかどうかを切り分けるロジック
などが必要になりますでしょうか?
(2) 適当な投稿者名を入力してSUBMITすると、
「ページを表示できません」になりますが、
action="$PHP_SELF" なので、このまま実行すれば
</html>タグの枠外「insert 処理」という文言がprintされるのが
正解だと思います、なぜでしょうか・・・
もしよろしければご教示下さい。
No.1
- 回答日時:
例えば、PEAR::HTML_QuickFormなら1画面での処理になりますね。
<? // 適当に書いてます
$form = new HTML_QuickForm();
$form->addElement('text', 'name', '氏名');
$form->addRule('name', '氏名を入力して下さい', 'required');
// POSTされた時に入力値検証
if ($form->validate()) {
if ($form->_frozen) {
// DB処理
$data = $form->getSubmitValues();
$db->insert($data);
header("Location: ok.php");
exit;
}
// 確認画面
$form->freeze();
}
// error
print_r($form->_errors);
tany180sxさん、レスありがとうございました。
HTML_QuickForm、この2時間くらい調べてみました。
(PEARのインストールでちょっとつっかかりましたが)
すごい興味をもちました。たまたまみつけた入門サイトの
http://www.okushin.co.jp/information/tanuki03/in …
このサンプル↓みて、惚れましたね。
http://www.okushin.co.jp/information/tanuki03/ta …
まさに、私の要望どおりで、しかも効率もよさそうです。
ただ残念なのは、わたしには少々敷居が高いかもしれません。
「クラス」とか、オブジェクト指向っぽい話がよく出てきますが、
ただでさえ元々チンプンカンプンなのに、少し難しい話に
飛躍しすぎるといいますか・・
あとは、この本に少々解説も載っているようなので、買って勉強して、
自分なりのテンプレートを作ってみるべきかといったところです。
http://www.amazon.co.jp/gp/product/4798109592/re …
貴重なご助言、ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- PHP 入力した部分を表示させたまま(保持)するにはどうすれば良いでしょうか? 1 2023/01/25 11:14
- PHP PHP MySql 画像を取得 1 2022/06/04 14:05
- JavaScript 入力フォームの javascript で メールアドレスの正規チェックをを行い、ボタンをクリックして 2 2022/04/27 16:06
- PHP PHPでCookieを使った訪問回数について 1 2023/05/28 14:10
- PHP PHPで画像の渡しが上手く行きません。 1 2023/02/02 09:39
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- HTML・CSS ボタンをクリックした時に、入力フォームのすぐ下部に、「入力欄が空白です」というテキストメッセージが表 1 2022/04/27 16:25
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- HTML・CSS 私の能力からして間違っていないような気がします。 4 2022/09/30 13:24
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<input type="hidden" >で配列...
-
PHP ボタンが押されたら処理を...
-
PHPで、ボタンを押すと同じペー...
-
フォームへの前回入力値をクリ...
-
syntax error, unexpected '}' ...
-
PHPでフォームから任意の画像削...
-
$_SESSIONについて教えて下さい。
-
フォームでのリセットを使う方法
-
エラーを元の画面に表示させるには
-
検索時の選択内容を保持する方法
-
入力フォーム→確認画面→送信画...
-
HTMLで前の画面に戻る時、入力...
-
複数行のデータ一括更新に関して
-
DBのWHERE~ANDの使い分けをphp...
-
PHPの関数実行
-
チェックボックスのvalueに変数...
-
phpの掲示板で新しい順に表...
-
チェックボックスの全選択/解除...
-
テキストボックスに初期値を入れる
-
extract($_POST)
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<input type="hidden" >で配列...
-
HTMLで前の画面に戻る時、入力...
-
PHPでユーザー情報を入力して簡...
-
PHP ボタンが押されたら処理を...
-
PHPとHTML+Xamppの掲示板で画像...
-
syntax error, unexpected '}' ...
-
検索時の選択内容を保持する方法
-
PHPでCookieを使った訪問回数に...
-
チェックボックスによる検索
-
PHPで画像の渡しが上手く行きま...
-
フォームでのリセットを使う方法
-
チェックボックスによる検索(...
-
フォームへの前回入力値をクリ...
-
フォームボタンを押すたびに数...
-
php mysql でチェックボックス...
-
PHPの関数実行
-
PHPで、ボタンを押すと同じペー...
-
phpで分からないエラーが出てし...
-
ラジオボタンをsessionで使いたい
-
入力フォーム→確認画面→送信画...
おすすめ情報