• ベストアンサー

PHP+MySQLで型の整合について

「型」「正規表現」などで検索した結果同様の質問が見当たらなかったため新しく質問します。 現在PHP上のフォームで入力した値を使ってInsert処理やUpdata処理を実装しようとしています。 その際、入力した値がフィールドの型をオーバーしていた、もしくは違う型で入力していた場合、やり直しを要求するような指示をしたいと思うのですが、どうすれば可能でしょうか? このときデータの型はページ内には置かず、入力値のフィールド名を用いてデータベースから参照できるようにするようにするものとします。 よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

整数なら is_numeric() とか。 バイト数まで検証するなら綺麗なやり方は思いつきませんけど力技で、 $byte = 4; $max = bindec(substr(str_repeat('11111111', $byte), 1)); $min = ($max + 1) * -1; 文字列は is_string() や strlen() などで。 参考URLは変数検証用の関数群です。

参考URL:
http://jp.php.net/manual/ja/ref.var.php
nazonin
質問者

お礼

回答ありがとうございます。 整合用の変数はわかったのですが、テーブルから変数定義をもってくる方法が思いつきませんでした。 仕方がないので編集の利便性は諦めて、命令ごとに変数定義を自分で打ち込もうと思います。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.1

質問内容が広義のため回答しずらいですが、 mysql>DESCRIBE で表の定義が取得できます。 そこから型を取ってきて判定とか。 もしくはO/RマッピングなDBクラスを拾ってきて使うとか。

nazonin
質問者

お礼

回答ありがとうございます。 mysql>DESCRIBE テーブル名 カラム名でカラムの定義が取得可能なことは分かりました。 そのあと、カラムの定義を使い入力した値とあっているかを確かめたいのですが、その処理についてご存知ではないでしょうか? 例)Int(7)の型に対し、A111111という入力があった場合否定の作業を行う といったような処理です。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • PHPとMySQLを使ったフォームを作っていますが、うまくできないこと

    PHPとMySQLを使ったフォームを作っていますが、うまくできないことがあり書き込みさせていただきます。 わかる方、ご助力願えれば幸いです。 フォームから、送信されたデータを受け取って、MySQLに登録する際に、フォーム内に空欄があると、うまくMySQLのデータベースに追加ができなかったり、変更ができなかったりします。 コードを簡単に書くと… <?php //フォームからデータを取得 $name = $_POST['name']; $address = $_POST['address']; $age = $_POST['age']; //データベース接続処理 $db = mysql_connect("localhost","user","password"); mysql_select_db("db_name",$db); $rs = mysql_query("select * from tablename order by my_id desc",$db); //データベースへの登録 $rs = mysql_query("INSERT INTO tablename(name,address,age)VALUES('$name','$address','$age')",$db); ?> このような感じになります。 フォームには、名前、住所、年齢を入力しているわけですが、年齢が必須でないため、空欄として送られてくることもあります。 年齢に数値が入っている場合は、うまく登録されますが、空欄であった場合、特にエラーが出るわけでもなく、単に「登録されない」という状況がおきます。 データベースのテーブルのフィールドでは、ageは int(11)でNULLはYes、defaultはNULLになっております。 自分なりに調べてみたつもりですが、知りたい情報に出合うことができませんでした。 よろしくお願い致します。

    • ベストアンサー
    • PHP
  • PEAR::MDB2で、データベースの各カラムの型や長さの情報を取得したい

    PEAR::MDB2でデータベース(PostgreSQL)を操作させているのですが、MDB2でデータベースの各カラムの型や長さの情報を取得することって出来ますでしょうか? フォームからデータを入力する時、フォームに入力された値の長さをチェックするのに使ったりするのに便利かとも思ったのですが、探してもそういったMDB2関数が見つかりません。 もし、各カラムの型や長さの情報を取得する方法がありましたら、教えていただければと思います。

    • 締切済み
    • PHP
  • Mysqlにhtmlのフォームから登録できません。

    WindowsでphpからMysqlにデータを登録しようと思っているのですが、うまくいきません。 データベースの内容をHTML,PHPで書き出すことは正常にできたのですが、登校フォームから入力してもデータが書き込まれません。フォームのHTMLはおそらく間違ってないと思います。 これが受け入れ側のファイルの内容です。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> <head> <title></title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> </head> <body> <?php extract($_POST); mysql_connect('localhost','root','パスワード'); mysql_select_db('データベース名'); $sql = "insert into テーブル名 values('フィールド1の値','フィールド2の値','フィールド3の値','フィールド4の値',0)"; mysql_query($sql); ?> </body> </html> ファイル名は.phpの拡張子で保存してます。 Mysqlの環境設定はできているのに何故データを登録できないのでしょうか? 詳しい方どうか教えてください。よろしくお願いします。

  • データの型について

    少し変な質問かもしれませんがお願いします。 TINYINT型のフィールドがあるとして、0をインサートすると当然0が入るのは分かるのですが、 "0"(文字列としてのゼロ)を入れた場合、これは数字型か文字型かどちらとして入るのでしょうか? また、セレクトで取り出した場合の型はどうなのでしょう?

    • ベストアンサー
    • MySQL
  • PHP+MySQLでのINSERTについての質問です。

    insert.html(入力フォーム)で <input type="text" name="company_nm" size="80"> を <form name="form1" method="post" action="insert_kakunin.php"> <input type="submit" value=" 次 へ "> で送って insert_kakunin.php(確認画面)で <input type="hidden" name="company_nm" value="<?= $company_nm ?>"> <?php print $_POST["company_nm"]; ?> で表示させます。 それを <form name="form1" method="post" action="insert.php"> <input type="submit" value=" 決 定 "> で insert.php(DB処理)で DB接続した後に $sql='INSERT INTO Sample (company_nm) VALUES("'.$_POST['company_nm'].'"); というふうにINSERTしたいんですが、VALUESに入力した値が入りません。 print $sql; print ($_POST['company_nm']); で見ても「""」となっています。 値の渡し方を教えてください。

    • ベストアンサー
    • PHP
  • 【php】フォームの作成をもっと楽にできないものか

    phpで、フォームを作成する時 入力フォームの作成、データの受け渡し、バリデーション処理 これでよろしいですか?画面の作成、DBへのインサート、と 非常に手間がかかります。 フィールドが1個増えるだけでまた、また1個1個足していかないといけません。 フレームワーク(codeigniter)なんかも使ってみましたが バリデーション処理やセキュリティが補助されるだけで 基本的な手間は変わりません。 このPHPでのフォーム作成をもっと簡単に、直感的に作成できるような ツールや、ライブラリなんかはないものなのでしょうか?

    • ベストアンサー
    • PHP
  • php→Ajax→php値の受け渡し

    こんばんは。 今phpで画像を紹介するホームページを作っています。 現在、簡易コメント欄を作成していて、 イメージではyoutubeのコメント欄のような実装をしようと 今試みているところです。 読み出したphpにてDBからセレクトしたもので 二次元の連想配列を作成し、smartyでテンプレ側にてforeachで そのまま展開してコメント、名前、投稿日時を出しています。 そこで入力フォーム表示のon/offをJavaScriptで制御していて、 もしコメントを入れたらそのままコメントを追記して 即反映させたいんですが、かなり難しくて全く出来ておりません。 現時点では読み込んでるPHP側から javascriptで別のデータベースにインサート、 セレクトするphpを読み出す→ またJavaScriptに取れた値を渡す→元のPHPに値を返して表示 とするのかなと思っていますが… 元のPHPで読み出ししたコメントと どの様にしたら切り分け出来るのか、 またこういうことは実装できるのか想像もつかないのですが… これはどの様にしていけばいいのでしょうか? 少し細かく説明し難い所もあり、文章がザックリ過ぎる、 意味がわかり難いと思いますが、 教示いただけたらありがたいです。 よろしくお願いします。

    • ベストアンサー
    • PHP
  • PHP-mysql フィールドの値を取得

    認証ページを作成していますが、 フィールドの値を取得できずに困っています。 $r = ?????????????????????; の部分の記述が分かりません。 ($rに、フォームで入力した$idのデータを参照して、もしあったら、その行のPasswdフィールドとフォームで入力した$passを比較したい) よろしくお願いいたします。 $id・・・formの入力内容(Emailフィールドに該当) $pass・・・formの入力内容(Passwdフィールドに該当) <? $hostname = "*"; $username = "*"; $password = "*"; $dbname = "*"; $tablename = "*"; $connect = mysql_connect($hostname, $username, $password) or die ("サーバに接続できません"); mysql_select_db($dbname) or die ("データベースに接続できません"); $sql = "SELECT Passwd FROM $tablename where Email='$id'"; $result = mysql_query($sql, $connect) or die ("クエリーを実行できません"); $num_rows = mysql_num_rows($result); $r = ?????????????????????; print "$num_rows\n"; print "$r\n"; if( $num_rows = 0 ) { print "ユーザ登録されていません。"; print '<a href="">こちらから登録してください。</a>'; session_destroy(); exit; } if( $r != $pass ) { print "パスワードが違います。"; session_destroy(); exit; } print "認証OK"; mysql_close($connect); ?>

    • ベストアンサー
    • PHP
  • Flash→PHP→MySQLへの値の受け渡しについて

    現在、Flashのフォームで受け取った値をPHP経由でMySQLへデータを格納するシステムを作成しています。 現在、詰まっている点とは、Flashで送信したデータがMySQLまで到達できないというところです。 少し分析してみたところ、PHPを単独でブラウザにて開くと "フィールドが取得できません。" と出力されていました。 これは、 ----- <?php $setsuzoku = mysql_connect("localhost", "*****", "*****"); if (! $setsuzoku) { die ("データベースに接続できません"); } if (! mysql_select_db ("test")) { die ("データベースが取得できません"); } mysql_query("INSERT INTO rank VALUES('".$HTTP_GET_VARS['nickname']."', ".$HTTP_GET_VARS['score']); if (!$fd) { die ("フィールドが取得できません。"); } // 処理が終わったことを知らせる print('OK'); ----- というプログラムで動かしていまして、『mysql_select_db ("test")』まで動作しているのではないかと思われます。 ですので、もしかしたらFlash以前にPHPとSQLの連携がうまくいっていないような気がするのですが…どうでしょうか? Flashからの情報を送信するシステムである以上、PHPで表示すると必ずこのような形になるのでしょうか? ちなみにMySQLには、必要なDatabaseとテーブルを作成しました。 問題の切り分けは一応してみましたが、間違っているかもしれません。何かご教授頂ければ幸いです。 よろしくお願いいたします。

    • ベストアンサー
    • Flash
  • PHP/MySQL INSERT文について。

    PHP/MySQL INSERT文について。 こんばんは。 PHP・MySQLでデータベースへデータの書き込みを試行錯誤しております。 そこで一つどうしても解決出来ない問題(謎)があるので質問させて頂きます。 簡易的な質問内容としては 全てのカラムに対する値の挿入は可能なのに カラムを指定して値を挿入しようとしたらエラーが出ます。 データベースの設定はテーブル名【TESTtable】 フィールド 種別 NULL 属性/その他 AAA int(6) No UNSIGNED ZEROFILL / auto_increment BBB int(4) Yes CCC int(4) Yes DDD int(4) Yes PHPでのSQL実行文をしてはの記述としては(値は全て可変で数値を代入します。) INSERT INTO TESTtable VALUES (last_insert_id(),50,600,50) とした場合は問題無くテーブルに書き込みされますが カラムを指定して INSERT INTO TESTtable (AAA,BBB,CCC,DDD) VALUES (last_insert_id(),50,600,50) とした場合、書き込みが行われません。 INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable (AAA,'BBB','CCC','DDD') VALUES (last_insert_id(),50,600,50) INSERT INTO TESTtable ('AAA','BBB','CCC','DDD') VALUES (last_insert_id(),'50','600','50') 等、色々試してみましたが不可能でした。 カラムAAAはauto_incrementにりますので毎回書き込みされますが BBB、CCC、DDDは書き込みが不要の場合もあるので カラム指定の書き込みは必須となるのですが・・・行き詰ってしまいました・・・。 ご教授頂ければ幸いです。 どうぞ、宜しくお願い致します。

    • ベストアンサー
    • MySQL
印刷枚数を指定できない
このQ&Aのポイント
  • EPSON社製品で印刷枚数を指定する方法がわかりません。どのように設定すればいいのでしょうか?
  • EPSONのプリンターでは、印刷枚数の設定ができないという問題があります。どのように対処すればいいのでしょうか?
  • EPSON製のプリンターで印刷枚数を指定できないという問題に直面しています。解決策を教えてください。
回答を見る