データベース作成
create databese sinpanbo;
テーブル作成
create table jyucyuu
(s_num varchar(10) not null primary key,
k_num varchar(50) not null,
k_name varchar(100) not null,
s_time date not null,
s_risu varchar(40) not null,
s_mono varchar(50) not null,
s_amount integer not null,
s_ini integer not null,
s_result varchar(10),
s_text text
);
検索フォーム画面(kensaku.php)
<html>
<body>
<form action = "kensaku2.php" method="post">
顧客NO:<input type="text" name="s_num">
受注NO:<input type="text" name="k_num">
<input type="submit" name="exec" value="検索">
</form>
</body>
</html>
ここからあとのPHP文(kensaku2.php)がわかりません。
条件としては、s_numまたはk_numで、どちらでも検索できるようにしたいです。よろしくお願いします。
http://www.atmarkit.co.jp/flinux/rensai/mysql06/mysql06.html
こちらからサンプルがダウンロードできます。
SQL 自体は
SELECT * FROM jyucyuu WHERE s_num = $s_num OR k_num = $k_num;
$s_num, $k_num は 適宜置き換えてください。
http://search.net-newbie.com/php/index.html (PHPマニュアル)
PEARやその他フレームワークを使わない方法を書きます。
(動作確認は行っておりません このまま使ってエラーがでたらごめんなさい)
k_sum、s_sumどちらも入力されない場合は全件検索とし、両方入力された場合はAND検索とします。
また、データベース接続のためのユーザー名が分からないので<> 表記とします。
文字コードは「適切なもの」であると仮定します。
読みやすさの都合上1ファイル扱いしますが、実際にはfunction宣言部などは別ファイルとしてください。
<? $con = NULL; function dbClose() { global $con; if ( $con != NULL ) { mysql_close($con); } } function dbConnect() { global $con; if ( $con == NULL ) { $con = mysql_connect('localhost','sinpanbo', '<ユーザ>'); if ( ! $con ) die("DB connection failure."); register_shutdown_function("dbClose"); } } function &query($sql) { $res = mysql_query($sql); if ( ! $res ) die("Query failed. " . mysql_error()); return mysql_fetch_assoc($res); } // POSTデータを取得 $s_sum = $_POST['s_sum'] ? $_POST['s_sum'] : ""; $k_sum = $_POST['k_sum'] ? $_POST['k_sum'] : ""; // SQL特殊文字をエスケープ $s_sum = mysql_escape_string($s_sum); $k_sum = mysql_escape_string($k_sum); // DB接続 dbConnect(); // 検索文生成 $sql = "SELECT * FROM jucyuu WHERE s_sum IS NOT NULL "; if ( $s_sum != '' ) { $sql .= " AND s_sum = '$s_sum' "; } if ( $k_sum != '' ) { $sql .= " AND k_sum = '$k_sum' "; } // Query発行 $records = query($sql); ?>
以上で $records[0]['k_name'](検索結果1行目のk_name) のように検索結果を扱うことができます。
表示は簡単なので割愛しますが、htmlspecialcharsを忘れずに!
あと所感として。
・命名について
テーブル名、フィールド名の命名がよくありません。
ローマ字(ヘボン式が一般的です)か英語か統一し、フィールド名は意味が分かる名前をつけましょう。
ただし外部DBなどの理由によって名称をあわせているならこの限りではありません。
kensaku.php や kensaku2.php という命名は好ましくありません。
showKensakuForm.php と kensaku.php のように動作と名前を一致させましょう。
・HTMLについて
入力項目には maxlengthをつける習慣をつけましょう。
・文字コードについて
文字コードはいつでもトラブルの種です。
HTMLのヘッダなどでもDBでも常に意識しましょう。
以上。
いただいたPHP文を使用しましたが下記のようなエラーが出てしまいました。ちなみにユーザーはrootです。どうすればいいですか?
あと、htmlspecialcharsをどこに入れればよろしいですか?
Warning: mysql_connect() [function.mysql-connect]: Access denied for user 'sinpanbo'@'localhost' (using password: YES) in C:\Program Files\xampp\htdocs\kensaku2.php on line 14
DB connection failure.
Access denied for user 'sinpanbo'@'localhost' (using password: YES) ということですのでMySQL接続のパスワードを指定してあげてください。
htmlspecialcharsは出力時に入れてください。
http://manual.xwd.jp/function.htmlspecialchars.html
どちらもPHPを使う上で基本的なことなので、<必ず>マニュアルを読んでしっかり理解するようにしましょう。
ありがとうございます。