同一フォーム内PHPへ、フォームをポストした際、
フォーム入力チェックを行い誤りがあれば、
元のフォームに入力したデータを残したいのですがどのようにすればよいでしょうか?

結果によって分岐せずに、フォームに必ず値が残ると言う方法でもかまいません。

//ここから
<form method="post" action ="">
<table>
<tr>
<td><input name="title" size="20"></td>
<td><input type="submit" name="send" value=" 登録 "></td>
</tr>
</table>

</form>

<?php
if(len_check($_POST['title'])>8){
echo "文字数オーバーです。";
//フォームに値を戻す処理。
}else{
echo "入力した文字={$_POST['title']}";
//フォームの値は破棄。
}

function len_check($s){
return strlen(bin2hex($s)) / 2;
}
?>

このQ&Aに関連する最新のQ&A

A 回答 (1件)

長さのチェックをする場合はマルチバイト系の関数を使った方がよいかもしれません。


またバリデート自体はもっと厳密に行った方がいいですが、
最低限htmlspecialcharsはしておいた方がいいです
その際はmb_internal_encoding()の指定をわすれずに

<meta http-equiv="Content-Type" content="text/html; charset=euc-jp">
<?php
mb_internal_encoding("EUC-JP");
$title=$_REQUEST['title'];
if(mb_strlen($title)>8){
echo "文字数オーバーです。";
$title="";
}
$title=htmlspecialchars($title);

?>
<form>
<input type="text" name="title" size="20" value="<?PHP print $title;?>">
<input type="submit" name="send" value=" 登録 ">
</form>
    • good
    • 0
この回答へのお礼

詳しく教えていただきありがとうございます。
該当方法で解決いたしました。

お礼日時:2011/04/18 22:51

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q忘れがちなバックアップデータを教えてください。

忘れがちなバックアップデータを教えてください。

パーツ交換に伴い再インストールをすることになりそうです。OSはWindows7です。
Windows7ではバックアップ機能がありますが、バックアップをとってもWindows上からしか中身が見えなさそうなので、バックアップ忘れが怖いです。

あー、あのデータバックアップするの忘れてたー!となるのを防ぎたいので、みなさんがバックアップしているデータ、アプリケーションのバックアップデータを教えてください。


私は、
Firefox、ThunderbirdのデータをMozbackupでバックアップ
ランチャーの設定ファイル
Google日本語入力の辞書データ
GoogleChromeのお気に入り
C:\Users\ユーザー名 以下をそのままコピー
(このとき、いらないファイルとかってありますか?AppDataフォルダ以下にLocalなどのフォルダがありますが)

うーん、ちょっと少ない気がして不安です。

Aベストアンサー

C:\Users\ユーザー名\AppData\Local\
以下に
Microsoftフォルダ、Tempフォルダ、Googleフォルダなどありますが
これらは新規システムにも引越ししたほうがいいのでしょうか?
>>そんなに大きくないので、アックアップだけしとけばなんかのときに間に合うでしょう。
引越しですか? バックアップのはなしですよね。。

Tempフォルダなどは新規に持ってきてもゴミになるんじゃないかなとおもったりするのですが、
ここらへんは必要なものを自分の環境にあったものを自分でチョイスしてバックアップする形でいいのでしょうか?
>>あんまり細かくすると、自分でわからなくなりますんで。。おおまかに。。

Qフォーム入力前後のテーブルデータの同一性の確認方法は?(トランザクション?)

PHP4.3 + PEAR + PostgreSQL + Apache + Linux/Debian Sarge を使っています。

重複を許さないデータを登録するために、既に登録されているデータを確認しつつ、テーブルに新データを追加する方法についてお尋ね致します。

下記の流れを考えています。

(1)既に登録されているデータを画面に表示する。
 ↓
(2)フォームを利用してユーザーが新データを入力する。
 ↓
(3)フォーム入力を受信して、新データをテーブルに追加する。

この場合、(1)でのデータ表示から(3)のデータ追加登録までトランザクションをかけておかなければ、他のユーザーが同じデータを追加登録してしまう恐れがあるかと思います。

一方、(1)においてデータベースに接続した時に得たインスタンス(?)を
$_SESSION['db'] = DB::connect(DSN)
          (PEARを利用しています)
のようにしてセッション変数に保存しても、(3)の処理に引き継ぐことができませんでした。

このような処理はどのように行えばよいのでしょうか。

PHP4.3 + PEAR + PostgreSQL + Apache + Linux/Debian Sarge を使っています。

重複を許さないデータを登録するために、既に登録されているデータを確認しつつ、テーブルに新データを追加する方法についてお尋ね致します。

下記の流れを考えています。

(1)既に登録されているデータを画面に表示する。
 ↓
(2)フォームを利用してユーザーが新データを入力する。
 ↓
(3)フォーム入力を受信して、新データをテーブルに追加する。

この場合、(1)でのデータ表示から(3)のデータ追加登...続きを読む

Aベストアンサー

表示して入力して更新するまでトランザクション
をかけるなんてとても稼動に耐えられないでしょう。

更新時にトランザクションで再検索をかけて
更新し、駄目な場合はエラーを返すので十分だと
思います。

QPS3のデータのバックアップ

PS3のデータのバックアップ
PS3のデータのバックアップについて、バックアップしたデータは別のps3にコピーしてもユーザーとかトロフィーとか変わらないのでしょうか?
ゲームデータだけコピーして他のps3に移すと「他のユーザーのデータなのでトロフィーは取得できない」と書いていました。
バックアップなら途中のデータからでもトロフィーは残っていて、トロフィーを取得しつつゲームを進めることはできるんですか? 
教えてください。

Aベストアンサー

トロフィーデータはそもそもバックアップされません。
ネットに繋いでいるならPlaystation@Networkサーバーに同期する事がバックアップ代わりになります。

こちらに他の本体へリストアできる項目の一覧がありますので参考にどうぞ。
http://jp-playstation.custhelp.com/app/answers/detail/a_id/440/session/L3NpZC9hcmhaZ1Mzaw%3D%3D/p/1/c/7/r_id/100001/sno/0

Qフレーム内のPHPへPOSTで情報を送る方法

初歩的な問題で申し訳ありませんが、回答お願いします。
フォームで作った送信ボタンから、次のページ(HTML)のフレーム内のPHPファイルに情報を送るにはフォームのアクションのところにどの様に指定すればよいのでしょうか?

Aベストアンサー

framesetとframe、actionとtargetの理解があやふやなような気がします。

actionに指定したPHPファイルで、フォームの値を処理し、targetで指定したframeに結果を出力する。と考えてみてください。

frameset内でframeに指定するファイルというのはあくまでframesetが呼ばれたときに最初に読み込まれるファイル(html,phpでも何でもOK)です。framesetが呼ばれた後、frame内のaタグやformにtargetを指定し、他のhtmlファイルや、scriptで処理した内容をframe内に出力します。

それと、メインフレームとサブフレームという言い方は誤解を呼びます。フレームをはめる大枠がframesetでその中にはめる枠をframeと表現すると伝わりやすいと思います。

Qパソコンデータ(画像)のバックアップについて。

パソコンデータ(画像)のバックアップについて。


パソコンに保存してある画像をバックアップしたいと思うのですが、ちょっと困っている事があります。

主に、大事な画像はマイピクチャというフォルダに入っているのですが、マイピクチャは、マイドキュメントというフォルダにも入ってます(解りづらくてすみません・・・)

この場合、マイドキュメントのバックアップをとっておけば、マイピクチャのデータも一緒にバックアップされるのでしょうか?
それとも、個別にバックアップをとっておくものなのでしょうか?

これは画像だけじゃないのですが、沢山のデータをバックアップする場合でも、データ一つ一つを個別にバックアップしなきゃいけないものなのでしょうか?


バックアップはまだ詳しくなくて(><)
解りづらくてすみません・・・

他にもバックアップに関するアドバイスや注意がありましたら是非教えて下さい。

Aベストアンサー

マイドキュメントというフォルダにマイピクチャフォルダが入っているのなら、
マイドキュメントのバックアップをとっておけば、マイピクチャのデータも一緒にバックアップされます、

バックアップ先は何になりますか? 外付けハードディスク? Dドライブ?
できたら、外付けハードディスクなどに保存される事をお勧めします、
同じCドライブだと、バックアップになりません、

>沢山のデータをバックアップする場合でも…

他のドライブにバックアップするのであれば、まとめてドラッグすれば、
コピーバックアップされます

例としてバックアップする先を決めます(例としてCからDドライブへバックアップとします)
→Dドライブにバックアップフォルダを制作(D:バックアップフォルダ)開きます→
別にスタートからマイドキュメントを開き、ファイルの無い場所からドラッグしてファイル全体を反転します、
→反転したファイルをバックアップフォルダへドラッグします、
コピーバックアップされます

QPHPのフォームでPOSTした変数を自動で変数に

$server = $_POST['server'];
$domain = $_POST['domain'];
$domainmail = $_POST['domainmail'];
$news = $_POST['news'];

このように、フォームからPOSTした情報を毎回変数に格納する記述をしているのですが、複数のPOSTデータのnameをそのまま変数にし、セキュリティにも配慮して情報を格納させて扱う方法を教えてください。

Aベストアンサー

あれ、さっきの質問は閉めたのですね。さっきのNo1です。
extractは$_GETや$_POSTに対して使ってはいけません。リファレンスにも書いてあるのですが。

http://php.net/manual/ja/function.extract.php
>extract() をユーザー入力 ($_GET や $_FILES など) のような信頼できないデータについて使用しないでください。

理由がわからなければそこにある register_globals のリンク先のページを読むこと。つまり、$_POST を全部(個別に"server"とか"domain"とかを指定しないで)変数に展開するのはセキュリティリスクになります。

あと、セキュリティには、
・入力時にサニタイズ
・使用時にエスケープ
という2つの考え方があります。入力時にサニタイズの方が楽なので、そう書いてあるドキュメントが多いのですが、あるデータを、ファイル名にも使うし、HTMLにも出力するし、JavaScriptのデータとしても出力するなど複数種類に使うことを考えると、サニタイズという考え方に限界があることがわかります。

使用時にエスケープというのは、たとえば、データをhtml内のテキストとして出力するときは必ずhtmlspecialcharsを使うとか、sql文を組み立てるときにはDBに応じてescapeする関数を使うとか(プレースホルダを使うのがより良い)、ファイル名として使うときにはファイル名に使えない文字を変換するとかなどなど。

・入力時にサニタイズ => 入力時にデータを清浄化処理してあとはデータはきれいと考えるやり方
・使用時にエスケープ => すべてのデータは汚染されていると考えるやり方

つまり、使用時にエスケープ前提で、さっきの私の回答でOKです。

あれ、さっきの質問は閉めたのですね。さっきのNo1です。
extractは$_GETや$_POSTに対して使ってはいけません。リファレンスにも書いてあるのですが。

http://php.net/manual/ja/function.extract.php
>extract() をユーザー入力 ($_GET や $_FILES など) のような信頼できないデータについて使用しないでください。

理由がわからなければそこにある register_globals のリンク先のページを読むこと。つまり、$_POST を全部(個別に"server"とか"domain"とかを指定しないで)変数に展開するのはセキュリティリス...続きを読む

QDドライブのバックアップデータの削除

いつの間にかDドライブにデータを保存していたらいっぱいになってしまったので、
一部のデータを移動させたのですが、ほとんどバックアップのデータでいっぱいになってました。
バックアップデータの削除を削除したいのですが、中身の詳細を見る方法が分からないため大事なバックアップデータが入っていると思うと消す勇気がありません。

また、自動ににバックアップをとるのを止めさせたいです。(自分で設定した覚えがない)
よろしくお願いします。

Aベストアンサー

Windows7の自動バックアップで作成されたデータで
>自分で設定した覚えがない
ということでしたら、世代別の管理も不要でしょうから、古いバックアップを削除すればいいと思います。

●Windows7で古いバックアップのデータを消してハードディスクを軽くする | ぬふふ.com
http://nufufu.com/archives/1803

QPHP POSTでデータ登録について

PHP初心者です。PHP簡単な管理システムを作っていますが、データベースにデータ登録がうまくできないので、教えてください。

データ登録が出来ますが、登録ページの中に <a href ="xxx.php">に追加して、リンクをクリックしたら、空データがそのまま登録されてしまった。

フォーム中のボタンを押さないとデータ登録ができない設定するのを作りたいですが、ソースコードのどこで修正したら、ページリンクしても自動的に空データ登録できないのか?


<form id="frmIpunt" name="frmIput" method="post" action="">
<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr>
<th colspan="2">新規店舗登録</th>
</tr>
<tr>
<td>店舗名</td>
<td>
<span id="sprytextfield1">
<label for="shops_name"></label>
<input name="shops_name" type="text" id="shops_name" size="10">
<span class="textfieldRequiredMsg">未入力</span></span>
</td>
</tr>
<tr>
<td>住所</td>
<td><input name="shops_address" type="text" id="shops_address"></td>
</tr>
<tr>
<td>電話番号</td>
<td><input name="shops_tel" type="text" id="shops_tel"></td>
</tr>
</table>
<input type="submit" class="order-button" value="登録する">
</form>

PHP初心者です。PHP簡単な管理システムを作っていますが、データベースにデータ登録がうまくできないので、教えてください。

データ登録が出来ますが、登録ページの中に <a href ="xxx.php">に追加して、リンクをクリックしたら、空データがそのまま登録されてしまった。

フォーム中のボタンを押さないとデータ登録ができない設定するのを作りたいですが、ソースコードのどこで修正したら、ページリンクしても自動的に空データ登録できないのか?


<form id="frmIpunt" name="frmIput" method="post" action=...続きを読む

Aベストアンサー

>解決したいのは、ページ中別のURLにクリックしても、
>データが自動的に登録しないようにしたいです。

POSTデータを登録する部分を

if ($_POST) {
// ここで登録処理
}

のように括るだけでいいです。

が、そもそも(POSTされたときに)各々の内容をチェックしないで(全部が空文字列であっても)insertしているようではダメです。

Qntbackupでバックアップしたデータの消去

現在 Windows Server 2003を使用しています。
ntbackupを使って毎週データのバックアップをとっています。

今の状態だとデータがどんどん追加されていくだけなのですが、古い(1ヶ月前とか)のバックアップデータを消去することはできるのでしょうか?

また、今はタスクで自動的に毎週バックアップをとるようにしているのですが、例えば2週間分だけ残して古いデータは消去し、それから最新のデータをバックアップするようなことはできるのでしょうか?

Aベストアンサー

テープデバイスではなくて、ディスク上にバックアップを作成しているのですね。
まず、『データを追加する』ではなく、『データを置き換える』ようにバックアップジョブを作り直す必要があります。
Weeklyにバックアップを"WeeklyBackup"にとるとしたら、タスクを利用して、バックアップの直前に
WeeklyBackup0というファイルをWeeklyBackup1に、
WeeklyBackupをWeeklyBackup0に、
それぞれコピーをするバッチファイルを実行するようにスケジュールします。
つまりWeeklyBackup0が先週のバックアップ、WeeklyBackup1が先々週のバックアップになるわけです。

QHTMLで入力されたデータをPOSTで受け取るときに値がおかしくなる

HTMLのテキスト画面に下記のような記号列をいれて、
"#'\
次画面でPOSTの値を表示すると、
\"#\'\\
になってしまいます。
DBに入れることを考えてはいるのですが、何かよい方法はないでしょうか?

Aベストアンサー

php.ini の設定でマジッククオータ(magic_quotes_gpc)がオンになっていると
GPC(GET POST COOKIE)で値入力が行われた場合、' " \には
すべてバックスラッシュで自動的にエスケープされます。
これを回避するには
stripslashes()関数を利用するか
php.iniのmagic_quotes_gpcをFalseに設定してください。

しかし、これは安全装置のようなもので
特にSQL文を発行する際に'や"など(他にもあります。)の文字を
エスケープしてやらないとSQLインジェクションという脆弱性が生まれてしまいますので
十分注意してください。
(正規表現などによる入力値チェックも必要ですね。)


噂によるとkakaku.comの不正アクセスもSQLインジェクションでの
攻撃であるとも言われているようです。

※PHP4.2.3以前の場合はスクリプトの中にini_set("magic_quotes_gpc", 0)を挿入すると一時的に解除できます。


stripslashes()の例

<?

echo stripslashes($_POST['text']);

?>

php.ini の設定でマジッククオータ(magic_quotes_gpc)がオンになっていると
GPC(GET POST COOKIE)で値入力が行われた場合、' " \には
すべてバックスラッシュで自動的にエスケープされます。
これを回避するには
stripslashes()関数を利用するか
php.iniのmagic_quotes_gpcをFalseに設定してください。

しかし、これは安全装置のようなもので
特にSQL文を発行する際に'や"など(他にもあります。)の文字を
エスケープしてやらないとSQLインジェクションという脆弱性が生まれてしまいますので
十分...続きを読む


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング