人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

現在、WINDOWSでXAMPP(バージョン1.5.5)でSQLとPHPを使用し、顧客検索システムを作ろうとしています。検索にあたって、どのようなPHP文にすればよいでしょうか?

データベース作成
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で、どちらでも検索できるようにしたいです。よろしくお願いします。


●質問者: atarun
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Key PHP Windows データベース バージョン
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● b-wind
●27ポイント

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 は 適宜置き換えてください。

◎質問者からの返答

ありがとうございます。


2 ● shivashanti
●27ポイント

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.


3 ● shivashanti
●26ポイント

Access denied for user 'sinpanbo'@'localhost' (using password: YES) ということですのでMySQL接続のパスワードを指定してあげてください。

htmlspecialcharsは出力時に入れてください。

http://manual.xwd.jp/function.htmlspecialchars.html

どちらもPHPを使う上で基本的なことなので、<必ず>マニュアルを読んでしっかり理解するようにしましょう。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ