現在、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で、どちらでも検索できるようにしたいです。よろしくお願いします。

回答の条件
  • 1人3回まで
  • 登録:2007/01/16 11:38:56
  • 終了:2007/01/23 11:40:08

回答(3件)

id:b-wind No.1

b-wind回答回数3344ベストアンサー獲得回数4402007/01/16 11:50:09

ポイント27pt

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

id:atarun

ありがとうございます。

2007/01/16 15:00:13
id:shivashanti No.2

shivashanti回答回数22ベストアンサー獲得回数12007/01/16 14:02:02

ポイント27pt

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でも常に意識しましょう。


 以上。

 

id:atarun

いただいた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.

2007/01/16 15:13:08
id:shivashanti No.3

shivashanti回答回数22ベストアンサー獲得回数12007/01/18 02:43:00

ポイント26pt

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

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

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

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

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません